首页 > 解决方案 > 在 Jenkins / Maven 中仅构建受影响的模块

问题描述

我们使用 Git、Jenkins 和 Artifactory 作为 CI/CD 管道。我们有一个庞大的代码库,每次完整构建都需要大量时间来处理。例如,我们有一个包含 100 多个模块的聚合 pom 项目。父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>

我们使用这种结构是因为一些模块依赖于其他一些模块。此外,我们希望将公共依赖项、dependenciesManagement 和 pluginManagement 集中在这个父 pom 文件中,而不是为每个模块维护 100 多个 pom 文件。

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

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

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

但是这些解决方案不适合我们的 Jenkins 流水线。Jenkins 服务器总是从 git 拉取最新版本的项目并开始构建。我不知道 Jenkins 是否有能力从 git 历史记录及其构建历史记录(任何状态信息?)中检测到哪些模块已更改。此外,我们正在运行多个 Jenkins 从属进程。构建工作并不总是坚持同一个机器工作区。

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

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

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

标签: gitmavenjenkinsbuildjenkins-pipeline

解决方案


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

詹金斯文件


推荐阅读