1

是否有任何 CI 服务器(CruiseControl、Jenkins、Hudson、...)支持项目之间正确的 DAG(直接非循环图)依赖关系?那是:

假设您有一个公共库项目 A、两个实用程序库项目 B 和 C,它们都使用 A,但彼此独立,以及一个程序项目 D,它同时使用 B 和 C。在 CruiseControl.rb(我目前正在使用),指定 B 依赖于 A、C 依赖于 A、D 依赖于 B 和 C 是很简单的。

如果有人提交到 B 或 C,则 CC.rb 将构建它,然后按预期构建 D。但是如果有人提交到 A,CC.rb 将构建 A,然后并行构建 B 和 C - 到目前为止,一切都很好。但是,假设 B 先完成构建;此时,CC.rb 将急切地开始构建 D,这很可能会失败,并且无论如何都是浪费时间,因为当 C 完成构建时,CC.rb 将去构建 D 第二次(这是构建我们实际上想要)。

我了解此行为并非特定于 CC.rb;如果 CI 服务器一次只考虑一个项目的依赖关系,这似乎是固有的。我正在寻找的是一个足够聪明的 CI 服务器,它可以确定 D 依赖于 B 和 C,并推迟构建它,直到两者都使用相同版本的 A 完成构建。或者,换句话说,一个 CI 服务器如果每个项目都是一个单独的 make 动作,它的工作原理类似于“make -j”会做的事情。

有这样的野兽吗?

4

1 回答 1

1

至少在 Jenkins 中,工作(或项目,如果你想这样称呼它们)可以以各种方式触发其他工作,甚至是开箱即用的,尤其是插件。显然与此处相关,可以“加入”不同作业的构建,以便在完成两个不同的作业后,触发第三个作业

我认为你可以很容易地用 Jenkins 构建你描述的系统(还有 Hudson,差别不大)。

于 2012-10-21T15:04:02.970 回答