Jenkins任务B审批后无法自动重启部署多环境问题求助
Jenkins多环境部署自动重启解决方案
场景与需求
- 任务A触发任务B,需按顺序完成:env1部署 → 审批后自动重启任务B部署env2 → 再次审批后重启部署env3
- 核心要求:审批后自动触发任务,保留首次运行的所有参数,仅更新
ENVIRONMENT环境变量值 - 当前问题:审批通过后无任何反应,无法自动进入下一个环境部署
原尝试代码
stage('Continue deploy?') { when { branch 'develop' } } steps { input message: "Continue deploy to env2?" script { if (currentBuild.result) { if (env.ENVIRONMENT == 'env1') { env.ENVIRONMENT = 'env2' } else input message: "Continue deploy to env3?" env.ENVIRONMENT = '3' currentBuild.restart() } } } }
问题排查
- 语法错误:
when块多了一个闭合大括号,导致代码无法正常解析 - 逻辑判断失效:
currentBuild.result在审批通过后通常为null(构建还未出现失败/成功状态),直接跳过了后续重启逻辑 - 变量赋值错误:无论当前环境是env1还是其他,最后都会执行
env.ENVIRONMENT = '3',覆盖之前的正确赋值 - 分支逻辑混乱:第二个
input没有用大括号包裹,导致else分支的逻辑不完整 - 重启方式不可靠:
currentBuild.restart()无法保证原有参数被正确传递,容易丢失配置
修正后的代码
stage('Continue deploy?') { when { branch 'develop' } steps { script { // 根据当前环境判断下一步操作 def nextEnvironment = '' if (env.ENVIRONMENT == 'env1') { input message: "确认部署至env2?" nextEnvironment = 'env2' } else if (env.ENVIRONMENT == 'env2') { input message: "确认部署至env3?" nextEnvironment = 'env3' } else { echo "当前环境已完成部署流程,无需继续" return } // 获取当前构建的所有参数,仅更新环境变量 def originalParams = currentBuild.getBuildVariables() originalParams.ENVIRONMENT = nextEnvironment // 触发当前任务的新构建,传递更新后的参数 build job: env.JOB_NAME, parameters: originalParams.collect { key, value -> string(name: key, value: value.toString()) }, wait: false } } }
重点说明
- 修复了原代码的语法错误,确保逻辑可正常执行
- 按当前环境分支处理审批流程,明确下一个环境的赋值逻辑
- 通过
currentBuild.getBuildVariables()完整保留首次运行的所有参数,仅修改ENVIRONMENT变量 - 使用
build步骤触发新构建替代currentBuild.restart(),更稳定且能确保参数传递准确
内容的提问来源于stack exchange,提问作者ulehhn
相关产品推荐
相关产品推荐

