在Jenkins申请之前总是建立库?

时间:2011-11-23 15:58:51

标签: continuous-integration jenkins

我们有两个构建 A B ,其中 A 是依赖于库 B 。两者都是Qt项目。 詹金斯每15分钟对SCM进行一次民意调查。有时我会提交 A B ,但 A 的计时器会在 B 的计时器之前结束。因此,应用程序使用旧库进行构建,这会导致构建失败。现在我正在寻找一种方法来告诉Jenkins在构建 A 之前必须构建 B 。但是,只有在成功构建之后才能构建

是否有一个简单的解决方案,或者我们是否搞砸了我们的构建过程?

4 个答案:

答案 0 :(得分:2)

Jenkins中存在一些与项目引用和混乱构建顺序相关的漏洞。请参阅this bugor this one)。请参阅注释以了解可能的解决方法。

答案 1 :(得分:2)

  

有一个参数化触发插件,可启用“触发/呼叫”   在“添加构建步骤”菜单中的其他项目上构建。

https://stackoverflow.com/q/5701697/366299

答案 2 :(得分:2)

如果切换到Apache Ivy进行依赖关系管理,只要发布新版本的B(使用Jenkins Ivy Plugin),就可以触发A,假设A取决于{{ 1}}(或类似)B版本。

这不会阻止A建立旧版本的B,但至少它会在B完成时自动重建。

另外,请考虑将post receive hooks设置为trigger Jenkins,然后向A添加quiet period。然后当您将更改推送到A和B时,A和B都会立即触发但是A会在建造之前等一会儿。当A的静默期到期时,可以使用latest.integration选项强制它等到B完成。

最后,当你使用Ivy一段时间后,你可能会得到与其他许多人一样的结论:你不希望A取决于B的Block build when upstream project is building,而是取决于特定版本。它允许确定性构建并简化CI作业设置(仅在代码(包括其所依赖的B版本)更改时构建A),但您需要在自己的时间自己实现这一目标。

尽管Ivy非常注重Java,但我在非Java项目中非常成功地使用它;不要被推迟。

答案 3 :(得分:0)

在作业A配置中的高级选项下,选择上游项目构建时阻止构建。并使工作A依赖于工作B.