SonarQube 可以对过去的提交进行回顾性分析吗?

Can SonarQube perform retrospective analysis of past commits?

我正在考虑为我们团队的项目实施代码质量工具。

SonarQube 似乎是个不错的选择。我还没有弄清楚理想的工作流程(我们使用 SVN 和 Maven 项目并有一个 Jenkins 服务器 运行 每次提交的测试)。

除了能够分析当前提交质量的重要性,历史演变也很有趣。

鉴于我们已经有几年的提交,是否可以在设置项目时请求对这些提交进行回顾性分析,或者 SonarQube 是否只能工作从安装之日起的提交?

SonarQube 只显示扫描仪上传的数据。您可以签出任何提交(在此处阅读更多内容:How to checkout a specific Subversion revision from the command line?),然后执行扫描程序。使用的扫描仪取决于您使用哪种构建工具:

分析结果将被推送到SonarQube 服务器。不幸的是,它始终被视为应用程序的最新版本,因此您无法将对某些旧提交的分析“插入”到项目历史记录中。但你真的需要吗?扫描仪总是分析所有来源。如果有人在三年前添加了一些代码并且没有人删除它,那么它将在服务器上可用。如果代码被删除,那么你不应该花时间分析一些不存在的东西。这就是为什么 SonarQube 总是显示项目的最后状态。

您可以阅读 Fabrice Bellingrad (April 06, 2016): Stop planning; fix the leak!

撰写的一篇不错的博客 post

详细了解 SonarQube Architecture and Integration

是的,这可以使用 sonar.projectDate 分析参数。它的目的正是您所要求的。

引自docs

Assign a date to the analysis. This parameter is only useful when you need to retroactively create the history of a not-analyzed-before project. The format is yyyy-MM-dd, for example: 2010-12-01. Since you cannot perform an analysis dated prior to the most recent one in the database, you must analyze recreate your project history in chronological order, oldest first.

例如,您可以按时间顺序查看最近 10 个版本标签(最早的在前!)。对于每个标签 运行,分析 sonar.projectDate 设置为标签的创建日期。