2016-11-09 116 views

回答

5

基于文森特的答案,以及使用Pipeline utility steps,这是我更新的版本为我工作(使用sonarscanner报告文件):

withSonarQubeEnv('SONAR 6.4') { 
        sh "${scannerHome}/bin/sonar-scanner" 
        sh "cat .scannerwork/report-task.txt" 
        def props = readProperties file: '.scannerwork/report-task.txt' 
        echo "properties=${props}" 
        def sonarServerUrl=props['serverUrl'] 
        def ceTaskUrl= props['ceTaskUrl'] 
        def ceTask 
        timeout(time: 1, unit: 'MINUTES') { 
         waitUntil { 
          def response = httpRequest ceTaskUrl 
          ceTask = readJSON text: response.content 
          echo ceTask.toString() 
          return "SUCCESS".equals(ceTask["task"]["status"]) 
         } 
        } 
        def response2 = httpRequest url : sonarServerUrl + "/api/qualitygates/project_status?analysisId=" + ceTask["task"]["analysisId"], authentication: 'jenkins_scanner' 
        def qualitygate = readJSON text: response2.content 
        echo qualitygate.toString() 
        if ("ERROR".equals(qualitygate["projectStatus"]["status"])) { 
         error "Quality Gate failure" 
        } 
       } 

请注意使用詹金斯凭证(验证:“jenkins_scanner”)来检索Sonar中的质量门是否被认可。

+1

Hi @tibo,你能告诉我你是如何使用“jenkins_scanner”对sonarqube进行身份验证的? –

+1

我明白了,它来自http请求插件。 https://stackoverflow.com/questions/41571090/basic-auth-with-jenkins-http-request-plugin 非常感谢,这个答案帮助我实现质量门故障的通知。 –

+0

工程奇迹。感谢你的分享。 –

1

我用“.sonar /报告-task.txt”检索ceTaskUrl - 然后我用Pipeline Shared Libraries和写我自己的流水线功能检索质量门。

http://mySonarQube.com:9001/api/ce/task?id= “ceTaskUrl”

解析 “task.analysisId”

解析质量门从http://mySonarQube.com:9001/api/qualitygates/project_status?analysisId= “task.analysisId”

+0

你有没有在Github的某个地方提供你的库的源代码?我是Groovy的新手,并希望从示例中学习。谢谢。 –

+0

我刚刚为这个函数创建了一个Repo:https://github.com/chforster/JenkinsPipelineLibrary –

3

扫描第一:

node("sonar") { 
     deleteDir() 
     unstash 'sources' 
     def scannerHome = tool 'sonar-scanner'; 
     withSonarQubeEnv('sonarqube-rec') { 
      withEnv(["JAVA_HOME=${ tool 'JDK_8.0' }", "PATH+MAVEN=${tool 'M325'}/bin:${env.JAVA_HOME}/bin"]) {   
      // requires SonarQube Scanner for Maven 3.2+ 
      sh ''' 
      mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.2:sonar 
      echo "SONAR_AUTH_TOKEN=$SONAR_AUTH_TOKEN" >> target/sonar/report-task.txt 
      ''' 
      stash includes: "target/sonar/report-task.txt", name: 'sonar-report-task' 
      } 
     } 
    } 

然后检查质量门:

stage("Quality Gate"){ 
    node("sonar") { 
     deleteDir() 
     unstash 'sonar-report-task' 
     def props = utils.getProperties("target/sonar/report-task.txt") 
     echo "properties=${props}" 
     def sonarServerUrl=props.getProperty('serverUrl') 
     def ceTaskUrl= props.getProperty('ceTaskUrl') 
     def ceTask 
     def URL url = new URL(ceTaskUrl) 
      timeout(time: 1, unit: 'MINUTES') { 
      waitUntil { 
       ceTask = utils.jsonParse(url) 
       echo ceTask.toString() 
       return "SUCCESS".equals(ceTask["task"]["status"]) 
      } 
      } 
      url = new URL(sonarServerUrl + "/api/qualitygates/project_status?analysisId=" + ceTask["task"]["analysisId"]) 
      def qualitygate = utils.jsonParse(url) 
      echo qualitygate.toString() 
      if ("ERROR".equals(qualitygate["projectStatus"]["status"])) { 
      error "Quality Gate failure" 
      } 
    } 
}