SonarQube 不会将 waitForQualityGate() 的状态返回给詹金斯?
Posted
技术标签:
【中文标题】SonarQube 不会将 waitForQualityGate() 的状态返回给詹金斯?【英文标题】:SonarQube does not return status of waitForQualityGate() to jenkins? 【发布时间】:2019-10-06 03:31:14 【问题描述】:我在 jenkins 管道中使用了 sonarQube。我已经在 jenkins 中安装了所有与 sonarqube 相关的插件。在jenkins配置系统中,我正确配置了sonarqube服务器,jenkins全局工具配置我正确配置了SonarQube Scanner。
这是詹金斯管道代码..
node
stage('git checkout process')
echo 'started checkout'
git 'https://github.com/ramkumar/sampleproject'
echo 'completed sucessfully'
stage('compile package')
def mvnTool = tool name: 'Maven', type: 'maven'
sh "$mvnTool/bin/mvn clean install"
stage('SonarQube analysis')
withSonarQubeEnv('sonarqube')
mvnHome = '/opt/apache-maven/bin'
sh "$mvnHome/mvn sonar:sonar"
stage("Quality Gate")
timeout(time: 1, unit: 'HOURS')
def qg = waitForQualityGate()
if (qg.status != 'OK')
emailext body: 'Your code was failed due to sonarqube quality gate', subject: 'Jenkins Failed Report', to: 'prakashpp666666@gmail.com'
error "Pipeline aborted due to quality gate failure: $qg.status"
我还在 sonarqube 中配置了 webhook。但是当我构建工作时,3 阶段 waitForQualityGate() 没有将 ok 状态返回给詹金斯,而是显示 在服务器“sonarqube”上检查 SonarQube 任务“AWrQj5In7abK9JVZ9”的状态 SonarQube 任务“AWrQj5In7abK9JVZ9”状态为“IN_PROGRESS”
它不断加载它没有完成。当我签入 sonarqube 服务器时,它显示 Response: Server Unreachable。我没有在本地运行 sonarqube,它在 docker 上运行。可能有什么问题?
【问题讨论】:
【参考方案1】:为质量门配置 SonarQube webhook
管理 > 配置 > Webhook > 创建
该 URL 应指向您的 Jenkins 服务器 http://JENKINS_HOST/sonarqube-webhook/
这对我来说已经解决了。因为我不知道这个钩子。一旦我配置了这个,一切都很顺利。
【讨论】:
【参考方案2】:按照官方文档 here 和 here 中的建议,我能够通过在 SonarQube 服务器上为 Jenkins 实例配置一个 webhook 来让 waitForQualityGate() 正常工作。
在您的 SonarQube 服务器配置中添加您的<your-jenkins-instance>/sonarqube-webhook/
形式的 webhook,指向您的 Jenkins 实例。请注意尾部斜杠很重要。
【讨论】:
【参考方案3】:尝试在检查前加上sleep(60)命令:
sleep(60)
timeout(time: 1, unit: 'MINUTES')
def qg = waitForQualityGate()
print "Finished waiting"
if (qg.status != 'OK')
error "Pipeline aborted due to quality gate failure: $qg.status"
它为我解决了同样的问题。
【讨论】:
这可能是一个有用的解决方法,但它并不能真正解决问题。问题是 SonarQube 在扫描完成时未能触发 Jenkins webhook。通过添加延迟,SonarQube 可能会在 waitForQualityGate 开始之前完成扫描,因此 waitForQualityGate 可以立即返回,而不是等待 webhook。如果由于某种原因扫描未完成,则 waitForQualityGate 仍将超时,因为未触发 webhook。【参考方案4】:我通过在 SonarQube 中创建一个 webhook 解决了这个问题。
-
在您的项目/项目设置中,选择 Webhooks
-
将网址设置为 https://YOUR_JENKINS_URL/sonarqube-webhook/
ps:如果您从 SQ 错误地得到 FAIL,请验证您的 SonarQube 服务器的 url(在 Jenkins 设置中)不以 '/' 结尾
【讨论】:
以上是关于SonarQube 不会将 waitForQualityGate() 的状态返回给詹金斯?的主要内容,如果未能解决你的问题,请参考以下文章
Sonarqube + Jacoco - 声纳不会从属性中读取报告路径
“更改此条件,使其不会总是评估为假” - SonarQube
为啥删除的 Maven 模块不会从 SonarQube 中消失?
SonarQube 不会向 Discord webhook 发送通知