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

Jenkins scripted pipeline如何实现从指定阶段重启执行

Scripted Pipeline 回退重跑实现方案

Scripted Pipeline 基于Groovy脚本实现,执行流控制非常灵活,完全可以实现deploy阶段完成后经人工确认回退到test阶段重跑的需求,不需要依赖额外插件,核心实现思路是用循环包裹需要重跑的阶段段,搭配input步骤做人工交互控制。

核心实现逻辑

  • build阶段放在循环外部,流水线启动时仅执行一次,不会因为回退重跑重复执行构建步骤
  • 用布尔变量作为循环控制开关,将test、deploy两个阶段放在循环体内
  • deploy阶段执行完成后立刻触发input人工确认步骤,根据用户的选择修改循环开关的状态:
    • 用户选择重跑时,将循环开关设为放行状态,流水线会回到循环起点,重新执行test阶段
    • 用户选择继续后续流程时,关闭循环开关,跳出循环后执行monitor阶段
  • 可以按需增加重跑次数阈值,避免无限制循环重跑

可直接复用的示例代码

node {
    // 第一阶段:构建,仅执行一次
    stage('Build') {
        echo '执行构建相关操作:拉取代码、编译、制品打包等'
        // 替换为实际构建逻辑
    }

    def rerunFlag = true
    def maxRerunTimes = 3 // 限制最大重跑次数,避免死循环
    def rerunCount = 0

    while (rerunFlag) {
        rerunFlag = false // 默认本次deploy完成后退出循环,进入monitor阶段
        rerunCount += 1

        stage('Test') {
            echo "第${rerunCount}次执行测试逻辑"
            // 替换为实际测试逻辑:单元测试、集成测试、接口测试等
        }

        stage('Deploy') {
            echo "第${rerunCount}次执行部署逻辑"
            // 替换为实际部署逻辑:部署到目标环境、配置更新等
        }

        // 超过最大重跑次数直接跳出循环,不再等待人工输入
        if (rerunCount >= maxRerunTimes) {
            echo "已达到最大重跑次数${maxRerunTimes},自动进入监控阶段"
            break
        }

        // 部署完成后暂停等待用户选择
        def userSelect = input(
            message: '部署完成,请选择后续执行路径',
            ok: '确认',
            parameters: [
                choice(
                    choices: ['进入Monitor阶段', '从Test阶段重新执行'],
                    description: '选择后续操作',
                    name: 'nextAction'
                )
            ]
        )

        if (userSelect == '从Test阶段重新执行') {
            rerunFlag = true
            echo "用户确认重跑,即将开始第${rerunCount + 1}轮test->deploy流程"
        }
    }

    // 最终阶段:监控校验
    stage('Monitor') {
        echo '执行部署后监控:服务可用性检查、指标校验、流量观测等'
        // 替换为实际监控逻辑
    }
}

可选调整项

  • 如果你不需要选择菜单,只需要点击Proceed就重跑、点击Abort就终止流水线,可以把input的choice参数去掉,直接在input返回后将rerunFlag设为true即可
  • 如果重跑需要清理上一轮test、deploy产生的临时数据,可以在循环体内最开头、test阶段之前增加对应的清理步骤,避免历史数据干扰新一轮执行
  • 如果需要记录重跑原因,可以在input参数里增加文本输入框,让用户填写重跑备注存入构建日志

内容的提问来源于stack exchange,提问作者user2636464

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 20:01:22