如何使用Jenkins一次性批量构建多个独立Maven项目
独立Maven项目批量构建落地方案
完全可以实现,以下是几种生产环境验证过的方案,按需选择即可:
方案1:基于Jenkins Pipeline的关联触发(改造成本最低)
- 先梳理所有依赖
common的项目清单,把对应Jenkins作业名统一存在common项目代码库根目录的related-jobs.list文件里,一行一个作业名,后续新增关联项目直接修改这个文件即可,不用调整流水线逻辑。 - 在common项目的Jenkinsfile里加一个布尔类型的构建参数
BATCH_BUILD_RELATED,默认关闭,需要批量构建时手动勾选触发即可,避免每次小改common都触发全量构建浪费资源。 - 当common自身构建成功、且
BATCH_BUILD_RELATED参数为开启状态时,加一段循环触发逻辑,代码示例:
pipeline { agent any stages { stage('Build Common') { steps { sh 'mvn clean deploy -DskipTests' } } stage('Trigger Related Projects') { when { expression { return params.BATCH_BUILD_RELATED } } steps { script { def jobList = readFile(file: 'related-jobs.list').split('\n').findAll { it.trim() && !it.startsWith('#') } jobList.each { jobName -> build( job: jobName.trim(), wait: false, // 不等待下游构建结束,及时释放当前构建节点 parameters: [string(name: 'COMMON_VERSION', value: env.POM_VERSION)] ) } } } } } }
- 所有关联项目的构建脚本里加一个
COMMON_VERSION入参,Maven构建命令追加-Drevision=${params.COMMON_VERSION},强制拉取本次刚构建的最新common包,避免命中本地旧缓存导致构建出的包版本不对。
方案2:Maven聚合项目批量构建(适合代码权限统一管理的场景)
- 新建一个无业务代码的Maven聚合项目,根pom.xml里只做模块声明,把common和20余个关联项目全部列为模块,支持配置Git拉取后的相对路径,示例配置:
<project> <groupId>com.yourorg</groupId> <artifactId>batch-build-aggregator</artifactId> <version>1.0.0</version> <packaging>pom</packaging> <modules> <module>./common</module> <module>./biz-project-1</module> <module>./biz-project-2</module> <!-- 其余关联项目按路径依次添加 --> </modules> </project>
- 给这个聚合项目单独配置Jenkins作业,构建时先拉取所有模块的最新代码,执行
mvn clean install -pl common -am先把common构建安装到构建节点的本地仓库,再执行mvn clean deploy -pl '!common',Maven会自动按照依赖顺序完成所有关联项目的构建,不用手动编排构建顺序。 - 这个方案本地开发也能用,改完common直接在聚合项目根目录跑构建命令,不用挨个手动install本地依赖。
方案3:参数化批量触发作业(适合不想写脚本的场景)
- 给Jenkins装Parameterized Trigger插件,新建一个单独的「批量构建关联项目」模板作业。
- 作业配置里添加多选参数,把20余个关联项目的作业名列为可选项,同时加一个前置步骤:先拉取最新common代码完成构建部署。
- 配置构建后动作触发选中的下游作业,需要批量构建的时候,打开这个作业勾选要构建的项目(默认全选),点一次构建就能完成全流程,不用逐个跳转到每个项目的作业页点构建。
避坑提示
- 触发下游构建时一定要设
wait: false,不然common的构建作业会一直阻塞等所有下游跑完,白白占用构建节点资源- 所有Maven项目要统一从私服拉取依赖,不要依赖构建节点的本地SNAPSHOT缓存,避免出现版本不一致问题
- 按Jenkins节点的CPU、内存配置设置合理的下游构建并发上限,不要一次性把20多个项目全调度起来打满节点,导致所有构建都卡慢
内容的提问来源于stack exchange,提问作者Prasad
相关产品推荐
相关产品推荐

