如何根据脚本退出码设置Jenkins Pipeline阶段为不稳定或失败状态?
Jenkins Pipeline 按退出码区分阶段状态实现方案
核心改造逻辑
你可以通过sh步骤的returnStatus参数主动获取脚本执行的退出码,自行判断后调用Jenkins内置方法设置阶段状态,不需要依赖catchError的统一捕获逻辑:
- 配置
returnStatus: true后,sh步骤执行完会返回脚本的退出码,不会因为非0退出码直接抛出异常中断流程 - 退出码为2时调用
unstable()方法将当前阶段标记为不稳定,后续阶段可正常执行 - 退出码为1时调用
error()方法主动抛出异常,将当前阶段标记为失败
修改后完整Pipeline代码
pipeline { agent any parameters { string(name: 'FOO', defaultValue: 'foo', description: 'My foo param') string(name: 'BAR', defaultValue: 'bar', description: 'My bar param') } stages { stage('First') { steps { script { // 获取脚本执行退出码 int exitCode = sh( script: """ . ${WORKSPACE}/venv/bin/activate python ${WORKSPACE}/script.py --foo ${FOO} --bar ${BAR} deactivate """, returnStatus: true ) // 按退出码设置阶段状态 if (exitCode == 2) { unstable "script.py执行返回退出码2,阶段标记为不稳定" } else if (exitCode == 1) { error "script.py执行返回退出码1,阶段标记为失败" } // 退出码为0时无需额外处理,阶段默认为成功 } } } stage('Second') { steps { echo('Second step') } } } }
注意事项
- 因为用到了流程控制语句,所以需要把逻辑放在
script块中,适配声明式Pipeline的语法要求 - 如果希望退出码为1时也继续执行后续阶段,可以把
error()替换为currentBuild.result = 'FAILURE',不会主动中断流程
内容的提问来源于stack exchange,提问作者donmelchior
相关产品推荐
相关产品推荐

