我们正在 Jenkins 运行 Sonar ,并希望在超出 Sonar 限制时将构建标记为不稳定。我们已经在质量配置文件中将适当的限制设置为警报。
我们认为我们可以使用 Build Breaker 将 Sonar 标记为失败(这会将这一事实放入 Jenkins 日志中),然后在这种情况下使用 Jenkins Post-build Groovy 脚本来不稳定构建。
不幸的是,如果 Sonar 失败,Jenkins Sonar 插件会标记构建失败(并停止构建过程),并且 Jenkins 人员表示这是设计好的,并将相关缺陷设置为“不会修复”。
我还尝试将 Sonar 的日志记录设置为 Verbose,希望超出的限制会出现在日志中(因此我们可以再次使用后期构建常规任务),但情况似乎也并非如此。
任何见解?在这一点上,在我看来,最好的办法是创建一个 Build Breaker 的变体,它只是报告警报但不会破坏构建,但如果可以避免的话,我宁愿不走自定义插件路线.
最佳答案
好的,我们已经满意地解决了这个问题,尽管它确实需要一个自定义的 Sonar 插件。
我们创建了一个 BuildBreaker 版本(我们称之为 BuildWarner)。唯一的区别(除了插件名称、包名称、类名称等)是 AlertThresholdChecker.java 的第 44 行更改为:
fail("Alert thresholds have been hit (" + count + " times).");
到 :
logger.info("SONARTHRESHOLDSEXCEEDED - Alert thresholds have been hit (" + count + " times).");
一旦在 Sonar 中运行,Jenkins 控制台将包含短语 SONATHRESHOLDSEXCEEDED 如果任何警报命中达到错误阈值级别。
然后,安装 Jenkins Groovy Postbuild 插件。我们使用以下 Groovy 脚本:
if(manager.logContains(".*SONARTHRESHOLDSEXCEEDED.*")) {
manager.addWarningBadge("Sonar Thresholds Exceeded")
manager.createSummary("warning.gif").appendText("<h1>Sonar Thresholds Exceeded</h1>", false, false, false, "red")
manager.buildUnstable()
}
如果您愿意,也可以使用 Jenkins Text Finder 插件。
需要注意的是,Sonar 插件必须在 Groovy Post Build 或 Text Finder 插件之前。
希望这可以帮助其他人。
关于jenkins - 超出 Sonar 限制时使 Jenkins Build 不稳定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12513559/