2014-09-26 57 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