よくある質問
それ以来、頭のてっぺんからの質問は、ジャココに夢中になりました。
シリアのイラクにある私のアプリケーションサーバー(jBoss、Glassfish ..)は、統合テストを実行するときにマルチモジュールカバレッジを取得できますか?JenkinsとSonarも異なるサーバー上にあります。
はい。モードで実行されるjacocoエージェント、jacocoantlibを使用する必要がありますoutput=tcpserver
。基本的に2jar
秒。これにより、99%の成功が得られます。
jacocoエージェントはどのように機能しますか?
文字列を追加します
-javaagent:[your_path]/jacocoagent.jar=destfile=/jacoco.exec,output=tcpserver,address=*
アプリケーションサーバーJAVA_OPTSに接続し、再起動します。この文字列で[your_path]
は、アプリサーバーが実行されているVMに保存(保存!)されたjacocoagent.jarへのパスに置き換えるだけで済みます。その時点でアプリサーバーを起動すると、デプロイされているすべてのアプリケーションが動的に監視され、それらのアクティビティ(コードの使用を意味する)がtclリクエストによってjacocos.exec形式で取得できるようになります。
テスト開始時からのみ実行データの収集を開始するようにjacocoエージェントをリセットできますか?
はい、そのためには、jenkinsワークスペースにあるjacocoant.jarとantビルドスクリプトが必要です。
つまり、基本的にhttp://www.eclemma.org/jacoco/から必要なのは、jenkinsワークスペースにあるjacocoant.jarと、アプリサーバーVMにあるjacocoagent.jarですか?
それは正しい。
antは使いたくないのですが、jacocomavenプラグインでもすべてのことができると聞きました。
そうではありません。jacocomavenプラグインは単体テストデータといくつかの統合テストデータを収集できます(Arquillian Jacocoを参照)が、たとえば、jenkinsの個別のビルドとして安心できるテストがあり、マルチモジュールカバレッジを表示したい場合は、 Mavenプラグインがどのように役立つかわかりません。
ジャココエージェントは正確に何を生成しますか?
.exec
フォーマットのカバレッジデータのみ。ソナーはそれを読むことができます。
jacocoは私のJavaクラスがどこにあるかを知る必要がありますか?
いいえ、ソナーはしますが、ジャココはしません。mvn sonar:sonar
クラスへのパスを実行すると、効果があります。
では、アリのスクリプトはどうですか?
jenkinsワークスペースに表示する必要があります。私のアリのスクリプト、私はそれをjacoco.xml
次のように呼んだ:
<project name="Jacoco library to collect code coverage remotely" xmlns:jacoco="antlib:org.jacoco.ant">
<property name="jacoco.port" value="6300"/>
<property name="jacocoReportFile" location="${workspace}/it-jacoco.exec"/>
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
<classpath path="${workspace}/tools/jacoco/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>
</project>
このスクリプトを呼び出すときに渡す必要のある2つの必須パラメーターは、このスクリプト
-Dworkspace=$WORKSPACE
を使用して、jenkinsワークスペースと-Djacoco.host=yourappserver.com
ホストをポイントします。http://
また、jacocoant.jar
${workspace}/tools/jacoco/jacocoant.jarに移動したことにも注意してください。
次に何をすればいいですか?
アプリサーバーをjacocoagent.jarで起動しましたか?
antスクリプトとjacocoant.jarをjenkinsワークスペースに配置しましたか?
はいの場合、最後のステップはjenkinsビルドを構成することです。戦略は次のとおりです。
- antターゲット
jacocoReset
を呼び出して、以前に収集されたすべてのデータをリセットします。
- テストを実行する
- アリのターゲット
jacocoReport
を呼び出してレポートを取得する
すべてが正しければit-jacoco.exec
、ビルドワークスペースに表示されます。
スクリーンショットを見てくださいant
。ワークスペースの$WORKSPACE/tools/ant
dirにもインストールしましたが、jenkinsにインストールされているものを使用できます。

このレポートをソナーにプッシュする方法は?
Mavensonar:sonar
がジョブを実行し(構成することを忘れないでください)、メインのpom.xmlをポイントして、すべてのモジュールで実行されるようにします。パラメータを使用sonar.jacoco.itReportPath=$WORKSPACE/it-jacoco.exec
して、統合テストレポートの場所をソナーに通知します。新しいモジュールクラスを分析するたびに、のカバレッジに関する情報を検索しますit-jacoco.exec
。
私はすでに`target`ディレクトリにjacoco.execを持っています、` mvn sonar:sonar`はそれを無視/削除します
デフォルトでmvn sonar:sonar
はclean
、ターゲットディレクトリを削除しますが、これsonar.dynamicAnalysis=reuseReports
を回避するために使用します。