我把我的工作从一台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=真实