今天我在设置Jenkins管道脚本时遇到了异常,该脚本会检查质量门 并注释任何新问题的拉请求。
我们的设置包含:
部分管道脚本:
node(node_label) {
stage("SonarQube analysis") {
withSonarQubeEnv('SonarQube') {
def sonarQubeCommand = "org.sonarsource.scanner.maven:sonar-maven-plugin:3.2:sonar " +
"-Dsonar.host.url=https://sonar-url " +
"-Dsonar.login=sonarqube " +
"-Dsonar.password=token " +
"-Dsonar.language=java " +
"-Dsonar.sources=. " +
"-Dsonar.inclusions=**/src/main/java/**/*"
if (pr.id != '') {
sonarQubeCommand = sonarQubeCommand +
" -Dsonar.analysis.mode=preview" +
" -Dsonar.stash.notification=true " +
" -Dsonar.stash.project=" + pr.project_key +
" -Dsonar.stash.repository=" + pr.repository_slug +
" -Dsonar.stash.pullrequest.id=" + pr.id +
" -Dsonar.stash.password=token"
}
pipeline.mvn(sonarQubeCommand)
}
}
}
stage("Check Quality Gate") {
timeout(time: 1, unit: 'HOURS') {
def qg = waitForQualityGate()
waitUntil {
// Sometimes an analysis will get the status PENDING meaning it still needs to be analysed.
if (qg.status == 'PENDING') {
qg = waitForQualityGate()
return false
} else {
return true
}
}
node(node_label) {
if (qg.status != 'OK') {
bitbucket.comment(pr, "_${env.JOB_NAME}#${env.BUILD_NUMBER}:_ **[✖ BUILD FAILURE](${build_url})**")
bitbucket.approve(pr, false)
pipeline.cleanWorkspace()
error "Pipeline aborted due to quality gate failure: ${qg.status}"
} else {
bitbucket.comment(pr, "_${env.JOB_NAME}#${env.BUILD_NUMBER}:_ **[✔ BUILD SUCCESS](${build_url})**")
bitbucket.approve(pr, true)
}
}
}
}
顺便说一下:如果没有waitUntil,管道就会失败,因为任务状态在SonarQube中是PENDING。 所以SonarSource博客中的例子并不适合我。
现在详细说明此管道是如何失败的:
在maven命令中使用sonar.analysis.mode = preview作为参数时 jenkins作业日志不包含SonarQube分析任务ID。 这将导致命令waitForQualityGate上的管道脚本失败。 消息如下: 无法获取SonarQube任务ID和/或服务器名称。请使用' withSonarQubeEnv'包装器来运行您的分析。
一旦我删除了sonar.analysis.mode = preview参数,jenkins日志会读取如下行:[INFO] More about the report processing at https://sonar-url/api/ce/task?id=AVyHXjcsesZZZhqzzCSf
此行使waitForQualityGate命令正常成功。 然而,除了使用PR结果在SonarQube中进行项目污染之外,这还有一个不必要的副作用。 副作用是当在拉取请求中添加问题时,不会在存储中的拉取请求中报告。 它总是报告零新问题,这显然是错误的。 由于它不再是预览分析,我可以在SonarQube服务器上看到新问题。
所以不知怎的,我现在必须在拉出请求注释新问题之间做出选择 检查质量门。 显然我想做两件事。 我选择让拉请求注释正常工作,暂时跳过检查质量门。
问题仍然是我在这里做错了或者我是否必须等待新版本的扫描仪和/或藏匿插件才能解决这个问题?
答案 0 :(得分:1)
在声纳的服务器上,请转到:
管理>配置>一般设置>网络挂接:
名称:詹金斯或类似的东西
其中,URL是Jenkins主机。
<强>原因强>:
默认情况下,声纳上的webkooks是https,而我的jenkins正在使用http。