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

如何在Jenkins脚本化流水线中传参使Sonar结果失败时终止流水线

Jenkins脚本化流水线中传递SonarQube参数终止流水线

问题背景

我是Groovy新手,正在使用Jenkins脚本化流水线,项目为Gradle类型。我们在Jenkinsfile中引入了sonarqube.groovy库,希望基于SonarQube质量门结果终止流水线。该库的scan方法默认stopOnFailure: false,将其设为true即可实现需求,但我无法修改该库,请问如何在Jenkinsfile中传递这个参数?

附sonarqube.groovy代码:

def scan(Map args=[stopOnFailure:false, waitForCompletion:true], Closure closure) {
   closure.resolveStrategy = Closure.DELEGATE_FIRST
   withEnv(["JAVA_HOME=${tool 'JDK 11'}"]) {
      withEnv(["PATH+SONARSCANNER=${tool 'SonarQube Scanner'}/bin"]) {
         withSonarQubeEnv('CICD Sonarqube') {
            closure()
            env.SONARQUBE_URL = env.SONAR_HOST_URL
         }

         if (args.waitForCompletion == true) {
            sleep 5
            timeout(time: 1, unit: 'HOURS') { // 防止异常情况,超时后终止流水线
               def qg = waitForQualityGate() // 复用withSonarQubeEnv收集的taskId
               if ((args.stopOnFailure == true) && (qg.status != 'OK')) {
                  error "Pipeline aborted due to quality gate failure: ${qg.status}"
               }
            }
         }
      }
   }
}

原Jenkinsfile代码片段:

stage('CodeQuality') {
    withEnv(["SONAR_USER_HOME=${WORKSPACE}/.sonar"]) {
        withSonarQubeEnv {
            sh "./gradlew sonarqube"
        }
    }
}

解决方案

直接调用库中的scan方法时,传入包含stopOnFailure: true的Map参数,覆盖默认值即可。scan方法内部已封装了withSonarQubeEnv、环境变量配置、质量门检查等逻辑,无需重复编写。

修改后的Jenkinsfile代码:

stage('CodeQuality') {
    // 确保已通过@Library等方式引入sonarqube库
    sonarqube.scan([stopOnFailure: true]) {
        withEnv(["SONAR_USER_HOME=${WORKSPACE}/.sonar"]) {
            sh "./gradlew sonarqube"
        }
    }
}

说明

  • 调用scan方法时,传入[stopOnFailure: true],会覆盖方法默认的stopOnFailure: false参数
  • waitForCompletion默认值为true,如果不需要修改可以不用显式传递
  • scan方法会自动处理JDK、SonarScanner路径、SonarQube环境绑定,以及等待质量门结果并根据参数终止流水线的逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:33:18