5

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

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

我想创建像这样的任意串并图,并让 Jenkins 有调度自由来在从属可用时并行执行 B/D 和 C。

加入插件在B 执行后立即加入。Build Pipeline Plugin 不支持 fork/join 点。不确定 Throttle Concurrent Builds Plugin(或已弃用的 Locks & Latches 插件)是否可行;如果是这样,我不知道怎么做。一种解决方案是使用 Apache Ivy 指定构建依赖项并使用 Ivy 插件。但是,我的工作都是 Makefile C/C++/shell 脚本工作,我没有使用 Ivy 的经验来验证这是否可行。

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

4

2 回答 2

7

有一个Build Flow 插件可以满足这个需求。它定义了用于指定并行作业的 DSL。你的例子可能是这样写的:

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

我刚刚找到它,这正是我想要的。

于 2012-06-07T06:19:33.123 回答
2

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

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

于 2012-01-30T16:04:47.457 回答