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
相关产品推荐
相关产品推荐

