2014-09-26 60 views
1

我想要解决以下挑战。这里有一个当前设置:合并来自多个来源的Jacoco报告文件

  • 詹金斯
  • Maven的
  • SonarQube
  • 与多个模块

所以目前在詹金斯我们有2个版本,一个为正常分娩和另外一个Java应用程序生成声纳报告。

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

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

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

在我詹金斯建设我有前步骤去如下: 一个调用目标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构建步骤,呼吁声纳:声纳

这里是相对于我的积分报告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%,用于我的集成测试。但是当我使用相同的-jacoco.exec报告并使用Eclipse的Jacoco导入Coverage会话导入它时,我获得了26%的覆盖率。

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

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

回答

0

由于jacoco即时检测功能,可以轻松实现从任何应用程序实例收集覆盖范围。你只需要提供jacocoagent。罐子,并添加下列选项JVM电话:

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

这里是关于这个更详细的文档:

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

接着,在Maven的声纳建立执行您应提供以下与路径参数生成覆盖文件:

-Dsonar.jacoco.itReportPath=<path> 

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

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

+0

好吧,听起来不错,但我踢我的Java应用程序使用ant和build.xml文件。而且我无法弄清楚把jacoco蚂蚁变量放在哪里。 _italic_ ** **粗体<目标名称= “开始” 描述= “启动任务管理器”> \t \t \t \t \t \t \t <类路径REFID =” project.class.path” /> \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t lbarriau 2014-09-29 15:08:23

+0

您已经指定了一些JVM参数。只需添加另一个jvmarg标记,将值设置为启用jacoco。 – 2014-09-29 18:35:53

+0

我想我明白了。最后一个整合问题。假设我使用TCPServer选项来远程启动报告生成...一旦生成报告,Sonar的最佳方法是什么?我已经在Sonar中为我的项目提供了一个来自Maven的项目。我可以将远程生成的文件追加到maven中生成的文件中,如果是,如何? – lbarriau 2014-10-03 19:51:14