Jenkins:SVN触发器不能首先正确地构建依赖项

时间:2014-02-14 07:40:35

标签: maven svn jenkins

在Jenkins(1.550)中,我有两个maven项目,模型和GUI。 GUI项目取决于型号:

<groupId>com.acme</groupId>
<artifactId>gui</artifactId>
<version>1.0.0</version>
...
<dependencies>
    <dependency>
        <groupId>com.acme</groupId>
        <artifactId>model</artifactId>
        <version>1.0.0</version>
    </dependency>
</dependencies>

现在,对于每个项目,我让Jenkins配置为定期检查SVN并触发构建,这很好。

问题

仅当一个项目中的文件发生更改时才有效。但是,通常会在两个项目上进行提交,所以假设这两个文件将被提交:

A /model/Car.java
A /gui/CarDialog.java

现在Jenkins将看到GUI项目发生了变化,构建它,但由于缺少/model/Car.java而失败(因为模型尚未构建)。然后,一段时间后,触发模型中的构建(由于模型中的SVN更改),这构建良好。在那之后,gui将再次建造,这次成功。

我认为这种设置很常见,所以我很确定我忽略了一些东西,但我无法在任何地方找到答案。

变通方法

什么不起作用是在GUI上设置“正在构建依赖项时阻塞”,因为在GUI构建时,模型构建可能还没有注意到SVN发生了变化,因此没有构建模型。

到目前为止,我只找到了解决方法,最好的工作方法如下:

配置模型以每4分钟检查一次SVN更新:

*/4 * * * *

配置GUI以每8分钟检查一次SVN更新:

*/8 * * * *

此外,阻止GUI构建60秒,如果正在构建依赖项,则阻止构建,并在依赖关系构建完成后启动构建。

这样做的缺点是不鼓励使用*/4(应该使用H/4),而且感觉就像是黑客。

关于如何妥善解决我的问题的任何想法?

1 个答案:

答案 0 :(得分:3)

经过几个小时的阅读,我找到了一个很好的解决方案:

  1. 在Jenkins中安装Downstream-Ext插件
  2. 设置你的项目:model和gui
    1. 使用正确的includeRegions进行源代码管理,例如:对于型号:model/.*
    2. 禁用“投票SCM”
  3. 创建一个jenkins build:master
    1. 设置此构建在任何提交时触发的includeRegions:例如.*model/.* ,gui/.*
    2. 启用“投票SCM”
    3. 添加帖子构建操作:“构建其他项目(扩展)”
      • 要构建的项目:model, gui(正确的顺序很重要:上游,......,下游)
      • tick“仅当下游项目有SCM更改时触发”
  4. 可选:在Jenkins中安装dependency-queue-plugin
  5. <强>解释

    • 由于缺少轮询,SCM更改不会触发项目构建
    • 每次提交时都会触发主构建,无论哪个项目已提交都无关紧要
    • 除了按顺序分析下游构建外,主构建不执行任何操作。如果由于SCM更改而必须触发下游构建,则它将排队,否则不会
    • 由于dependency-queue-plugin
    • ,可选择简化队列