我已经在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 }"