在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
相关产品推荐
相关产品推荐

