首页 > 解决方案 > 如何在 Jenkins Pipeline 中获取 SonarQube taskId/report URL?

问题描述

我已经在 J​​enkins 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 发送相应的通知,但无法获取 Sonar 报告 URL 或 TaskId

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

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

也许有一些简单的方法可以获取 Sonar TaskId 或 Report URL,尤其是是否waitForQualityGate() or other method会返回 Sonar TaskId 或 Report URL?

标签: jenkinssonarqubejenkins-pipeline

解决方案


您可以通过阅读文件查看报告./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']}

 }
                     

推荐阅读