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

Jenkins脚本化流水线:如何仅标记单个阶段为不稳定?

实现单个阶段标记为不稳定(黄色)的脚本化流水线方案

当然可以做到!你当前的写法直接修改了全局的currentBuild.result,这会把整个构建的结果设为UNSTABLE,所以所有阶段都会同步显示黄色。要实现仅目标阶段变黄、其他阶段保持绿色,同时保留后续阶段覆盖最终构建结果的能力,这里有两种实用方案:

方案1:通过catchError捕获异常并标记阶段

适合阶段内有异常抛出,但你不想中断流水线,只想把该阶段标记为不稳定的场景:

node() { 
    stage("Stage1") { 
        // 正常执行的工作,阶段会显示绿色
        echo "Stage1 completed successfully"
    } 

    stage("Stage2") { 
        // 捕获阶段内的异常,仅标记当前阶段为UNSTABLE,不修改全局构建结果
        catchError(buildResult: null, stageResult: 'UNSTABLE') {
            echo "Stage2 encountered non-catastrophic issues"
            // 模拟触发不稳定的异常(如果是实际业务逻辑,替换为你的代码)
            throw new Exception("Intentional unstable mark for Stage2")
        }
    } 

    stage("Stage3") { 
        echo "Stage3 continues running smoothly"
        // 根据需要覆盖最终构建结果,比如这里设为SUCCESS
        currentBuild.result = 'SUCCESS'
    } 
}

方案2:手动标记当前阶段结果

适合没有异常抛出,只是需要根据业务条件主动标记阶段为不稳定的场景:

node() { 
    stage("Stage1") { 
        echo "Stage1 finished successfully"
    } 

    stage("Stage2") { 
        echo "Doing work that needs to be marked unstable"
        // 直接设置当前阶段的结果为UNSTABLE,不影响全局状态
        currentBuild.currentStage.result = 'UNSTABLE'
    } 

    stage("Stage3") { 
        echo "Stage3 completes without issues"
        // 覆盖全局构建结果为SUCCESS,覆盖之前的UNSTABLE状态
        currentBuild.result = 'SUCCESS'
    } 
}

关键细节说明

  • catchError参数作用:buildResult: null表示不修改全局构建结果,只调整当前阶段的状态;stageResult: 'UNSTABLE'则明确把该阶段标记为黄色。
  • currentBuild.currentStage:只能在阶段内部使用,用来直接操作当前阶段的状态,不会影响其他阶段或全局构建结果。
  • 全局结果覆盖:后续阶段可以随时修改currentBuild.result来决定最终的构建状态——比如如果Stage3执行失败,你可以把它设为FAILURE,完全覆盖之前的UNSTABLE设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:38:54