工具的:
詹金斯诉。 1.470
Maven 2
颠覆
环境
假设我的构建有许多项目A-D。依赖图存在,如图所示。也就是说:B依赖于A中的类,C依赖于B中的类,D依赖于A中的类。我们创建jenkins构建,使得它们将构建依赖于它们作为构建后动作。
一个
| - > B - > ç
| - > d
每晚,我们触发Jenkins的完整版本(A版,触发器B(触发器C),触发器D)。通过告诉A每晚建造,其余的级联,这很容易做到。
问题
但是,在提交时,我们希望构建一次提交的项目。
情况1 :我们轮询存储库(或使用commit hooks,它没有任何区别)并发现有一个提交到B,然后B将构建和C将建立。 成功!
情况2 :我们轮询存储库并发现B和C在一次提交中被提交,然后Jenkins将尝试构建B(触发C的构建),并构建C(第二次构建)。 失败。看看会发生什么? C建成两次,占用了宝贵的构建时间。 保持快速构建!
有没有人知道只在每个已提交的构建管道中触发最高项目的方法?
我想一个解决方案是一个复杂的SVN钩子,它决定了每个管道中的最高项目......
陷阱:非常复杂的SVN提交挂钩。必须维护SVN钩子中的管道。
我觉得这是其他人遇到的问题。是否有一个Jenkins插件可以帮助解决这个问题?
答案 0 :(得分:1)
让jenkins等待构建直到c依赖的构建完成是一个想法。这是作业配置中的一个标志,以便做到这一点。但是你必须为每项工作做到这一点。 顺便说一下......还有一个标志要求jenkins等待构建,直到完成一个dependend作业。
答案 1 :(得分:0)
我也在寻找这个问题的有效解决方案。我已经看到了一些建议,但到目前为止,我们只是通过使用Locks& Latches插件序列化构建来避免一个陷阱。它不会阻止项目从单个签入中多次构建,但它将确保在上游项目完成后按顺序重建项目。
在一般情况下,这实际上是一个复杂的问题,但我一直在考虑编写一个插件来处理这个问题。一个简单的解决方案是检查上游项目当前是否正在构建,如果是,则从构建队列中删除自己。由于上游作业将在完成后启动,因此这是一个选项。
更好的选择是根据您的依赖关系图自动管理构建队列的插件。这可能很复杂,因为您需要确保在完成所有依赖项之前不会开始构建。从本质上讲,这意味着每次签入都会导致插件自动将所有下游构建添加到队列中,以便管理它们。现有的上游/下游触发器可能会有一种聪明,简单的方法来实现这一点,但我还不清楚如何实现它。已经有声称处理这种情况的构建管道插件,但它们显然无法阻止竞争条件,其中下游构建可以通过与上游构建相同的签入来触发。