Jenkins中的增量构建

6

我正在使用Jenkins 1.462版本,maven版本为3.0.4。

我想搞清楚两个问题:

  1. 增量构建是否足够? 例如在这里中指出它不能100%正常工作。在这里的第19页中指出,增量构建是全量构建的补充,而不是替代品。

  2. Incremental build - only build changed modules是否按预期工作? 我的意思是什么?假设我有模块A、B、X、C、D。X使用A和B,C使用X,D使用C。如果我更改了X模块,那么我希望重新编译模块X(自身)、C(直接使用X)和D(在传递闭包中;D使用C,C使用X)。

注意:这是我启用增量构建的唯一更改。

1个回答

2
根据Maven文档,增量构建至少在3.0.4版本之前不是非常可靠:
“目前(3.0.4),Apache Maven不太支持增量构建。”
(引自https://cwiki.apache.org/confluence/display/MAVEN/Incremental+Builds第一行)
相反,我强烈建议使用以下两种方法来加速您的构建:
- 使用并行构建。在我的经验中,在大型项目中,这个方法效果很好,可以极大地减少构建时间,风险最小(如果有)。只需执行类似于mvn -T 1.5C clean install的命令。(参考https://cwiki.apache.org/confluence/display/MAVEN/Parallel+builds+in+Maven+3) - 如果您的模块是独立的,您可以将它们移动到不同的项目中,并通过使用Maven依赖项将它们粘合在一起。

1
由于提出的解决方案会导致非常严重的问题,因此被投票降低了:如果您有多台构建机器或构建多个分支,则在Jenkins中使用“mvn install”将创建意外行为。一般来说,构建不应该依赖于构建机器的状态,这就是为什么“mvn install”是一个极其危险的想法。如果您有相互依赖关系,请使用存储库管理器,并在需要时更新依赖项版本(不要启用“覆盖版本”,否则您将失去可重复性)。 - marcv81
1
嗨,marcv81,mvn install 不一定依赖于构建机器的状态。如果您正在使用Maven进行发布,则还应该使用中央存储库来推送和拉取您的构件。无论如何,如果您希望,可以将install替换为任何其他目标,问题是加速构建,而不是依赖管理,对于这一点,Maven有几个选项。 - Adrián Deccico
嗨Adrian,mvn install默认会在本地存储库中安装构件,从而改变构建机器的状态。这将影响下一个具有当前构建依赖项的构建结果。问题是关于性能的,但答案破坏了构建的可重复性,因此我会投反对票/评论。我提到了使用构件存储库;正确实现这个额外的好习惯是为每个构建启动一个新的虚拟机。穷人版的方法是在每次构建之前运行rm -rf ~/.m2/repository。 - marcv81
嗨,marcv81,编译还会改变本地机器的状态。所有东西都会修改当前环境的状态。即使是Maven启动的流氓测试也可能阻止下一次构建成功。mvn install只是另一个合法的命令,你需要知道何时使用它以及其中的权衡利弊。 - Adrián Deccico
别让我开始谈论糟糕的测试;-) - marcv81

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接