16

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

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

没有依赖关系的模型
Commons依赖于 Model
Server依赖于 Common 和 Model
Frontend依赖于 Model

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

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

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

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

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

/本杰明

4

3 回答 3

8

假设您想坚持使用 4 个单独的构建而不是多模块构建,那么做到这一点的方法是在 4 个项目中的每一个中选中构建触发器下的框

“在构建 SNAPSHOT 依赖项时构建”

然后你签入 Model,jenkins 基于 SVN 轮询启动该项目的构建,当构建完成时,它会看到 common 对模型有依赖关系,因此它会触发 common 的构建以查看它是否仍然构建反对更新的模型。

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

于 2013-08-08T22:11:16.930 回答
4

这种事情的最佳解决方案是创建一个多模块构建,它会产生以下结构:

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

在每个模块中,例如在 commons 中,您定义对模型模块等的依赖项。构建顺序将由 maven 自动完成。

有了这样的项目,您可以简单地进入根目录并执行以下操作:

mvn clean package

您还可以使用:

mvn --pl --am server

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

于 2012-08-29T09:31:58.290 回答
3

两种解决方案。

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

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

于 2012-08-29T09:04:30.277 回答