You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

声明式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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:23:28