如何在 ci 构建失败时使用 SonarQube 块代码?

How to have SonarQube block code on failure of ci build?

我们正在使用 Jenkins 建立 CI 管道,我们正在使用 SonarQube 进行 运行 静态分析。我们已经设置了质量门,现在我们正在失败构建,当门不满足时。当我们构建失败时,代码仍会放入 sonarQube 中。因此,如果开发人员尝试推广两次,则第二次构建将 'pass'。

示例: 门没有新的关键问题。

开发人员签入有 1 个新的严重问题的代码。 构建在静态分析上失败(SonarQube 标记了规则和阻止程序)。

开发人员再次签入代码(没有更改代码)。 静态分析通过,因为关键问题不是 'new'。

有没有办法在失败时恢复到以前的版本,或者更好的是 运行 针对最新的非失败 运行 进行分析?

备注:版本 - Sonarqube 5.1.2

您问过如何防止提交的代码反映在 SonarQube 平台中。

建议尝试禁止对已提交代码的分析,因为这样您的质量措施就不会反映代码库的状态。想象一下,某人正在根据他们在 SonarQube UI 中看到的内容来决定 HEAD 是否可释放。如果您不显示 "bad" 代码,那么……分析的意义何在?只需使用照片编辑器构建 "perfect" 仪表板,并在有人点击 http://sonarqube.myco.com:9000 时提供该 gif。

好吧,这可能是一种极端的反应,但你明白我的意思。 SonarQube 分析的目的是向您展示代码的对错。通过提交 "worthy" 代码,在 SonarQube UI 中显示提交不应该是您 "earn" 的荣幸。它应该是基线期望。比如遵循团队的编码约定和使用 SCM。

但是这个咆哮并没有解决你的问题,事实上你目前的质量门是基于 last_analysis。在那个时间尺度上,"new critical issues" 是一个短暂的措施,你正在失去检测新的关键问题的能力,因为它们前一分钟 "new" 下一分钟 "old"。出于这个原因,我建议你改变你的时间尺度。不要查看 "new" 与上次分析的对比,而是与上一个版本、上个月(超过 30 天)或去年(超过 365 天)进行比较。然后,您将始终能够分辨出什么是 "new" 与公认的基线。