当超出Sonar限制时,使Jenkins构建不稳定

cro*_*ers 5 jenkins sonarqube

我们正在运行Jenkins的Sonar,并希望在超出Sonar限制时将构建标记为不稳定.我们已在质量配置文件中将相应的限制设置为警报.

我们认为我们可以使用Build Breaker将Sonar标记为失败(将该事实放入Jenkins日志中),然后使用Jenkins Post-build Groovy脚本在该情况下使构建不稳定.

不幸的是,Jenkins Sonar插件标志着构建失败(并且停止构建过程)如果Sonar失败并且Jenkins人员已经表明这是设计并且已经将相关缺陷设置为"将无法修复".

我也尝试将Sonar的日志记录设置为Verbose,希望超出限制的事实将在日志中(因此我们可以再次使用post build groovy任务),但似乎也不是这样.

任何见解?在这一点上,在我看来,最好的方法是创建一个Build Breaker变体,它只是报告警报但不会破坏构建,但如果可以避免,我宁愿不去自定义插件路由.

cro*_*ers 5

好吧,我们已经解决了这个令我们满意的问题,尽管它需要一个定制的Sonar插件.

我们创建了一个BuildBreaker版本(我们称之为BuildWarner).唯一的区别(插件名称,包名称,类名等除外)是AlertThresholdChecker.java的第44行更改为:

  fail("Alert thresholds have been hit (" + count + " times).");
Run Code Online (Sandbox Code Playgroud)

至 :

  logger.info("SONARTHRESHOLDSEXCEEDED - Alert thresholds have been hit (" + count + " times).");
Run Code Online (Sandbox Code Playgroud)

一旦在Sonar中运行,如果任何警报命中达到错误阈值级别,Jenkins控制台将包含短语SONARTHRESHOLDSEXCEEDED.

然后,安装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()
}
Run Code Online (Sandbox Code Playgroud)

如果您愿意,也可以使用Jenkins Text Finder插件.

需要注意的是,Sonar插件必须在Groovy Post Build或Text Finder插件之前.

希望这有助于其他人.