Jenkins/Hudson - 如何在多个作业间实现超过1级的并行运行?

13

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

这似乎是一个非常常见的用例,但我尝试的大多数插件都不支持超过1级,就像下面的A分支一样。Join插件在这里似乎没有用。

阅读了使用Promotion插件,但我对指纹/归档的工件感到有些困惑,以使其正常工作。

有什么线索可以使这个简单的构建流水线工作吗?

流程

6个回答

7
有一个很好的解决方案:Multi-Job插件。它可以完全满足您的需求。使用MultiJob插件,您可以将作业分成连续运行的阶段。在每个阶段中,作业并行运行。
为简单起见,假设A和B是您要并行运行的“编译作业”。进一步假设可能存在一个A-Test(及其子项)和B-Test也是单独的作业。
你可以按照以下方式创建multijob:新项目-> Multijob项目
在项目中,您创建两个阶段(添加构建步骤“MultiJob阶段”)。第一个是COMPILE,您会添加阶段作业“A”和“B”。
您可以更改COMPILE阶段作业的选项,以便如果任何一个失败,则整个阶段将中止(默认),或允许作业继续。

MultiJob Setup

下一步,您需要为TEST添加另一个MultiJob阶段构建步骤,并将“A-Test”和“B-Test”添加到其中。请记住,A、B、A-Test和B-Test都是单独的作业,如果需要,也可以单独运行它们。
就这样。当作业运行时,它将包含链接到子作业,以便您可以查看子作业的情况。

注意:您现在也可以使用管道(又名工作流)作业来完成此操作。 - Steven the Easily Amused

7

正如jgritty所指出的,您可以使用Build flow插件。为了获得所需的并行执行类型,您可以运行类似于以下构建流脚本的内容:

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 块。


1
我看到警告 -> 不推荐使用:用户应该迁移到https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+Plugin。不确定如何真正做到这一点。 - Vikas Thange

1

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


构建流插件似乎也只支持1级深度。从示例中可以看出,如果您有一个并行块X,然后是另一个块Y,那么只有在X中的所有作业完成后,Y才会开始。因此,这类似于在Join插件或Multijob插件中使用1级深度连接。 - vdsf

1
我遇到了类似的问题,而Promoted Builds Plugin比其他人建议的Build Flow插件更适合我。
勾选“当...时推广构建”复选框可以将构建推广作业添加到现有作业中。您可以通过在标准下游项目下方勾选“当以下下游项目成功构建时”来配置促销(假设所有下游项目都由指纹相关联)。
在促销步骤中,您可以触发摘要结果的电子邮件或触发进一步的下游作业。
在这种情况下,您可以将促销工作添加到触发项目中,并依赖于A2 A3和B1项目的成功完成。

0

在构建后部分使用“构建其他项目”。 在A1完成后启动A2、A3。 在“管理Hudson-->配置系统”中增加执行器的数量到适当的数量。


0
我们的设置与“Steven the Easily Amused”建议的类似。除了我将“A”和“B”路径设置为它们自己的Multi-Job堆栈,另外还设置了一个Multi-Job作为“触发器”。其中,“A”和“B”堆栈并行运行。这样它们就不会直接依赖于彼此。您还可以根据一个或两个堆栈失败来聚合结果。您还可以设置“触发器”以收集参数并将其传递给两个堆栈。

工作A和工作B是根据我的帖子分开的工作,因此它们并不相互耦合。也许我表达不够清楚。感谢您进一步阐明。我会更新我的答案。 - Steven the Easily Amused

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接