将Sonar与本机Teamcity代码覆盖(Java)集成

时间:2016-05-05 02:18:22

标签: java intellij-idea teamcity code-coverage jacoco

声纳没有拿起IntellijIdea / Jacoco报道报告生成的代码覆盖率报告。

下面是我试图让声纳接收生成的jacoco报告的一个样本

构建步骤:
第1步
蚂蚁 构建文件路径:junit-build.xml
目标:默认
启用了JaCoCo的覆盖范围 执行:如果之前的所有步骤都成功完成了 第2步
SonarQube Runner 执行:如果之前的所有步骤都已成功完成

工件:
.teamcity
coverage_jacoco
jacoco.exec

UT JaCoCo报告: .teamcity / coverage_jacoco / jacoco.exec

JaCoCoSensor:未找到JaCoCo报告:/ export /.../ BuildAgent2 / work /.../。teamcity / coverage_jacoco / jacoco.exec

声纳:
此组件没有覆盖详细信息。

1 个答案:

答案 0 :(得分:0)

问题在于TeamCity jacoco运行器将输出文件放在一个临时文件位置,当作为maven / ant构建的一部分运行时,声纳插件或声纳无法找到它。 " .teamcity"在发布的工件存储区中,而不是构建区域,并且在发布jacoco输出之前,它似乎位于随机命名的目录中。

另一种方法是关闭teamcity jacoco runner并通过maven或ant build本身触发覆盖和声纳扫描。 Sonar可以配置为通过在管理 - > java-> jacoco设置(相对于构建或模块根目录)中放置正确的位置来查找结果。这将使您的覆盖范围成为声纳。

要将覆盖率报告添加回teamcity,您需要在构建常规设置中添加工件,该工件将报告html文件收集到coverage.zip文件中。然后,您将在构建结果中获得“代码覆盖率”选项卡。 (如果你得到两个,那么你仍然在运行teamcity cover runner。)

简称maven版本(ant在逻辑上是相同的):

  • 关闭teamcity构建步骤中的coverage选项
  • 添加org.jacoco:jacoco-maven-plugin:prepare-agent目标以通过声纳创建报告耗材
  • 在sonarqube中将jacoco UT报告设置为" target / jacoco.exec"
  • 添加org.jacoco:jacoco-maven-plugin:报告目标以创建供teamcity使用的html报告
  • 添加此工件" target / site / jacoco / ** / => coverage.zip"使html报告显示为teamcity中的选项卡

对于有多个报告的多模块构建,我无法找到将这些报告纳入团队城市的方法 - 尽管它们在声纳中看起来很好。有一个jacoco合并目标可能有所帮助,但我没有成功 - 我怀疑它会搞乱声纳视图。