【问题标题】:Jenkins triggering dependent builds only when necessary?Jenkins仅在必要时触发依赖构建?
【发布时间】:2013-03-04 11:34:16
【问题描述】:

我有以下构建场景:

项目C依赖项目B,项目B又依赖项目A

项目 X 依赖于 C,项目 Y 依赖于 B,项目 Z 依赖于 A。

还有许多其他具有依赖关系的模块,但最“复杂”的构建关系是与项目 X。为了在 Jenkins 中进行设置,我使用了参数化触发器插件,其中“阻塞直到触发的项目完成构建” “ 选项。每个可构建模块都有自己的 Jenkins 作业,插件用于阻止必要的依赖构建作业。

我在此设置中遇到了 2 个问题。

  1. 项目 A 和 B 多次构建,因为它们位于项目 X、Y、Z 等的传递依赖链中。
  2. Jenkins 有时会完全阻止构建项目,因为针对作业 X、Y、Z 等的构建已填满所有可用的执行程序(由 scm 更改触发),并且相关项目在队列中等待构建.

我正在寻找有关如何为此类构建环境配置 Jenkins 的建议。我是 Jenkins 的新手,所以我不知道有哪些选项可以解决这个问题。

编辑:

所有作业都由 SCM 更改触发。依赖项目也由 Parameterized Trigger Plugin 触发; “阻止直到触发的项目完成构建”选项。

【问题讨论】:

  • 您能否列出您用于触发每个构建的机制 - SCM 更改、使用 Ivy 插件之类的依赖项更改、上游构建触发等?如果某些构建是由多种机制触发的,您可能可以简化触发器。
  • @gareth_bowles 已编辑问题。

标签: ant jenkins


【解决方案1】:

Jenkins 有多种触发构建的方式。最常见的是通过监视存储库更改。

但是,您也可以在另一个作业完成构建后自动触发构建。这是内置在 Jenkins 中的。查看 Build Triggers 并选中复选框 Build after other projects are built,或在 Post-Build 部分中,选择 Build Other Projects post-build action。而且,您可以在构建中使用多个触发器,因此如果来自另一个项目的依赖项发生更改或源文件发生更改,则可能会发生构建。

如果您使用 Maven 或 Ivy,如果项目使用的 Maven/Ivy jar 依赖项发生更改,则可以使用插件来触发构建。

另一个有用的插件是Copy Artifacts Plugin。这允许您将构建工件从项目“X”复制到项目“Y”,以便项目“Y”用于构建。

【讨论】:

  • maven 插件是否会在更改 jar 的现有版本时触发,例如快照版本?或者,它只会寻找增量版本吗?
  • 根据Maven dependency updater trigger plugin:此插件将检查是否有任何 SNAPSHOT 依赖项(或可选插件 SNAPSHOT)在您的项目的依赖项期间已更新解决并触发构建。只要您的依赖项是快照,这应该可以工作。
猜你喜欢
  • 1970-01-01
  • 2016-02-18
  • 2015-02-07
  • 2016-11-10
  • 2019-07-15
  • 2018-09-20
  • 1970-01-01
  • 1970-01-01
  • 2012-03-18
相关资源
最近更新 更多