【问题标题】:Integrating Sonar with native Teamcity Code coverage (Java)将 Sonar 与本机 Teamcity 代码覆盖率 (Java) 集成
【发布时间】:2016-08-30 16:32:42
【问题描述】:

sonar 没有获取 IntellijIdea/Jacoco 覆盖率报告生成的代码覆盖率报告。

这是我试图让声纳拾取生成的 jacoco 报告的一个示例

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

神器:
.teamcity
coverage_jacoco
jacoco.exec

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

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

声纳:
该组件没有覆盖范围的详细信息。

【问题讨论】:

  • 我也有同样的问题。 Jacoco 通过 teamcity 作为构建步骤的一部分运行,声纳通过在同一步骤中将 sonar:sonar 添加到 maven 目标来运行。我认为 teamcity 将 jacoco 文件放置在构建区域之外,并且 .teamcity/coverage_jacoco 部分的发布工件发生在声纳已经运行之后。解决这个问题会很棒。

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


【解决方案1】:

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

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

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

简而言之,maven 构建(ant 在逻辑上是相同的):

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

对于拥有多个报告的多模块构建,我找不到将它们放入 teamcity 的方法 - 尽管它们在声纳中看起来确实不错。有一个 jacoco 合并目标可能会有所帮助,但我没有成功 - 我怀疑它会扰乱声纳视图。

【讨论】:

  • target/site/jacoco/jacoco.xml 就足够了(不需要 zip)
猜你喜欢
  • 2012-06-30
  • 2016-11-08
  • 2012-06-11
  • 2018-01-11
  • 2013-08-22
  • 2012-12-22
  • 2014-03-26
  • 1970-01-01
  • 2018-07-24
相关资源
最近更新 更多