如何在Jenkins中循环运行Maven构建并自动切换Windows代理节点
Jenkins自动批量在多台Windows代理依次运行Maven任务解决方案
方案1:使用多配置(矩阵)项目(最推荐,无需代码)
适合不想修改原有任务逻辑的场景:
- 进入现有Maven任务的配置页,点击「转换为多配置项目」,新建任务可直接选择「构建多配置项目」
- 找到「配置矩阵」板块,新增一个节点维度的参数
- 勾选所有需要运行任务的50台Windows代理节点
- 找到矩阵的「执行策略」设置,勾选「顺序执行矩阵配置」,即可实现跑完一台再跑下一台的需求
- 原有Maven构建配置保持不变,保存后触发一次构建即可,Jenkins会自动按顺序在所有选中的节点上执行任务,无需手动切换节点
方案2:声明式Pipeline实现(灵活度最高)
如果已经在使用Pipeline任务,直接套用以下脚本逻辑即可:
pipeline { agent none stages { stage('依次在所有Windows节点执行') { matrix { agent { label "${TARGET_NODE}" } axes { axis { name 'TARGET_NODE' // 此处替换为你所有Windows节点的名称,支持批量拉取符合命名规则的节点 values 'windows01', 'windows02', 'windows03', 'windows04' } } // 配置顺序执行,关闭并行 options { matrix { sequential true } } stages { stage('执行Maven构建') { steps { // 替换为你原有Maven任务的执行命令 bat 'mvn clean package' } } } } } } }
方案3:参数化构建+调度任务(适合不想修改原有任务结构的场景)
- 给现有Maven任务新增一个节点类型的参数
TARGET_NODE,用于指定运行节点 - 在任务的「限制项目的运行节点」配置项中填写
${TARGET_NODE},保存原有任务 - 新建一个专门的调度Pipeline任务,使用以下脚本即可按顺序触发原有任务在所有节点运行:
// 替换为你所有Windows节点的名称 def nodeList = ['windows01','windows02','windows03','windows04'] nodeList.each { nodeName -> // 前面的任务执行完成后再触发下一个 build job: '你的原有Maven任务名', parameters: [string(name: 'TARGET_NODE', value: nodeName)], wait: true }
注意事项
- 如果Windows节点命名有统一规则,可以直接调用Jenkins内置API批量拉取符合条件的节点名,无需手动逐个输入
- 提前确认所有Windows代理的Maven、JDK等环境配置一致,避免部分节点构建失败
- 如需调整执行速度,可设置任务的最大并发数,避免占用过多节点资源
内容的提问来源于stack exchange,提问作者Adrian Jimenez
相关产品推荐
相关产品推荐

