【问题标题】:Jenkins/Hudson - How to run multiple jobs in parallel more than 1 level deep?Jenkins/Hudson - 如何并行运行多个作业超过 1 级深度?
【发布时间】:2012-11-02 04:51:00
【问题描述】:

我正在尝试让以下工作流程在 Jenkins 中并行运行。例如,A 和 B 同时运行。一旦 A 完成同时运行 A2 和 A3,等等......

这似乎是一个很常见的用例,但我尝试过的大多数插件不支持超过 1 级深度,下面的 A 分支就是这种情况。加入插件在这里似乎没有帮助。

我是read about using the Promotion plugin,但我对要归档哪些指纹/文物以使这项工作发挥作用有点迷惑。

关于如何使这个简单的构建管道工作的任何线索?

【问题讨论】:

    标签: build jenkins continuous-integration hudson jenkins-plugins


    【解决方案1】:

    正如jgritty 指出的那样,您可以使用Build flow plugin。为了获得您想要的并行执行类型,您可以运行与以下构建流程脚本等效的内容:

    buildTrigger = build("Trigger")
    
    parallel(
        {
            buildA = build("A")
            buildA1 = build("A1")
            parallel(
                {
                    buildA2 = build("A2")
                },
                {
                    buildA3 = build("A3")
                },
            )
        },
        {
            buildB = build("B")
            buildB1 = build("B1")
        },
    )
    
    buildResults = build("GatherResult")
    

    在此脚本中,第一个 parallel 块负责 A 和 B 分支。一旦进入分支,每个构建都是连续的,直到您添加更多 parallel 块。

    【讨论】:

    【解决方案2】:

    有一个很好的解决方案:Multi-Job plugin。它完全符合您的要求。使用The MultiJob Plugin,您可以将您的工作拆分为连续运行的阶段。在每个阶段中,作业并行运行。

    为简单起见,我将假设 A 和 B 是您希望并行运行的“编译作业”。进一步假设可能存在 A-Test(及其子项)和 B-Test,它们也是独立的工作。

    您按如下方式创建多作业:新项目 -> 多作业项目

    在项目中创建两个阶段(添加构建步骤“MultiJob Phase”)。第一个将是编译,您将添加阶段作业的“A”和“B”。

    您可以更改 COMPILE 阶段作业的选项,以便如果其中一个失败,则整个阶段中止(默认),或允许作业继续。

    接下来,为 TEST 添加另一个 MultiJob Phase Build step,并在其中添加“A-Test”和“B-Test”。请记住,A、B、A-Test 和 B-Test 都是独立的作业,如果需要也可以单独运行。

    就是这样。当作业运行时,它将包含指向子作业的链接,以便您查看子作业发生了什么。

    【讨论】:

    • 注意:您现在也可以使用管道(又名工作流)作业来完成此操作。
    【解决方案3】:

    我相信this 可能是你需要的插件。

    【讨论】:

    • 构建流程插件似乎也只支持 1 级深度。查看示例,如果您有一个并行块 X,然后是另一个块 Y,则只有在 X 中的所有作业完成后,Y 才会启动。所以它类似于在 Join 插件或 Multijob 插件中使用 1 级深度连接。
    【解决方案4】:

    我遇到了类似的问题,与其他人建议的 Build Flow Plugin 相比,Promoted Builds Plugin 对我来说是一个更好的解决方案。

    通过勾选复选框“Promote build when...”,可以将构建提升作业添加到现有作业。您可以通过勾选 Criteria 下的“当以下下游项目构建成功时”将升级配置为在命名的下游项目完成时进行(假设所有下游项目都通过指纹关联)。

    在促销步骤,您可以触发汇总结果的电子邮件或触发进一步的下游作业。

    在这种情况下,您可以将促销作业添加到触发器项目中,并依赖项目 A2 A3 和 B1 成功完成。

    【讨论】:

      【解决方案5】:

      在后期构建部分使用构建其他项目。 说完成 A1 后开始 A2、A3。 在 Manage Hudson 中增加执行器的数量 --> 将系统配置为适当的数量。

      【讨论】:

        【解决方案6】:

        我们有一个类似于“容易被逗乐的史蒂文”所建议的设置。除了我将“A”和“B”路径设置为它们自己的多作业堆栈,另一个多作业设置为“触发器”。 “A”和“B”堆栈并行运行的地方。这样他们就不会直接相互依赖。您还可以根据一个/两个堆栈是否失败来汇总结果。 您还可以设置“触发器”来收集参数并传递给两个堆栈。

        【讨论】:

        • 工作 A 和工作 B 在我的帖子中是独立的工作,因此不耦合。也许我不清楚。感谢您进一步阐明。我会更新我的答案。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-11
        • 2019-09-26
        相关资源
        最近更新 更多