1

我在 Sonar 中有一个质量配置文件,如果自上次分析以来违规数量增加,它将发出警报,例如“如果自上次分析以来的关键问题大于 0 时发出警报”。

这样做的问题是,当您在没有任何代码更改(或者可能是无害的代码更改)的情况下运行后续构建时,警报会被清除。

有没有办法让 Sonar 将其结果与不包含任何警报的最后分析进行比较?

编辑:我应该明确指出,“与先前版本的差异”选项不适用于我们的设置,因为我们正在采用持续交付策略,其中每个构建都是具有自己独特版本的潜在发布候选者(我们是使用日期/时间戳作为版本)。

编辑#2:我还尝试将值 sonar.timemachine.period4 设置为我想要比较的硬编码版本;但是,在配置警报时无法访问此值,并且在实际分析期间肯定会被忽略。

4

2 回答 2

1

在探查 Sonar 的源代码后,我和一位同事想出了一个解决方法。

使用“以前的版本”比较设置您的质量配置文件,无论您实际想要与上一个良好构建进行比较。

对于每个构建:

  • 使用构建版本查询最后一个 VCS 标记,并将其分配给名为 ${LAST_GOOD_BUILD} 的变量或类似的变量,以供构建过程的其余部分使用。
  • 运行声纳-Dsonar.timemachine.period3=${LAST_GOOD_BUILD}(同时确保 BuildBreaker 插件处于活动状态)
  • 如果您没有收到警报,则下一步构建步骤需要将您的新版本记录在 VCS 标签中;

这是因为 sonar.timemachine.period3 与您的质量配置文件中的“以前的版本”设置相同,但您现在将其替换为您选择的硬指定版本。每次构建时,您只标记通过质量检查的构建,而当您运行 Sonar 时,您只是在与这些好的版本进行比较。

非常可怕,但它让我们的构建管道重新启动并运行。如果对上述内容有任何不清楚的地方,请告诉我,我会更新这个“解决方案”。

注意事项:您的版本编号不能是整数 - Sonar 会将其解释为当前分析与您要比较的分析之间的天数!此外,它不能采用可能与 yyyy-MM-DD 混淆的格式(例如 1000-01-01),就好像这也恰好解析为真实日期一样,那么您无意中指定了日期范围的开始。我还没有看到有人以这种方式指定版本号,但你永远不知道。

于 2013-08-28T19:25:04.963 回答
0

否,但您可以配置 SonarQube 以基于 previous_version 或日期来建立差异视图。请参阅http://docs.codehaus.org/display/SONAR/Differential+Views#DifferentialViews-DifferentialViewsSettings

于 2013-08-22T19:40:50.863 回答