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

Jenkins某stage重试全部失败后如何不跳过后续阶段继续执行pipeline

解决方案
  • Jenkins Pipeline 默认只要存在未捕获的异常就会中止整个流水线,你需要在retry块的最外层捕获所有重试结束后抛出的最终异常,不向外抛出即可让后续Stage正常执行。
  • 你可以自主选择是否将当前Stage标记为失败/不稳定状态,不影响后续Stage的执行逻辑。

修改后代码示例(推荐用catchError实现)

stage('Run Test') {
    // 外层catchError自动捕获块内所有异常,不会向外抛出导致流水线中止
    catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
        try {
            echo "Hello World"
        } catch(error) {
            retry(5) {
                try {
                    input "Retry?"                       
                    echo "Hello World in catch"
                } catch(err) {
                    // 单次重试失败抛出异常,触发retry的下一次重试逻辑
                    throw err
                }
            }
        }
    }
}

参数说明

你可以根据需求调整catchError的参数:

  • 如果你希望整个Pipeline最终状态不受该Stage失败影响,可设置buildResult: 'SUCCESS'
  • 如果你希望仅标记当前Stage为失败、不改变Pipeline整体状态,可设置buildResult: null, stageResult: 'FAILURE'

如果不用内置的catchError,也可以手动嵌套try-catch实现,逻辑完全一致:

stage('Run Test') {
    try {
        try {
            echo "Hello World"
        } catch(error) {
            retry(5) {
                try {
                    input "Retry?"                       
                    echo "Hello World in catch"
                } catch(err) {
                    throw err
                }
            }
        }
    } catch (finalException) {
        echo "Run Test Stage 重试5次后仍失败,错误信息:${finalException.getMessage()}"
        // 可选:标记当前Stage为失败
        org.jenkinsci.plugins.workflow.cps.steps.StageStep.Result stateResult = org.jenkinsci.plugins.workflow.cps.steps.StageStep.Result.FAILURE
        // 可选:修改整个Pipeline的最终状态,不需要就注释掉本行
        currentBuild.result = 'FAILURE'
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:36:04