【问题标题】:Can maven-sonar-plugin make a local analysis?maven-sonar-plugin 可以进行本地分析吗?
【发布时间】:2012-06-04 11:13:48
【问题描述】:

我正在配置一个多模块 maven 项目,该项目在 verify 阶段强制执行 sonar:sonar

我还使用了 sonar 的 build-breaker-plugin 来避免在 sonar 抛出一些警报时部署模块。

这种方法的问题是开发人员应该去声纳服务器检查警报。这还不错,但是如果多个用户尝试同时分析同一个模块,则不可能知道上次/当前分析是否有您的警报。

上下文:我们有一个 CI 系统,每小时构建所有模块。所以有时这会与一些开发人员部署相冲突(这会强制分析)

恕我直言,只有 CI 系统应该将分析提交给声纳服务器,因为 CI 具有最后提交和部署的代码。但是开发人员应该只在本地检查他的更改。

那么,为什么我们要强制在开发人员构建中进行分析?避免部署不遵守代码质量阈值的模块(sonar 的 build-breaker 插件对此有所帮助)。

有没有办法配置 maven-sonar-plugin 来做到这一点?

  • 开发人员构建中的本地分析。
  • CI 构建中的服务器分析

【问题讨论】:

  • 目前尚不清楚为什么允许开发人员deploy modules 而不仅仅是 CI。也许您想要的是开发人员不应该check-in 可能破坏声纳的代码?
  • 我同意你的观点,但最后还是同样的问题:我需要在 scm:checkin 之前运行本地分析。上下文:开发人员负责一些模块,因此允许他们部署 SNAPSHOTS。 CI 旨在验证所有已部署的模块是否已正确集成(构建和执行集成测试)。
  • 你达到你想要的了吗?你有没有遇到过这个问题? stackoverflow.com/questions/29099614/…

标签: maven sonarqube


【解决方案1】:

据我了解,您可能应该拥有 Sonar 的第一个实例,该实例仅在您的质量要求未满足时用于在构建期间破坏它,以及您的 CI 系统使用的第二个实例,即为您的产品提供参考。如果您真的想强制执行您的流程并确保不会将违反这些要求的代码推送到您的 SCM 系统中,那么您可以将 Sonar 分析绑定到预提交挂钩上。但这对我来说似乎有点极端......

在 SonarSource,我们没有选择“因违规而阻止提交”的方法。事实上,我们认为只要您管理好一些技术债务(= 违规)是可以的。管理技术债务意味着审查 Sonar 中的每个传入违规并在代码中修复它们或将这些违规影响到行动计划中,主要思想是技术债务不应该在开发冲刺结束时增加。这就是 Sonar 的审查功能的意义所在。并且 Sonar 提供小部件来监控评论的演变和新的违规行为,而无需审核。

【讨论】:

  • 我同意你的观点,但我认为一些门槛很重要!例如:我们不允许没有 cmets 的公共 API(这是不可协商的)。 pre-commit 钩子是个好主意,但我们认为即使“坏”代码也可以签入到 SCM,我们不能允许“共享”该代码。这是我们不允许部署不尊重代码质量政策的 SNAPSHOT 或 RELEASE 的方式。我喜欢你关于两个 SONAR 实例的想法……有办法让它们之间的规则保持同步吗?
  • @ggarciao。您可以通过阻止SNAPSHOTS 中的deploy 来阻止共享二进制文件,但是一旦committed 源是shared 无论如何。
  • @ggarciao 不幸的是没有(对于规则同步),您必须“手动”处理这个(通过使用导出功能)。
  • @Raghuram 模块之间不共享代码,每个模块都有自己的开发者。就像开源项目协作:每个项目都有自己的生命周期,它们仅通过 SNAPSHOTS 或 RELEASES 共享功能。这里的问题可能是 maven 用于项目聚合的名称“模块”。所以,请忘记这是一个多模块项目:我有一个多项目环境,我需要一个超级项目来检查它们是否可以一起工作。
  • @Fabrice - Sonar Team 我正在使用您的策略,它解决了我的问题。但我认为 maven-sonar-plugin 应该有一个“本地分析”选项(如 Sonar Eclipse 插件)......你怎么看?
猜你喜欢
  • 2014-10-25
  • 1970-01-01
  • 2017-01-21
  • 1970-01-01
  • 2015-03-14
  • 2018-07-27
  • 2017-05-06
  • 2013-04-07
相关资源
最近更新 更多