声明式Pipeline按Agent拆分阶段并设置无Agent审批步骤可行吗?
当然可行!
这种分阶段绑定不同执行器、中间插入无Agent审批的场景,正是Jenkins声明式Pipeline的典型适用场景之一。下面我会给你详细拆解实现思路,并附上可直接参考的代码示例:
核心实现逻辑
1. 让Stage1-5复用同一个Agent1实例
在声明式Pipeline中,你可以将多个Stage包裹在一个父Stage里,并为这个父Stage指定agent { label 'Agent1' }。这样Jenkins会在Agent1上创建一个执行器会话,父Stage内的所有子Stage都会复用这个会话,直到所有子Stage执行完成,不会重复启动新的Agent实例。
2. 无Agent环境运行审批Step6
使用agent none声明这个Stage不需要绑定任何执行器,然后用input步骤实现人工审批。这个阶段等待审批时,不会占用任何Agent资源,完全符合你的需求。
3. 让Stage7-10复用同一个Agent2实例
和第一组Stage的实现逻辑一致,用父Stage包裹Stage7-10,并指定agent { label 'Agent2' },实现同一个Agent2实例的复用。
完整代码示例
pipeline { agent none // 全局不指定默认Agent,由各阶段自行控制 stages { // 第一组:复用Agent1执行Stage1-5 stage('Agent1 执行组') { agent { label 'Agent1' } // 替换成你实际的Agent/Executor标签 stages { stage('Stage1') { steps { echo '正在Agent1上执行Stage1' // 这里添加你的Stage1业务逻辑 } } stage('Stage2') { steps { echo '正在Agent1上执行Stage2' } } stage('Stage3') { steps { echo '正在Agent1上执行Stage3' } } stage('Stage4') { steps { echo '正在Agent1上执行Stage4' } } stage('Stage5') { steps { echo '正在Agent1上执行Stage5' } } } } // 无Agent审批阶段:Stage6 stage('Stage6: 人工审批') { agent none steps { input( message: '请确认是否继续执行后续Stage?', submitter: 'admin,dev-team', // 指定可审批的用户/组 parameters: [string(defaultValue: '', description: '审批备注', name: 'ApprovalNote')] ) echo '审批通过,继续执行后续流程' } } // 第二组:复用Agent2执行Stage7-10 stage('Agent2 执行组') { agent { label 'Agent2' } // 替换成你实际的Agent/Executor标签 stages { stage('Stage7') { steps { echo '正在Agent2上执行Stage7' } } stage('Stage8') { steps { echo '正在Agent2上执行Stage8' } } stage('Stage9') { steps { echo '正在Agent2上执行Stage9' } } stage('Stage10') { steps { echo '正在Agent2上执行Stage10' } } } } } }
额外注意事项
- 请确保代码中的
label值和你Jenkins环境中Agent/Executor的实际标签完全匹配,比如如果你的执行器叫Executor1,就把label 'Agent1'改成label 'Executor1'。 input步骤可以灵活配置:比如添加timeout参数设置审批超时时间(避免Pipeline无限挂起),或者调整submitter指定有权限审批的用户/组。- 复用Agent实例的优势:可以保留Agent上的工作空间,比如Stage1下载的依赖包,Stage2-5可以直接复用,无需重复下载,提升流程执行效率。
内容的提问来源于stack exchange,提问作者timduhenchanter
相关产品推荐
相关产品推荐

