Build Jenkins提交钩子上的部分构建/模块化构建

Build Jenkins提交钩子上的部分构建/模块化构建,build,continuous-integration,hudson,jenkins,svn-hooks,Build,Continuous Integration,Hudson,Jenkins,Svn Hooks,工具: 詹金斯。1.470 Maven 2 颠覆 环境 假设我的构建有许多项目a-D。依赖关系图如图所示。也就是说:B依赖于A中的类,C依赖于B中的类,D依赖于A中的类。我们创建jenkins构建,以便它们将依赖于它们的构建称为构建后操作 A |-->B-->C |-->D 每天晚上,我们都会在Jenkins中触发一个完整的构建(a构建,触发B(触发C),触发D)。这是很容易做到的,只要告诉A每晚构建,其余的级联 问题 然而,在提交时,我们希望构建曾经提交过的项目 情形1:我们轮询存储库(或者

工具:
詹金斯。1.470
Maven 2
颠覆

环境

假设我的构建有许多项目a-D。依赖关系图如图所示。也就是说:B依赖于A中的类,C依赖于B中的类,D依赖于A中的类。我们创建jenkins构建,以便它们将依赖于它们的构建称为构建后操作

A
|-->B-->C
|-->D

每天晚上,我们都会在Jenkins中触发一个完整的构建(a构建,触发B(触发C),触发D)。这是很容易做到的,只要告诉A每晚构建,其余的级联

问题

然而,在提交时,我们希望构建曾经提交过的项目

  • 情形1:我们轮询存储库(或者使用,这没有什么区别),发现有一个提交给B,然后B将构建,C将构建<坚强>成功

  • 情形2:我们轮询存储库,发现B和C在一次提交中被提交,然后Jenkins将尝试构建B(触发C的构建)和构建C(第二次构建)失败。看看会发生什么?C构建了两次,占用了宝贵的构建时间。保持快速构建

有人知道在每个提交的构建管道中只触发最高项目的方法吗?

我想一个解决方案是一个复杂的SVN钩子,它确定每个管道中最高的项目

  • 情景3:在一次提交中提交B、C和D。SVN钩子发现C依赖于B。钩子调用特定于项目的链接来开始B和D的构建
陷阱:非常复杂的SVN提交钩子。必须维护SVN挂钩中的管道


我觉得这是别人遇到的问题。有没有Jenkins插件可以帮助实现这一点?

最好让Jenkins等待构建,直到c依赖的构建完成。是作业配置中用于执行此操作的标志。但是每项工作你都必须这样做。
顺便提一下还有另一个标志要求jenkins等待构建,直到相关作业完成。

我也在寻找解决此问题的有效方法。我看到了一些建议,但到目前为止,我们只通过使用Locks&lacks插件序列化构建来避免其中一个陷阱。它不会阻止一个项目通过一次签入多次构建,但会确保在上游项目完成后按顺序重新构建该项目

在一般情况下,这实际上是一个需要解决的复杂问题,但我一直在考虑编写一个插件来处理这个问题。一个简单的解决方案是检查上游项目当前是否正在构建,如果是,则将自己从构建队列中移除。由于上游作业将在构建完成后启动构建,因此这是一个选项


更好的选择是一个基于依赖关系图自动管理构建队列的插件。这可能会很复杂,因为您需要确保在所有依赖项完成之前不会开始构建。本质上,这意味着每次签入都会导致插件自动将所有下游构建添加到队列中,以便它能够管理它们。有可能有一种更聪明、更简单的方法通过现有的上游/下游触发器实现这一点,但我还不清楚如何实现这一点。已经有构建管道插件声称可以处理这种情况,但它们显然没有阻止竞争条件,即下游构建可以通过与上游构建相同的签入触发。

在情况2中,jenkins项目C&B正在考虑相同的svn项目?