在Jenkins / Maven中仅构建受影响的模块

时间:2018-06-26 07:27:10

标签: git maven jenkins build jenkins-pipeline

我们正在使用Git,Jenkins和Artifactory作为CI / CD管道。 我们有一个庞大的代码库,每次完整构建都需要大量时间来处理。例如,我们有一个聚合pom项目,其中包含100多个模块。父pom.xml文件如下所示:

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.sample</groupId>
    <artifactId>project</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>module-1</module>
        <module>module-2</module>
        <module>module-n</module>
    </modules>
</project>

我们使用此结构,因为某些模块依赖于其他模块。另外,我们希望在此父pom文件中集中公共依赖项,dependenciesManagement和pluginManagement,而不是每个模块维护100个以上的pom文件。

由于可能不会在每个模块上都进行更改,因此我们希望通过仅构建自上次成功构建以来受影响的模块来加快构建过程。这可以由maven完成。

示例:mvn clean install -pl module1,module2,module3 -amd -am

如果开发人员知道哪些模块已更改,这很容易。如果没有,一些Maven插件可以帮助开发人员检测与git仓库相比未提交的更改。或者某些人可能会mvn install -amd -pl $(git status | grep -E "modified:|deleted:|added:" | awk '{print $2}' | cut -f1 -d"/")

但是这些解决方案不适合我们的Jenkins渠道。 Jenkins服务器始终从git中提取项目的最新版本并开始构建。我不知道詹金斯是否有能力从git历史及其构建历史(任何状态信息?)中检测出已更改了哪些模块。此外,我们正在运行多个Jenkins从属进程。构建作业并不总是坚持在同一台计算机工作空间中。

我搜索了一个Jenkins插件,似乎可以解决我的问题。 https://wiki.jenkins.io/display/JENKINS/Maven+Project+Plugin

我尝试使用此插件安装Jenkins的最新版本,但仍然找不到“增量构建-仅构建已更改的模块”功能。

有人可以建议一些方法(通过插件或手动脚本编写)来帮助仅在Jenkins中构建已更改的模块吗?我已经搜索了很多天,但仍然找不到可行的解决方案。如果有人可以给我一些见解或指导,我将不胜感激。非常感谢!

2 个答案:

答案 0 :(得分:1)

我知道这是一个古老的问题,但是如果有人还在寻找答案, 我为“多分支管道”创建了一个Jenkinsfile,该文件仅针对Maven多模块项目构建受影响的模块。

Jenkinsfile

答案 1 :(得分:0)

您可以使用Multi Module Maven Release Plugin执行以下操作:

http://danielflower.github.io/multi-module-maven-release-plugin/index.html

还要考虑:如果您的模块通常是单独构建的,为什么要将它们放在一个大型的多模块项目中?