Jenkins Pipeline多任务复用同一EC2节点实例问题求助
解决Jenkins Pipeline子任务在同一EC2节点运行的问题
核心原因
你调用的子任务(verfiy1/verfiy2/verify3)会根据自身agent配置重新分配EC2节点,和父Pipeline的节点无关联,所以每次都会启动新实例。要实现所有任务复用同一节点,需让子任务明确指定父Pipeline所在的节点。
具体解决方案
步骤1:修改父Pipeline代码,传递当前节点名称给子任务
在调用每个子任务时,新增参数传递父Pipeline所在节点的唯一名称(通过env.NODE_NAME获取):
pipeline { agent { label 'linux' } stages{ stage("verify1"){ steps { script { build(job: "verfiy1", parameters: [ string(name: 'verfiy1', value: "${params.verfiy1}"), string(name: 'TARGET_NODE', value: "${env.NODE_NAME}") ]) } } } stage("verify2"){ steps { script { build(job: "verfiy2", parameters: [ string(name: 'verfiy2', value: "${params.verfiy2}"), string(name: 'TARGET_NODE', value: "${env.NODE_NAME}") ]) } } } stage("verify3"){ steps { script { build(job: "verify3", parameters: [ string(name: 'verify3', value: "${params.verify3}"), string(name: 'TARGET_NODE', value: "${env.NODE_NAME}") ]) } } } } }
步骤2:修改子任务的agent配置,绑定到指定节点
根据子任务的类型做对应修改:
情况1:子任务是Pipeline类型
修改子任务的Pipeline代码,将agent的label设置为传递过来的TARGET_NODE参数:
pipeline { agent { label "${params.TARGET_NODE}" } // 子任务的其他构建步骤... }
情况2:子任务是自由风格项目
- 进入子任务配置页面,勾选Restrict where this project can be run,输入
${TARGET_NODE} - 开启This project is parameterized,添加字符串类型参数,名称设为
TARGET_NODE
验证效果
重新运行父Pipeline后,所有子任务都会复用父Pipeline启动的EC2节点,不会再创建新实例。
内容的提问来源于stack exchange,提问作者skkc
相关产品推荐
相关产品推荐

