SonarQube 中的质量门故障不会导致 Teamcity 中的构建失败
Posted
技术标签:
【中文标题】SonarQube 中的质量门故障不会导致 Teamcity 中的构建失败【英文标题】:Quality Gate Failure in SonarQube does not fail the build in Teamcity 【发布时间】:2019-03-02 23:09:48 【问题描述】:我在 TeamCity 中建立了一个 Build 项目,并将 Sonarqube 与它集成。该项目正在构建,甚至在 SonarQube 控制台中成功发布报告。但是当质量门失败时,它并没有破坏构建。我搜索并阅读了有关构建断路器的信息,但它已经被 TeamCity 的 Sonarqube 插件支持,如本文档https://confluence.jetbrains.com/display/TW/SonarQube+Integration
我是否缺少要配置的内容/或任何问题?我尝试了很多搜索,但没有找到任何适当的文档或线索。
【问题讨论】:
【参考方案1】:当质量门失败时,SonarQube 插件不会中断构建。为什么?一切都在这里描述:Why You Shouldn't Use Build Breaker
主要结论是:
[...] SonarSource 不想继续该功能。 [...]
一旦我们开始使用墙板,我们就停止使用 Build Breaker 插件,但仍然认为使用它是一种不错的做法。然后是 SonarQube 5.2,它切断了分析仪和数据库之间的连接。削减带来了很多好处,包括架构的重大变化:源代码分析在分析器端完成,所有聚合数字计算现在在服务器端完成。这意味着……分析仪不再知道质量门。只有服务器会这样做,并且由于分析报告是按顺序处理的,先到先得,因此可能需要一段时间才能获得作业的质量门结果。
换句话说,从我们的角度来看,Build Breaker 功能不再有意义。
您必须自己验证质量门的状态。你可以在这里阅读如何做:Access quality gate status from sonarqube api
xpmatteo问题的答案:
只有我一个人很难理解引用的解释是什么意思吗?
你有两个工具。 SonarScanner 和 SonarQube。
1) SonarScanner 在 CI 服务器上执行。它分析源代码并将分析结果推送到SonarQube服务器。
2) SonarQube 服务器处理数据并知道新更改是否通过了质量门。
SonarScanner 不知道最终结果(通过或未通过),因此它不会使构建失败(它在 SQ 5.2 之前有此类信息,因为它正在处理所有数据并仅将结果推送到数据库)。这意味着 Build Breaker 插件有废话,因为由于当前的设计,它无法工作。执行 SonarScanner 后,您必须轮询服务器并检查 Quality Gates 状态。然后你可以决定构建是否应该失败。
【讨论】:
只有我一个人很难理解引用的解释是什么意思吗? 如果您不同意链接的博文并且只想恢复功能:我们构建了一个 Maven 插件(或独立 JAR)来再次支持该用例,请参阅此处github.com/qaware/sonarqube-build-breaker【参考方案2】:是的,我必须使用退出状态编写自定义脚本来中断构建。我使用API来分析QG的状态。
PROJECTKEY="%teamcity.project.id%"
QGSTATUS=`curl -s -u SONAR_TOKEN: http://SONAR_URL:9000/api/qualitygates/project_status?projectKey=$PROJECTKEY | jq '.projectStatus.status' | tr -d '"'`
if [ "$QGSTATUS" = "OK" ]
then
exit 0
elif [ "$QGSTATUS" = "ERROR" ]
then
exit 1
fi
【讨论】:
【参考方案3】:关注下面可能对你有帮助的帖子。
https://docs.sonarqube.org/display/SONARQUBE45/Build+Breaker+Plugin
使用属性“sonar.buildbreaker.skip”运行您的 sonarqube 任务。
例如:gradle clean build sonarqube publish -Dsonar.buildbreaker.skip=false
【讨论】:
这是一个非常好的解决方法!谢谢!【参考方案4】:我使用 sonar.qualitygate.wait=true
参数根据 Quality Gate 设置成功构建失败。
他们的 GitLab 管道示例页面上有一个示例:https://docs.sonarqube.org/latest/analysis/gitlab-cicd/
【讨论】:
请注意,sonar.qualitygate.wait 是在 SonarQube v8.1 中实现的。见community.sonarsource.com/t/…【参考方案5】:在我的场景中,CI 是 Github 操作,无论任何 CI 工具声纳的状态(红色/绿色)如何,质量门都应该发送到您的 CI。您可以在此 url http://api/ce/task?id= 浏览报告状态,生成一份报告。 您必须在生成报告后运行this 脚本以检查状态并在 SQ 失败时使作业失败
【讨论】:
以上是关于SonarQube 中的质量门故障不会导致 Teamcity 中的构建失败的主要内容,如果未能解决你的问题,请参考以下文章
当项目没有运行 ptest 时,不会触发 Pitest 突变的质量门