合并来自多个来源的Jacoco报告文件

时间:2014-09-26 15:04:59

标签: maven jenkins sonarqube jacoco

我有以下挑战,我想解决。这是当前的设置:

  • 詹金斯
  • 的Maven
  • SonarQube
  • 具有多个模块的Java应用程序

所以目前在詹金斯,我们有2个版本,一个用于正常传送,另一个用于生成声纳报告。

我们想要做的是使用JaCoCo参数线生成一个构建版本并将其发送给我们的QA团队,以获得更好的覆盖率数据,我们可以追加或与声纳构建生成的数字合并我们每天都在做。发送到QA的构建将安装到与我们生成构建的服务器不同的服务器上。

执行此操作的最佳方法是什么。最后,我们还希望从我们的开发工作站获取JaCoCo报告,并将这些数字附加到我们的声纳页面。

编辑1 感谢此线程提供的详细信息,我能够使用以下JVM选项启动我的多模块应用程序:"-javaagent:${MAIN_DIR}/lib/jacocoagent.jar==destfile=/jacoco.exec,output=tcpserver,address=*"

在我的Jenkins构建中,我有Pre Steps,如下所示: 调用目标jacocoReport的ant任务。 我用于此目的的build.xml具有以下代码;          

<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
    <classpath path="/opt/hudson/tools/jacocoant.jar"/>
</taskdef>

<target name="jacocoReport">
        <jacoco:dump address="${jacoco.host}" port="${jacoco.port}" dump="true" reset="true" destfile="${jacocoReportFile}" append="false"/>
</target>

<target name="jacocoReset">
        <jacoco:dump address="${jacoco.host}" port="${jacoco.port}" reset="true" destfile="${jacocoReportFile}" append="false"/>
    <delete file="${jacocoReportFile}"/>
</target>

最后我有一个maven构建步骤,它调用了sonar:sonar

这是POM中与我的整合报告相关的部分;

<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
<sonar.jacoco.itReportPath>${WORKSPACE}/it-jacoco.exec</sonar.jacoco.itReportPath>
<sonar.language>java</sonar.language>
<sonar.branch>9.9.5</sonar.branch>

当构建完成时,我的Sonar条目仍然显示为0%,用于我的集成测试。但是,当我使用相同的it-jacoco.exec报告并使用Eclipse的Jacoco导入覆盖率会话导入它时,我获得了26%的覆盖率。

最后,当我查看我的Jenkins构建日志时,我看到以下内容;

Sensor JaCoCoItSensor...
Analysing /var/lib/jenkins/workspace/XXXXXX/it-jacoco.exec
No information about coverage per test.
Sensor JaCoCoItSensor done: 34 ms

1 个答案:

答案 0 :(得分:0)

由于具有jacoco即时检测功能,因此可以轻松实现从任何应用程序实例收集覆盖范围。您只需提供jacocoagent.jar并将以下选项添加到JVM调用:

-javaagent:[yourpath/]jacocoagent.jar=[option1]=[value1],[option2]=[value2]

以下是更详细的文档:

http://www.eclemma.org/jacoco/trunk/doc/agent.html

接下来,在Maven Sonar构建执行期间,您应提供以下参数以及生成的覆盖文件的路径:

-Dsonar.jacoco.itReportPath=<path>

您可以在这里找到详细说明:

http://docs.codehaus.org/display/SONAR/Code+Coverage+by+Integration+Tests+for+Java+Project