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



我已经在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发送相应的通知,但无法获取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或报告URL,特别是是否有waitForQualityGate() or other method将返回Sonar TaskId或报告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 }"

最新更新