【发布时间】:2014-11-21 15:33:55
【问题描述】:
我想解决以下挑战。这是当前的设置:
- 詹金斯
- 马文
- SonarQube
- 具有多个模块的 Java 应用程序
因此,目前在 Jenkins 中,我们有 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>
最后我有一个调用 sonar:sonar 的 maven 构建步骤
这是 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
【问题讨论】:
标签: maven jenkins sonarqube jacoco