5

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

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

不幸的是,如果 Sonar 失败,Jenkins Sonar 插件会标记构建失败(并停止构建过程),并且 Jenkins 人员表示这是按设计的并将相关缺陷设置为“将无法修复”。

我还尝试将 Sonar 的日志记录设置为 Verbose,希望超出限制的事实会出现在日志中(因此我们可以再次使用构建后的 groovy 任务),但情况似乎也并非如此。

有什么见解吗?在这一点上,在我看来,最好的办法是创建一个 Build Breaker 的变体,它只报告警报但不会破坏构建,但如果可以避免的话,我宁愿不走自定义插件路线.

4

3 回答 3

5

好的,我们已经满意地解决了这个问题,尽管它确实需要一个自定义的 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 插件之前。

希望这对其他人有所帮助。

于 2012-09-21T16:03:17.753 回答
3

我们还创建了一个基于 Build Breaker 插件的 Sonar 插件,该插件会在出现错误或警告级别警报时ERROR_THRESHOLD_EXCEEDED记录到控制台。WARNING_THRESHOLD_EXCEEDED我们的 build warner 插件版本可以在https://github.com/NitorCreations/sonar-build-warner-plugin找到

此外,我们使用 Jenkins 控制台日志插件将构建标记为失败或不稳定。说明可在 github 站点上找到。

于 2012-10-30T07:20:25.980 回答
0

目前您不能将构建标记为不稳定(只有失败可用)。在 Sonar 的用户邮件列表http://sonar.15.n6.nabble.com/Marking-Sonar-Builds-td5001684.html上有一个相关的帖子可能会有所帮助

于 2012-09-21T05:25:17.433 回答