使用Jenkins Blue Ocean构建流水线添加SonarQube分析时提示「此阶段无步骤」
解决Jenkins Blue Ocean中SonarQube分析阶段提示“No steps This stage has no steps”的问题
我一眼就看出问题所在了——你的Analysis阶段在非develop分支下没有任何可执行的步骤,Blue Ocean会把这种情况判定为“空阶段”,从而抛出这个提示。
问题根源
先看你提供的代码:
stage('Analysis') { steps { script { if (env.BRANCH_NAME == 'develop') { withSonarQubeEnv('SonarQube Server') { bat 'mvn sonar:sonar' def qualitygate = waitForQualityGate() if (qualitygate.status != "OK") { error "Pipeline aborted due to quality gate coverage failure: ${qualitygate.status}" } } } } } }
当分支不是develop时,if条件不成立,整个script块里没有任何代码执行,相当于这个steps下没有实际运行的步骤。Blue Ocean的UI会严格检查每个阶段是否有可执行步骤,自然就会报错。
两种解决方案
方案1:给非develop分支添加占位步骤
在if的else分支里加一个简单的步骤,比如打印日志或者标记阶段跳过,让Blue Ocean识别到这个阶段有内容:
stage('Analysis') { steps { script { if (env.BRANCH_NAME == 'develop') { withSonarQubeEnv('SonarQube Server') { bat 'mvn sonar:sonar' def qualitygate = waitForQualityGate() if (qualitygate.status != "OK") { error "Pipeline aborted due to quality gate coverage failure: ${qualitygate.status}" } } } else { // 给非develop分支添加占位步骤,避免空阶段报错 echo "Skipping SonarQube analysis: only run on develop branch" } } } }
方案2:用when条件控制整个阶段的执行(更推荐)
直接用Jenkins Pipeline的when指令,只在develop分支才执行这个Analysis阶段,这样非develop分支下这个阶段会被直接跳过,不会出现在Blue Ocean的流程里:
stage('Analysis') { when { branch 'develop' } steps { script { withSonarQubeEnv('SonarQube Server') { bat 'mvn sonar:sonar' def qualitygate = waitForQualityGate() if (qualitygate.status != "OK") { error "Pipeline aborted due to quality gate coverage failure: ${qualitygate.status}" } } } } } }
这种方式更符合Pipeline的最佳实践,流程逻辑更清晰,Blue Ocean也不会再提示空阶段的问题。
额外提示
如果使用方案2,你还可以在when里添加更多条件(比如标签、构建原因等),让SonarQube分析的执行规则更灵活。
内容的提问来源于stack exchange,提问作者JimmyD
相关产品推荐
相关产品推荐

