在我的Jenkins管道内,我需要对SonarQube质量门进行响应。 有没有一种更简单的方法来实现这一目标,但在Sonar-Scanner日志中查找结果页面(例如https://mysonarserver/sonar/api/ce/task?id=xxxx)并从那里解析JSON结果?如何对Jenkins管道内的SonarQube质量门做出反应
我用詹金斯2.30和5.3 SonarQube
在此先感谢
在我的Jenkins管道内,我需要对SonarQube质量门进行响应。 有没有一种更简单的方法来实现这一目标,但在Sonar-Scanner日志中查找结果页面(例如https://mysonarserver/sonar/api/ce/task?id=xxxx)并从那里解析JSON结果?如何对Jenkins管道内的SonarQube质量门做出反应
我用詹金斯2.30和5.3 SonarQube
在此先感谢
基于文森特的答案,以及使用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中的质量门是否被认可。
我用“.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”
你有没有在Github的某个地方提供你的库的源代码?我是Groovy的新手,并希望从示例中学习。谢谢。 –
我刚刚为这个函数创建了一个Repo:https://github.com/chforster/JenkinsPipelineLibrary –
扫描第一:
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"
}
}
}
Hi @tibo,你能告诉我你是如何使用“jenkins_scanner”对sonarqube进行身份验证的? –
我明白了,它来自http请求插件。 https://stackoverflow.com/questions/41571090/basic-auth-with-jenkins-http-request-plugin 非常感谢,这个答案帮助我实现质量门故障的通知。 –
工程奇迹。感谢你的分享。 –