【问题标题】:Can I analyze the same maven project twice in sonar, using different sets of exclusions?我可以使用不同的排除集在声纳中分析同一个 Maven 项目两次吗?
【发布时间】:2014-04-14 13:26:56
【问题描述】:

我有一个由 Sonar 分析(在 Jenkins 内)的多模块 Maven 项目。这将创建一个 Sonar 项目,其中包含我的 Maven 项目的整个代码库的指标。 Sonar 项目的 ID 与我的 Maven 项目的 ID 相同。因此,如果我的 Maven 项目是 Foo(带有模块 M1M2M3),那么我观察到声纳项目 Foo 已创建,我可以看到组件 M1M2M3 的指标。

我想知道是否可以创建另一个对 Maven 项目子集执行分析的 Sonar 项目。我可以使用 Maven + Cobertura 做到这一点,方法是指定一个 Maven 配置文件,该配置文件定义要包含在(或排除在)Cobertura 分析中的包集。这使我可以生成一组 Cobertura 报告:一个用于整个项目,一个用于包 XYZ;等等

所以我现在正在查看的是创建一个名为 Bar 的 Sonar 项目,它是为 Maven 项目 Foo 计算指标的结果,该 Sonar 项目将是配置为仅包含包 XYZ(可能存在于模块 M1 中, M2 等)。它将作为 Jenkins 工作开始,检查 Maven 项目 Foo 并调用 sonar 构建后操作,以某种方式指定 Sonar 项目名称 Bar而不是默认为 Foo。然后(我希望)我会有两个 Sonar 项目:Foo 代表整个 Maven 项目,Bar 代表该 Maven 项目的一个子集。

我想知道 (a) 这是否可行,以及 (b) 是否可行?我不确定 Sonar 数据库是否会损坏(Sonar 项目中会有模块 M1M2M3 >Foo 和 Bar,它们可能会互相覆盖数据库条目)。

更新 1

也许我可以在调用声纳作为 Jenkins 中的构建后操作时使用 sonar.branch 属性。

例如

詹金斯工作一

  • SCM:检查 maven 项目 Foo
  • 构建步骤:clean install -DskipTests
  • 构建后操作:声纳

Jenkins 工作二

  • SCM:检查 maven 项目 Foo
  • 构建步骤:clean install -DskipTests
  • 构建后操作:声纳-Dsonar.branch=Bar

我可以根据需要为 Sonar 中的 Bar 分支设置包含/排除。这种方法的缺点是声纳分析在两个不同的分支上运行两次。运行一次声纳分析然后查询数据库以根据需要缩小焦点会更有效。

更新 2

我遇到了一个问题:虽然我可以在分支上运行声纳分析,但原始(非分支)Maven 项目的声纳分析失败了。声纳分析需要 3 倍的时间,然后才因 MySQL 错误而失败:

Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure.

The last packet successfully received from the server was 28,962,745 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago.

但是,在其他 Maven 项目上运行声纳分析时,我没有收到任何 MySQL 错误。

【问题讨论】:

  • 您可以尝试为您的项目创建第二个根或当前根的新父级,并在此根上运行第二个声纳分析。由于这只存在于声纳分析中,它看起来不太好,但它可以工作。

标签: maven jenkins sonarqube


【解决方案1】:

您的编辑是正确的。使用 sonar.branch 属性会创建一个不同的 Id,即从 Sonar 的角度来看是一个不同的项目。

您可以在“bar”-profile 中包含sonar.branch 属性(当然,您需要在第二份工作中调用该配置文件),从而确保您的数据库不会损坏。

确实,您需要对项目进行两次分析,但这样会更简洁(您以后可以选择为您的酒吧配置文件使用不同的规则)。

但是,您不一定需要创建两个作业,您可以将声纳分析用作构建操作,而不是构建后操作。

您可能无需使用商业视图插件构建两次即可实现您的效果。

【讨论】:

  • 感谢您的评论。我尝试使用sonar.branch,它似乎做了我想要的。我确实尝试将声纳分析作为 jenkins 构建操作(而不是构建后操作)执行,但遇到了一些奇怪的类加载器错误。也许我会进一步调查。
  • 遇到问题:虽然我可以在分支上运行声纳分析,但原始(非分支)maven项目的声纳分析失败。声纳分析现在需要 3 倍的时间,然后才会因 MySQL 错误而失败。在其他 Maven 项目上运行声纳分析时,我没有收到任何 MySQL 错误。需要更多调查...
猜你喜欢
  • 2014-05-23
  • 2021-02-23
  • 1970-01-01
  • 2010-12-26
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
相关资源
最近更新 更多