我们有两个构建 A 和 B ,其中 A 是依赖于库 B 。两者都是Qt项目。 詹金斯每15分钟对SCM进行一次民意调查。有时我会提交 A 和 B ,但 A 的计时器会在 B 的计时器之前结束。因此,应用程序使用旧库进行构建,这会导致构建失败。现在我正在寻找一种方法来告诉Jenkins在构建 A 之前必须构建 B 。但是,只有在成功构建之后才能构建。
是否有一个简单的解决方案,或者我们是否搞砸了我们的构建过程?
答案 0 :(得分:2)
Jenkins中存在一些与项目引用和混乱构建顺序相关的漏洞。请参阅this bug(or this one)。请参阅注释以了解可能的解决方法。
答案 1 :(得分:2)
有一个参数化触发插件,可启用“触发/呼叫” 在“添加构建步骤”菜单中的其他项目上构建。
答案 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),但您需要在自己的时间自己实现这一目标。
答案 3 :(得分:0)
在作业A配置中的高级选项下,选择上游项目构建时阻止构建。并使工作A依赖于工作B.