一尘不染

我可以使用不同的排除项在声纳中两次分析同一Maven项目吗?

jenkins

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

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

因此,我现在要看的是创建一个名为 Bar 的Sonar项目,该项目是为Maven项目 Foo 计算指标的结果,并且将Sonar项目配置为仅包含包
XYZ (住在模块 M1M2 等中)。它将作为Jenkins的工作开始,签出Maven项目 Foo 并调用
声纳生成 后操作,以某种方式指定Sonar项目名称 Bar 而不是默认为 Foo 。然后(我希望)我将有两个Sonar项目: Foo
代表整个Maven项目,而 Bar 代表该Maven项目的子集。

我想知道(a)这是否可能,并且(b)可行吗?我不确定Sonar数据库是否会损坏(Sonar项目 FooBar中 会有模块 M1
M2M3 ,它们可能会相互覆盖数据库条目)。

更新1

也许sonar.branch在詹纳斯(Jenkins)中调用声纳时可以将属性用作后构建操作。

例如

詹金斯一号

  • SCM:签出Maven项目 Foo
  • 建立步骤: clean install -DskipTests
  • 建造后行动:声纳

詹金斯第二职业

  • 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错误。


阅读 245

收藏
2020-07-25

共1个答案

一尘不染

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

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

没错,您将需要两次分析项目,但是这样做更加简洁(以后您可以选择对条形图使用不同的规则)。

但是,您不一定需要创建两个作业,您可以将Sonar分析用作生成操作,而不是后期生成操作。

使用商用Views插件,无需构建两次就可以实现效果。

2020-07-25