Jenkins(Hudson) - 管理并行构建之间的依赖关系

时间:2012-01-29 14:21:33

标签: jenkins parallel-processing ivy hudson-plugins jenkins-plugins

使用Jenkins或Hudson我想用fork和join点创建一个构建管道,例如:

     job A
    /      \
 job B    job C
   |        |
 job D      |
    \      /
     job E

我想像这样创建任意series-parallel graphs,并且只要有可用的奴隶,Jenkins就可以自由地并行执行B / D和C.

B执行后Join Plugin立即加入。 Build Pipeline Plugin不支持fork / join点。不确定是否可以使用Throttle Concurrent Builds插件(或不推荐使用的Locks& Latches插件);如果是这样我无法弄清楚如何。一种解决方案可能是使用Apache Ivy指定构建依赖项并使用Ivy插件。但是,我的作业都是Makefile C / C ++ / shell脚本作业,我没有使用Ivy来验证是否可行。

在Jenkins中指定并行作业及其依赖项的最佳方法是什么?

2 个答案:

答案 0 :(得分:7)

Build Flow plugin符合这一需求。它定义了一个用于指定并行作业的DSL。您的示例可能是这样写的:

build("job A")
parallel (
    {
        build("job B")
        build("job D")
    },
    {
        build("job C")
    }
)
build("job E")

我刚发现它,这正是我所寻找的。

答案 1 :(得分:2)

有一种解决方案可能适合您。它要求所有构建都以单个作业开始,并在每个链的末尾以一系列明确的作业结束;在你的图表中,“工作A”将是起始工作,工作C和D将是终止工作。

让作业A创建指纹文件。然后,作业A可以在此示例中启动多个构建链,B / D和C.同样在作业A上,通过Promotions Plugin添加促销,其标准是成功完成后续作业 - 在本例中为C和D.作为促销的一部分,包括最终作业的触发器,您的案例Job E.可以使用Parameterized Trigger Plugin完成此操作。然后,确保您在促销条件中列出的每个作业也指纹相同的文件并获得相同的指纹;我使用Copy Artifact Plugin来确保每次都获得完全相同的文件。