2013-08-26 12 views
11

SonarとJenkinsでコードカバレッジを取得しようとしています。私はJenkinsのSonarプラグインがJUnitのテストケースを正常に実行し、正常にビルドを完了するのを見ています。しかし、Sonarはコードカバレッジ結果を表示しません(コードカバレッジとして常に0.0%を示します)。しかし、ソナーは "ユニットテストの成功"を示しています。Jenkins Sonarプラグインでビルドが成功した後、Sonarがコードカバレッジを表示しない

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

ソナープラグインを実行しながら、私はジェンキンスログに以下のメッセージが表示されます:

 
Project coverage is set to 0% as no JaCoCo execution data has been dumped: .../sonar/target/jacoco.exec 

いずれかを任意のソナープロジェクトに正しいコードカバレッジを取得する方法を手伝ってくれる。

+0

http://docs.codehaus.org/display/SONAR/Code+Coverage+by+Unit+Tests+for+Java+Projectを読んで、関連するプロジェクトサンプルを試しましたか?もしそうなら、より詳細な情報を提供してください:ログファイル、あなたのPOMファイルのSonarQubeの設定、SonarQubeの実行方法:mvn clean install/mvn sonar:sonar? SonarQubeなどのバージョン? –

+0

私はhttp://docs.codehaus.org/display/SONAR/Code+Coverage+by+Unit+Tests+for+Java+Projectを読んで、私のコードカバレッジプラグインとしてcoberturaを使用しました。私が大きなプロジェクトをソナーでチェックすると、コードカバレッジが表示されます。つまり、その空きがあることを意味します。Coberturaレポートが.../coverage.xmlパスに見つかりませんでした。その理由は何でしょうか。上記のメッセージを表示する前にcoberturaプラグインの計測がうまくいった – Venkat

+1

OutOfMemeryError:heapspaceのためにcoverage.xmlが生成されませんでした。私のプロジェクトは、ヒープメモリを2GBに設定したときの大きなプロジェクトで、coberturaプラグインメモリから1.5GBソナーにコードカバレッジが表示されます。 – Venkat

答えて

2

:あなたは(jacocoArgLineにのような)何か他のものにのpropertyNameプロパティ-剤を調製設定し、あなたargLineの設定でことを含むことができ、小規模プロジェクトのコードカバレッジ表示私がソナーで大きなプロジェクトを確認すると、コードカバレッジが表示されます。つまり、その空を意味します。ログでは、Coberturaレポートが/.../coverage.xmlのパスに見つかりませんでした。

OutOfMemeryError:heapspaceのためにcoverage.xmlが生成されませんでした。私のプロジェクトは、ヒープメモリを2GBに設定したときの大きなプロジェクトで、coberturaプラグインメモリから1.5GBソナーにコードカバレッジが表示されます。

0

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

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

+0

私の質問にお返事いただきありがとうございます。私はmvn sonar:sonarを実行しようとしました。 JaCoCoの実行データがダンプされていないので、プロジェクトカバレッジは0%に設定されています:/user/mysys/.jenkins/jobs/../workspace/.../sonar/ target/jacoco.exec。はい、ユニットテストの結果を読み込みますが、コードカバレッジには失敗します。 – Venkat

8

SonarがSurefireを正しく呼び出したため(「ユニットテストの成功」というメッセージが表示された)、JaCoCoがコードをインストルメントしたとは限りません。

JaCoCoを直接実行してみてください。 JaCoCoが直接失敗する理由を見つけるかもしれない:

mvn jacoco:prepare-agent test jacoco:report

をJaCoCoはターゲット/ jacocojacoco.execだけでなく、そのXML/HTMLレポートを配置します。それは失敗し、うまくいけば、あなたはなぜより良いアイデアを得るでしょう。

1つの非常に共通の問題は、jacoco:prepare-agentはちょうどこのシナリオでは、便利な無視されargLineプロパティを設定しますので、あなたが、すべてで確実なargLineを変更した場合JaCoCoのjavaagentが実行されないことです。私はその後、私が見るhttps://docs.sonarqube.org/display/PLUG/Code+Coverage+by+Unit+Tests+for+Java+Projectを読んで、私のコード・カバレッジ・プラグインとしてCoberturaの使用

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

0

このblog postによると、あなたはおそらくあなたのソナープラグインがJacocoによって生成されたレポートファイルを見つけることができません

Don’t forget sonar.binaries, otherwise, you might get something like « Project coverage is set to 0% since there is no directories with classes. » in your logs.

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

、プロジェクトのプロパティでsonar.binariesプロパティを設定するのを忘れ。

<destFile>タグをお探しの場合は、jacoco/prepare-agentを実行してください。名前と場所をtarget/jacoco.execに変更して、行ってみてください!