web-dev-qa-db-ja.com

Jenkins Sonarプラグインでビルドが成功した後、Sonarはコードカバレッジを表示しません

SonarとJenkinsでコードカバレッジを取得しようとしています。 JenkinsのSonarプラグインはJUnitテストケースを正常に実行し、ビルドを正常に完了します。ただし、Sonarはプロジェクトのコードカバレッジ結果を表示しません(常にコードカバレッジとして0.0%を表示します)。ただし、Sonarは「単体テストの成功」を示しています。

私はJavensとSonarでMavenを使用しています。

Sonarプラグインの実行中にJenkinsログに次のメッセージが表示されます。

 JaCoCo実行データがダンプされていないため、プロジェクトカバレッジは0%に設定されています:.../sonar/target/jacoco.exec 

Sonarプロジェクトで正しいコードカバレッジを取得する方法を教えてください。

15
Venkat

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に設定すると、私のプロジェクトは非常に大きなプロジェクトなので、コードカバレッジが表示されます。

3
Venkat

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-agentargLineこのシナリオでは、便利に無視されるプロパティ。 prepare-agentのpropertyNameプロパティを他の何か(jacocoArgLineなど)に設定し、それを含めることができますargLine config:

<argLine>-Xmx1024m ${jacocoArgLine}</argLine>

9
user847316

Sonarプラグインは、Jacocoによって生成されたレポートファイルを見つけることができません。

Pom(親または子)で、<destFile>実行の下でjacoco/prepare-agentタグを探します。名前と場所をtarget/jacoco.execに変更すると、準備完了です!

1

これによると ブログ投稿 で、おそらくsonar.binariesプロジェクトプロパティのプロパティ

Sonar.binariesを忘れないでください。そうしないと、"クラスのあるディレクトリがないため、プロジェクトのカバレッジが0%に設定されます。 "ログに記録します。

[...]
sonar.surefire.reportsPath=target/surefire-reports
sonar.jacoco.reportPath=target/jacoco.exec
sonar.binaries=target/classes
[...]
0
Jocker

ソナーを実行するためにJenkinsソナープラグインを使用する代わりに、ソナーゴールを実行することにより、Mavenで実行してみてください。通常、これは追加のビルドステップを設定し、ソナーがすべての関連ファイルを見つけるまですべてのパスを調整するよりも簡単です。

あなたの場合、junit/testngレポートは読むことができますが、jacocoの結果(jacoco.exec)が見つかりません。パスソナー出力(../sonar/target/jacoco.exec)正しいですか?

0
ssindelar