よくある質問
その時から頭のてっぺんからの質問は、ジャココに夢中になりました。
私のアプリケーションサーバー(jBoss、Glassfish ..)はシリア、イラクなどにあります。統合テストを実行するときにマルチモジュールカバレッジを取得することは可能ですか?JenkinsとSonarも異なるサーバー上にあります。
はい。モードで実行するjacocoエージェントoutput=tcpserver
、jacoco ant lib を使用する必要があります。基本的に2つjar
です。これにより、99%の成功率が得られます。
jacocoエージェントはどのように機能しますか?
文字列を追加します
-javaagent:[your_path]/jacocoagent.jar=destfile=/jacoco.exec,output=tcpserver,address=*
アプリケーションサーバーJAVA_OPTSに追加し、再起動します。この文字列で[your_path]
は、jacocoagent.jarへのパスに置き換えるだけでよく、アプリサーバーが実行されているVMに保存(store it!)します。アプリサーバーを起動すると、デプロイされたすべてのアプリケーションが動的に監視され、そのアクティビティ(コードの使用を意味する)は、tclリクエストによってjacocos .exec形式で取得できるようになります。
テストが開始されてから、jacocoエージェントをリセットして実行データの収集を開始できますか?
はい、そのためには、jacocoant.jarおよびantビルドスクリプトがjenkinsワークスペースに配置されている必要があります。
基本的に、http://www.eclemma.org/jacoco/から必要なのは、jenkinsワークスペースにあるjacocoant.jarと、アプリサーバーVMにあるjacocoagent.jarです。
そのとおり。
私はantを使いたくない、jacoco mavenプラグインもすべてのことができると聞きました。
そうではありません、jacoco mavenプラグインは単体テストデータといくつかの統合テストデータを収集できます(Arquillian Jacocoを参照)。たとえば、テストをjenkinsの個別のビルドとして保証し、マルチモジュールカバレッジを表示したい場合は、 mavenプラグインがどのように役立つかわかりません。
ジャココエージェントは正確には何を生成しますか?
.exec
形式のカバレッジデータのみ。その後、ソナーはそれを読み取ることができます。
jacocoは私のJavaクラスがどこにあるかを知る必要がありますか?
いいえ、ソナーにはありますが、ジャココにはありません。あなたがmvn sonar:sonar
クラスへのパスを行うとき、出てくる。
では、antスクリプトはどうでしょうか。
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で起動しましたか?
JenkinsワークスペースにAntスクリプトとjacocoant.jarを配置しましたか?
はいの場合、最後のステップはjenkinsビルドを構成することです。ここに戦略があります:
- antターゲット
jacocoReset
を呼び出して、以前に収集されたすべてのデータをリセットします。
- テストを実行する
- antターゲット
jacocoReport
を呼び出してレポートを取得する
すべてが正しい場合はit-jacoco.exec
、ビルドワークスペースに表示されます。
スクリーンショットを見てください。ant
ワークスペースの$WORKSPACE/tools/ant
dir にもインストールしていますが、jenkinsにインストールされているものを使用できます。
このレポートをソナーでプッシュする方法は?
Maven sonar: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
。これを回避するには、を使用します。