2017-03-22 52 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添加多個路徑。我懷疑我無法做到這一點,因爲我需要分別指定每個模塊。 –