SonarとJenkinsでコードカバレッジを取得しようとしています。 JenkinsのSonarプラグインはJUnitテストケースを正常に実行し、ビルドを正常に完了します。ただし、Sonarはプロジェクトのコードカバレッジ結果を表示しません(常にコードカバレッジとして0.0%を表示します)。ただし、Sonarは「単体テストの成功」を示しています。
私はJavensとSonarでMavenを使用しています。
Sonarプラグインの実行中にJenkinsログに次のメッセージが表示されます。
JaCoCo実行データがダンプされていないため、プロジェクトカバレッジは0%に設定されています:.../sonar/target/jacoco.exec
Sonarプロジェクトで正しいコードカバレッジを取得する方法を教えてください。
https://docs.sonarqube.org/display/PLUG/Code+Coverage+by+Unit+Tests+for+Java+Project を読み、コードカバレッジプラグインとしてcoberturaを使用すると、コードが表示されます小さなプロジェクトのカバレッジが表示されます。ソナーで大きなプロジェクトをチェックすると、コードカバレッジが表示されます-それは空です。ログでは、Coberturaレポートが/.../coverage.xmlパスで見つからなかったことがわかりました。
coverage.xmlは、OutOfMemeryError:heapspaceのために生成されませんでした。ヒープメモリを2GBに設定し、coberturaプラグインメモリを1.5GBに設定すると、私のプロジェクトは非常に大きなプロジェクトなので、コードカバレッジが表示されます。
SonarがSurefireを正しく呼び出した(そして「Unit test success」メッセージを受け取った)からといって、JaCoCoがコードをインスツルメントしたわけではありません。
JaCoCoを直接実行してみてください。 JaCoCoが直接失敗する理由を見つけるかもしれません:
mvn jacoco:prepare-agent test jacoco:report
JaCoCoは、jacoco.execおよびそのXML/HTMLレポートをtarget/jacoco。または、失敗します。そして、うまくいけば、理由についてのより良いアイデアが得られるでしょう。
非常に一般的な問題の1つは、jacoco:prepare-agent
がargLineこのシナリオでは、便利に無視されるプロパティ。 prepare-agentのpropertyName
プロパティを他の何か(jacocoArgLineなど)に設定し、それを含めることができますargLine config:
<argLine>-Xmx1024m ${jacocoArgLine}</argLine>
Sonarプラグインは、Jacocoによって生成されたレポートファイルを見つけることができません。
Pom(親または子)で、<destFile>
実行の下でjacoco/prepare-agent
タグを探します。名前と場所をtarget/jacoco.exec
に変更すると、準備完了です!
これによると ブログ投稿 で、おそらくsonar.binaries
プロジェクトプロパティのプロパティ
Sonar.binariesを忘れないでください。そうしないと、"クラスのあるディレクトリがないため、プロジェクトのカバレッジが0%に設定されます。 "ログに記録します。
[...]
sonar.surefire.reportsPath=target/surefire-reports
sonar.jacoco.reportPath=target/jacoco.exec
sonar.binaries=target/classes
[...]
ソナーを実行するためにJenkinsソナープラグインを使用する代わりに、ソナーゴールを実行することにより、Mavenで実行してみてください。通常、これは追加のビルドステップを設定し、ソナーがすべての関連ファイルを見つけるまですべてのパスを調整するよりも簡単です。
あなたの場合、junit/testngレポートは読むことができますが、jacocoの結果(jacoco.exec)が見つかりません。パスソナー出力(../sonar/target/jacoco.exec
)正しいですか?