我有一个多模块Maven项目,由Sonar分析(在Jenkins内)。这将创建一个Sonar项目,其中包含我的Maven项目的整个代码库的度量标准。 Sonar项目与我的Maven项目的ID具有相同的ID。因此,如果我的Maven项目是 Foo (模块 M1 , M2 和 M3 ),那么我观察到创建了声纳项目 Foo ,我可以看到组件 M1 , M2 和 M3 的指标。< / p>
我想知道我是否可以创建另一个对Maven项目的子集执行分析的Sonar项目。我可以使用Maven + Cobertura,通过指定Maven配置文件来定义要包含在Cobertura分析中(或从中排除)的包集合。这允许我生成一组Cobertura报告:一个用于项目整体,一个用于包 X , Y 和 Z ;等
所以我现在正在看的是创建一个名为 Bar 的Sonar项目,它是计算Maven项目 Foo 的指标的结果,而Sonar项目将是以这种方式配置只包括 X , Y , Z (可能存在于模块 M1 中的软件包, M2 等)。它将作为Jenkins工作启动,检查Maven项目 Foo 并调用声纳后构建操作,以某种方式指定Sonar项目名称 Bar 而不是默认为 Foo 。然后(我希望)我将有两个Sonar项目: Foo 代表整个Maven项目, Bar 代表Maven项目的一个子集。
我想知道(a)这是否可行,(b)是否有效?我不确定Sonar数据库是否会损坏(Sonar项目中会有模块 M1 , M2 和 M3 Foo 和 Bar ,这些可能会互相覆盖数据库条目。)
更新1
也许我可以在调用声纳作为Jenkins中的构建后动作时使用sonar.branch
属性。
e.g。
Jenkins Job One
clean install -DskipTests
Jenkins Job Two
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错误。
答案 0 :(得分:2)
您的编辑是正确的。使用sonar.branch
属性创建一个不同的Id,即从Sonar的角度来看另一个项目。
您可以在“bar”-profile中包含sonar.branch
属性(当然您需要在第二个作业中调用该配置文件),从而确保您的数据库不会被破坏。
是的,您需要两次分析项目,但这样更清洁(之后您可以选择对条形图使用不同的规则)。
但是,您不一定需要创建两个作业,您可以使用声纳分析作为构建操作而不是后构建操作。
您可以在不使用商业视图插件构建两次的情况下实现效果。