当前位置: 首页 > 知识库问答 >
问题:

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

赵智
2023-03-14

我们使用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>

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

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

如果开发人员知道哪些模块被更改了,这是很容易的。如果没有,一些maven插件可以帮助开发人员与git存储库相比检测未提交的更改。或者有些人可能会做MVN安装-amd-pl$(git status grep-e“modified:deleted:added:”awk“{print$2}”cut-f1-d“/”)

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

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

我试图用这个插件安装一个新的最新版本的Jenkins,但仍然找不到“增量构建-只构建更改的模块”的特性。

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

共有1个答案

韦阳晖
2023-03-14

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

詹金斯文件

 类似资料:
  • 问题内容: 让我给出一个方案。您有一个多项目和一个用于部署项目的持续集成服务器。这将部署到本地具有的的存储库。现在,假设您在CI部署项目后立即运行。 您最终将针对远程服务器的还是本地模块进行编译? 换句话说,存储库的对标签有没有影响? 问题答案: 标签是一个聚合。它与的处理方式不同。请注意,您在和中指定的值是不同的。声明a时,请指定maven坐标。同时,您指定相对目录。 您最终将针对远程服务器的模

  • 我是新来的詹金斯!我设法在Jenkins中克隆了GIT hub repo,现在试图在Jenkins中构建提取的maven项目。我从GITHUB获取了7个项目,它们相互依赖,也就是说,一些项目在其POM中为其他项目定义了依赖关系。 以下是我的maven配置(对不起,不能在这里张贴图片,见粗体) 根POM myFirstProject/POM.xml 目标和选项清洁包安装 MAVEN_OPTS 备用设

  • 我的项目结构如下: 是内的依赖项。 > 我应该在Jenkins中创建单独的作业来单独构建每个模块吗? 我为创建了一个作业,但出现以下错误(已将目标和操作设置为“清洁安装”: [INFO]扫描项目...[INFO] [INFO] ------------------------------------------------------------------------ [INFO]构建mypro

  • 问题内容: 我在Jenkins中建立了一个大型Maven多模块构建。它是为增量构建而设置的。 触发后,它将解析所有POM并弄清楚需要构建什么。 当前已将其设置为触发SCM更改。 我想进行此构建,以便可以执行以下操作: 仍然手动启动它。当我这样做时,它的增量构建行为将像今天一样起作用。 从Subversion提交钩子触发构建 。我想知道,如果我通过出色的指令来设置提交挂钩的麻烦,那将不会导致构建过程

  • 詹金斯的新成员。 目前,我们使用maven和Subversion作为SCM进行手动构建: > 在本地工作副本文件夹中,POM文件有1.1.1-SNAPSHOT,issue mvn release:clean release:prepare-p all modules 这将创建一个标记https://avn/path/to/tag/xxx-1.1.1,而我的本地工作副本仍在1.1.2-SNAPSHO

  • 我有一个Jenkins/Maven/Git多模块项目,其中包含一个子模块(由承包商开发,没有什么可以改变它)。由于Git和子模块,我必须使用命令“Git Clone-recursive ssh://xxxxxxx.Git”在Linux中克隆repo。 这意味着我必须检查Jenkins Git插件选项“Advanced sub-modules Behavious”和“recursivy update