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

如何在Jenkinsfile中获取重放构建的当前状态

如何在Jenkinsfile中获取重放构建的当前状态

我完全懂你现在的困扰——重放Jenkins构建时,想获取当前构建的状态,但试了currentBuild.result和currentResult都返回null,对吧?先给你梳理下问题出在哪,再给你对应的解决方案。

首先,你用来判断是否为重放构建的代码是没问题的:

def replayClassName = 'org.jenkinsci.plugins.workflow.cps.replay.ReplayCause'
def cause = currentBuild.getBuildCauses(replayClassName)
def isReplay = !(cause.isEmpty())

至于为什么currentBuild.result会返回null,核心原因是:这个属性只有在构建完全结束后才会被Jenkins赋值。如果你是在构建的steps阶段(也就是构建还在运行中)去调用它,自然拿不到值。

而currentBuild.currentResult是用来获取构建的实时执行状态的(哪怕构建还在进行中),如果这个也返回null,大概率是因为你在声明式Jenkinsfile中没有把代码放在script块里,或者Jenkins版本过低(建议升级到2.200以上版本)。

下面给你两种场景的具体实现:

场景1:构建过程中获取实时状态

如果需要在构建执行的步骤中获取当前重放构建的实时状态,可以用currentBuild.currentResult,注意如果是声明式Jenkinsfile,要把代码放在script块内:

pipeline {
    agent any
    stages {
        stage('Check Replay Status') {
            steps {
                script {
                    def replayClassName = 'org.jenkinsci.plugins.workflow.cps.replay.ReplayCause'
                    def cause = currentBuild.getBuildCauses(replayClassName)
                    def isReplay = !(cause.isEmpty())

                    if(isReplay) {
                        def currentStatus = currentBuild.currentResult
                        if(currentStatus == 'SUCCESS'){
                            echo "当前重放构建处于成功状态,执行对应操作"
                            // 在这里添加你的业务逻辑
                        } else {
                            echo "当前重放构建状态为${currentStatus},执行其他操作"
                            // 在这里添加你的业务逻辑
                        }
                    }
                }
            }
        }
    }
}

场景2:构建完成后获取最终状态

如果需要获取重放构建的最终结果,建议在post阶段操作,这时候currentBuild.result已经有值了:

pipeline {
    agent any
    stages {
        // 你的构建步骤
        stage('Build') {
            steps {
                echo "执行构建操作"
            }
        }
    }
    post {
        always {
            script {
                def replayClassName = 'org.jenkinsci.plugins.workflow.cps.replay.ReplayCause'
                def cause = currentBuild.getBuildCauses(replayClassName)
                def isReplay = !(cause.isEmpty())

                if(isReplay) {
                    def finalStatus = currentBuild.result
                    if(finalStatus == 'SUCCESS'){
                        echo "重放构建最终成功,执行后续操作"
                        // 在这里添加你的业务逻辑
                    } else {
                        echo "重放构建最终状态为${finalStatus},执行对应处理"
                        // 在这里添加你的业务逻辑
                    }
                }
            }
        }
    }
}

另外补充一点:如果你的Jenkins版本比较旧,currentBuild.currentResult可能不支持,这时候可以尝试通过currentBuild.getRawBuild().getExecution().getStatus().toString()来获取实时状态,但这个方法依赖Jenkins内部API,可能在后续版本中变动,建议优先升级Jenkins版本。

备注:内容来源于stack exchange,提问作者LugiHaue

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 07:12:57