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

Fra*_*ung 6 git build maven jenkins 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>
Run Code Online (Sandbox Code Playgroud)

我们使用此结构,因为某些模块依赖于其他模块。此外,我们希望将公共依赖项,dependenciesManagement和pluginManagement集中在此父pom文件中,而不是每个模块维护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服务器始终从git中提取项目的最新版本并开始构建。我不知道詹金斯是否有能力从git历史及其构建历史(任何状态信息?)中检测出已更改了哪些模块。此外,我们正在运行多个Jenkins从属进程。生成作业并不总是遵循相同的计算机工作空间。

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

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

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

Rya*_*mos 4

我知道这是一个老问题,但如果有人仍在寻找答案,我为多分支管道创建了一个 Jenkinsfile,它仅为 Maven 多模块项目构建受影响的模块。

詹金斯文件