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 中的构建失败的主要内容,如果未能解决你的问题,请参考以下文章

如果SonarQube失败质量门,则VSTS构建失败

不满足成功条件时,质量之门不会失败

如何将 SonarQube 分析的质量门检查到工作中

当项目没有运行 ptest 时,不会触发 Pitest 突变的质量门

SonarQube 7.1 和 TFS 2018 发布质量门结果失败

如何在 Jenkins Pipeline 中对 SonarQube 质量门做出反应