如何获取Jenkins Pipeline中的SonarQube taskId / report URL?

How to obtain the SonarQube taskId / report URL in Jenkins Pipeline?

我在 Jenkins Pipeline 中集成了 Sonarqube,它的工作原理如下定义:

        stage('static check') {
           steps {
               echo "starting codeAnalyze with SonarQube......"
               //sonar:sonar.QualityGate should pass
               withSonarQubeEnv('sonar') {
                 sh "mvn -f pom.xml clean compile sonar:sonar -U"
               }
               script {
               timeout(10) { 
                   def qg = waitForQualityGate() 
                       if (qg.status != 'OK') {
                         echo "failure: ${qg.status}"
                         
                         # Plan to send notify to Slack, But can NOT to obtain the Sonar report URL or TaskId
                         
                       }
                   }
               }
           }
       }

计划向Slack发送相应的notify,但是获取不到Sonar报告URL或TaskId

并且发现有人建议使用 BUILD_LOG_REGEX: SonarQube result URL: ${BUILD_LOG_REGEX, regex=".*ANALYSIS SUCCESSFUL, you can browse (.*)", showTruncatedLines=false, substText=""},但这只适用于电子邮件扩展插件。

另外一个建议是URL这样写报告:ProjectURL = host + "/dashboard?id=" + ProjectID,我们不容易得到ProjectID,因为projectID是从Pom.xml写成的:groupId:artifactId.

也许有一些简单的方法可以获取 Sonar TaskId 或 Report URL,特别是是否有 waitForQualityGate() or other method 将 return Sonar TaskId 或 Report URL ?

阅读文件即可看到报告./target/sonar/report-task.txt

使用def getURL = readProperties file: './target/sonar/report-task.txt'

并通过调用类似 ${getURL['dashboardUrl']} 的方法提取,这将给出 url 的报告。上面的文件也有 taskId.

所以应该是这样的

def qg = waitForQualityGate() 
 if (qg.status != 'OK') {
 echo "failure: ${qg.status}"
 def getURL = readProperties file: './target/sonar/report-task.txt

 Add your slackmsg here use in that ${getURL['dashboardUrl']}

 }
                     

对于windows,使用

./.scannerwork/report-task.txt

例如

 waitForQualityGate abortPipeline: true
 def getURL = readProperties file: './.scannerwork/report-task.txt'
 sonarqubeURL = "${getURL['dashboardUrl']}"
 echo "${sonarqubeURL }"