"Project coverage is set to 0%" – JaCoCo and Sonar in Jenkins with Ant



我把我的工作从一台Hudson机器转移到了一个多从Jenkins环境中,现在JaCoCo的覆盖范围不再有效。

工作(旧):Hudson 2.0.1,Jenkins Sonar插件1.7.1,声纳2.1.2

断裂(新):Jenkins 1.446,Jenkins Sonar插件1.7.2,声纳2.1.2

我的Hudson工作名为Pinnacle,它过去在同一台机器上运行,在一台Hudson服务器上运行Sonar。我通过执行以下操作来设置我的(无MAVEN)构建。

1) 在我的build.xml中添加了一个名为test-with-coverage 的Ant目标

2) 将Hudson中的Pinnacle作业配置为使用以下属性"调用独立声纳分析":

sonar.projectKey=com.skyboximaging:pinnacle
sonar.projectName="Pinnacle"
sonar.projectVersion=1.0
sources=Pinnacle/src/java
tests=Pinnacle/test/java
binaries=Pinnacle/classes
sonar.jacoco.reportPath=Pinnacle/jacoco.exec
sonar.jacoco.antTargets=test-with-coverage

(请注意,代码已签出到Jenkins作业工作区的Pinnacle目录中。)

3) 配置声纳"常规设置"以使用JaCoCo进行代码覆盖

一切都很顺利!

但是在新的Jenkins环境中,我在Jenkins构建输出中看到了这个错误:

23:15:17.863 INFO  Sensor JaCoCoSensor...
23:15:17.868 INFO  Project coverage is set to 0% as no JaCoCo execution data has been dumped: /var/lib/jenkins/workspace/Pinnacle/Pinnacle/jacoco.exec

该文件在运行生成的从属服务器上不存在。(目录/var/lib/jenkins/workspace/Pinnacle/Pinnacle确实存在。)

所有其他传感器(FindBugs、PMD等)似乎工作正常。只有JaCoCo坏了。

Sonar/JaCoCo甚至可以在多从Jenkins环境中工作吗?

我怀疑Ant任务test-with-coverage没有运行。Sonar如何定位build.xml?新旧装置有什么不同?

我最近进行了设置,并成功地让Sonar和Jacobo一起运行。由于我最近才接触这个话题,我想我会在stackoverflow上查看类似的问题并提供帮助。我从Jacobo那里得到了结果,但发现除了你在帖子中列出的属性外,你还必须明确设置以下参数:

sonar.core.codeCoveragePlugin=jacoco
sonar.jacoco.reportPath=tests/jacoco-exec/jacoco.exec
sonar.dynamicAnalysis=reuseReports
sonar.surefire.reportsPath=tests/test-reports

如果你想使用sonar.jacoco.reportPath属性,你必须设置sonar.core.codeCoveragePlugin=jacoco。否则,您将不得不使用sonar.jacoco.itReportPath属性。但是,我建议只设置codeCoveragePluin和reportPath属性。否则,它将不会显示在声纳中的默认覆盖小部件下。请注意,您不能同时使用默认的覆盖工具和jacoco。它必须是其中之一。我决定使用雅科。

在运行声纳任务之前,您的蚂蚁目标必须配置为生成jacoco.exec结果:

<jacoco:coverage enabled="${tests.code.coverage}" destfile="${jacoco.exec.dest}">
  <junit fork="yes" printsummary="withOutAndErr" dir="${tests.working.dir}">
  ...

如果你在声纳之前运行junit,也就是说,如果你在声呐之外运行junit:,一定要告诉声纳重复使用报告和任何太阳火报告

sonar.dynamicAnalysis=reuseReports
sonar.jacoco.reportPath=tests/jacoco-exec/jacoco.exec
sonar.surefire.reportsPath=tests/test-reports

无论出于何种原因,如果您需要更详细的调试,请使用以下属性:

sonar.verbose=真实

最新更新