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

如何根据脚本退出码设置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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:15:05