在构建依赖项时,如何使jenkins触发依赖项目的构建

时间:2012-08-29 08:53:10

标签: maven build jenkins maven-3 pom.xml

关于如何设置Jenkins和maven 3,我有一个简单的问题。

为了简单起见,我们假设有四个项目:

模型,没有依赖关系
Commons 取决于型号
服务器,取决于Common和Model
前端取决于型号

我想要实现的是,基于Model的成功构建会触发所有项目的新构建,这些项目在其pom中依赖于Model(此处为Common,Server和Frontend)

如果Common失败,则无需构建Server。

在上面的例子中,似乎我可以通过在Model和Commons上手动设置依赖项目来解决这个问题,但是这个信息已经可以在每个项目的pom文件中找到(服务器和前端),这使我得出结论/希望詹金斯应该能够自己解决这个问题。

Jenkins可以通过解析Jenkins中定义的每个项目上的pom来推断依赖树,并自动执行某种最佳构建顺序/依赖项处理,或者我必须设置“上游项目构建时阻止构建”和“之后构建”其他项目建立[依赖项目清单]“如上所述?

我正在使用Jenkins版本1.473和Maven 3.
我们的maven项目pom不使用父标签或模块标签。

/本杰明

3 个答案:

答案 0 :(得分:7)

假设您希望坚持使用4个单独的构建而不是多模块构建,那么在4个项目中的每个项目中都可以选中构建触发器下的框

“构建SNAPSHOT依赖项时构建”

然后你签入模型,jenkins基于SVN轮询启动该项目的构建,当构建完成时,它看到common对模型有依赖性,所以它触发了一个common的构建,看看是否有仍然是针对更新的模型构建的。

必须将jenkins作业创建为maven作业才能存在此选项。它不适用于自由风格的项目,即使它们运行的​​脚本恰好调用了maven。

答案 1 :(得分:4)

这种方法的最佳解决方案是创建multi-module build,从而产生以下结构:

root (pom.xml)
  +--- model (pom.xml)
  +--- commons (pom.xml)
  +--- server (pom.xml)
  +--- frontend (pom.xml)

在每个模块中,例如在公共区域中,您定义了对模型模块等的依赖关系。 构建顺序将由maven自动完成。

使用这种项目,您只需转到根目录即可:

mvn clean package

您也可以使用:

mvn --pl --am server

将自动构建服务器以及所有依赖模块。

答案 2 :(得分:3)

两种解决方案。

  1. 在仅声明构建顺序(模型,公共,服务器和前端)的其他项目之上创建一个模块pom。只需将此项目安装到Jenkins

  2. 即可
  3. 在每个作业中,都有一个复选框,以“触发构建的内容”的形式激活 - >在项目之后建立。 (选项的名称可能不是我写的,因为我的Jenkins是用法语配置的......)