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

在Jenkins构建的when条件中检查上一阶段状态的方法问询

Jenkins构建中检查上一阶段状态的When条件表达式

你之前用的currentBuild.getPreviousBuild()是检查上一次完整构建的结果,不是当前构建里的上一个阶段;而currentBuild.getPreviousStageResult()是不存在的方法,自然不会生效。下面是两种可行的解决方案:

方案1:通过阶段名称精准定位

如果知道上一个阶段的明确名称(比如叫"Build"),可以直接根据名称获取它的状态:

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                echo '执行构建步骤...'
            }
        }
        stage('Test') {
            when {
                script {
                    // 获取指定名称的阶段对象
                    def targetStage = currentBuild.rawBuild.getAction(org.jenkinsci.plugins.workflow.job.views.FlowGraphAction)
                                       .getStages()
                                       .find { it.getName() == 'Build' }
                    // 转换阶段状态为字符串
                    def stageResult = targetStage.getStatus().toString()
                    // 判断状态是否符合要求
                    return stageResult != 'ABORTED' && stageResult != 'FAILURE'
                }
            }
            steps {
                echo '执行测试步骤...'
            }
        }
    }
}

方案2:自动获取上一个已完成的阶段

如果不想硬编码阶段名称,可以通过取最后一个已完成的阶段来定位上一阶段(当前阶段还未完成,所以最后一个已完成的就是上一个阶段):

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                echo '执行构建步骤...'
            }
        }
        stage('Test') {
            when {
                script {
                    // 获取所有已完成的阶段
                    def completedStages = currentBuild.rawBuild.getAction(org.jenkinsci.plugins.workflow.job.views.FlowGraphAction)
                                          .getStages()
                                          .findAll { it.isCompleted() }
                    // 取最后一个已完成的阶段(即上一个阶段)
                    def previousStage = completedStages[-1]
                    def stageResult = previousStage.getStatus().toString()
                    return stageResult != 'ABORTED' && stageResult != 'FAILURE'
                }
            }
            steps {
                echo '执行测试步骤...'
            }
        }
    }
}

注意事项

  • 上述代码需要Jenkins允许脚本访问rawBuild对象,如果遇到权限问题,需要在Jenkins的脚本审批页面通过对应的权限申请;
  • 阶段状态的可选值包括:SUCCESS、FAILURE、ABORTED、UNSTABLE等,可以根据需求调整判断逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 14:30:07