2017-03-22 48 views
1

我有一个独立的Jenkins作业来在我们的代码库上运行Sonar,它工作正常,但我始终获得代码覆盖率为零,尽管事后处理作业在Jenkins中正确显示代码覆盖率。我认为这个问题是有声纳无法正常拿起EXEC文件,我收到这在詹金斯日志:Jacoco.exe文件没有被Jenar拾起Jenkins

INFO: Analysing D:\Data\CCS\Jenkins\jobs\Sonar Scan\workspace\ccs-core\target\jacoco.exec 
INFO: Analysing D:\Data\CCS\Jenkins\jobs\Sonar Scan\workspace\ccs-core-common\target\jacoco.exec 
INFO: Analysing D:\Data\CCS\Jenkins\jobs\Sonar Scan\workspace\ccs-core-client\target\jacoco.exec 
INFO: No JaCoCo analysis of project coverage can be done since there is no class files. 

尽管事实上,我可以看到这些文件是在该位置的作业有后完成。

我在构建两个步骤,首先是通过MVN运行Jacoco:

clean org.jacoco:jacoco-maven-plugin:prepare-agent install -Dmaven.test.failure.ignore=true 

第二只使用声纳插件来生成报告。然后是詹金斯生成Jacoco报告的后处理报告。

一些有用的灵魂指向我可能会失踪的东西吗?

回答

0

试试这个:

在pom.xml中

<properties> 
<jacoco.data.file>${project.build.directory}/coverage-reports/jacoco.exec</jacoco.data.file> 
... 
</properties> 

     <plugin> 
      <groupId>org.jacoco</groupId> 
      <artifactId>jacoco-maven-plugin</artifactId> 
      <executions> 

       <execution> 
        <id>default-prepare-agent</id> 
        <goals> 
         <goal>prepare-agent</goal> 
        </goals> 
        <configuration> 
         <destFile>${jacoco.data.file}</destFile> 
         <propertyName>surefireArgLine</propertyName> 
        </configuration> 
       </execution> 
       <execution> 
        <id>post-unit-test</id> 
        <phase>test</phase> 
        <goals> 
         <goal>report</goal> 
        </goals> 
        <configuration> 
         <dataFile>${jacoco.data.file}</dataFile> 
         <outputDirectory>${project.reporting.outputDirectory}/jacoco</outputDirectory> 
        </configuration> 
       </execution> 
        ... 
        ... 

而且在sonar-projet.properties

sonar.jacoco.reportPath=coverage-reports/jacoco.exec 
+0

这是行不通的,因为项目结构有点怪用sub pom.xml文件。我的配置文件如下所示: #带源码目录的逗号分隔路径(必需) sonar.sources = ccs-core/src,ccs-core-client/src sonar.binaries = ccs-core/target/classes,ccs-core-client/target/classes,ccs-core-common/target/classes #测试覆盖位置 sonar.jacoco.reportPaths = ccs-core/target/jacoco.exec ,ccs-core-client/target/jacoco.exec,ccs-core-common/target/jacoco.exec –

+0

这不起作用,因为项目结构中有自己的poms子项目。我认为这基本上是问题所在。我确实跑过这个:http://stackoverflow.com/questions/27778752/how-can-i-integrate-jacoco-reports-with-sonarqube-without-using-maven其中说,我需要设置sonar.binaries财产,但这仍然失败,同样的错误。我不知道是否需要指定sonar.junit.reportsPath,或者是否可以使用多个路径将它指定为每个子项目的逗号分隔值。 –

+0

是的,我不能为sonar.junit.reportsPath添加多个路径。我怀疑我无法做到这一点,因为我需要分别指定每个模块。 –