2012-01-14 28 views
7

私は自分の仕事を単一のHudsonマシンから複数のスレーブJenkins環境に移行しましたが、JaCoCoの適用範囲はもう機能しません。"プロジェクトカバレッジは0%に設定されています" - JaCoCoとSonar、AntとJenkinsで

WORKING(旧): ハドソン2.0.1、 ジェンキンスソナープラグイン1.7.1、 ソナー2.1.2

BROKEN(新): ジェンキンス1.446、 ジェンキンスソナープラグイン1.7.2、 Sonar 2.1.2

私のHudsonジョブはPinnacleと呼ばれ、同じマシン上でSonarを使用する単一のHudsonサーバー上で実行されていました。次のようにして私の(NO MAVEN)ビルドをセットアップしました。

sonar.projectKey=com.skyboximaging:pinnacle 
sonar.projectName="Pinnacle" 
sonar.projectVersion=1.0 
sources=Pinnacle/src/java 
tests=Pinnacle/test/java 
binaries=Pinnacle/classes 
sonar.jacoco.reportPath=Pinnacle/jacoco.exec 
sonar.jacoco.antTargets=test-with-coverage 

(ことに注意してください:

1)は、これらのプロパティで "スタンドアロンソナー分析を呼び出す" するハドソンのピナクルジョブを設定し

と呼ばれる私のbuild.xml)にAntターゲットを追加しましたコードは、ジェンキンスジョブワークスペースでピナクルディレクトリにチェックアウトされている。)

3)コードカバレッジのためJaCoCoを使用するように設定ソナー「一般設定」

すべてが美しく機能しました!

しかし、新しいジェンキンス環境では、私はジェンキンスにこのエラーが表示出力構築:

23:15:17.863 INFO Sensor JaCoCoSensor... 
23:15:17.868 INFO Project coverage is set to 0% as no JaCoCo execution data has been dumped: /var/lib/jenkins/workspace/Pinnacle/Pinnacle/jacoco.exec 

ファイルは、ビルドが実行されたスレーブには存在しません。

他のすべてのセンサー(FindBugs、PMDなど)は正常に動作しているようです。OK/OK/OKをクリックします。ただJaCoCoは壊れています。

Sonar/JaCoCoはマルチスレーブのJenkins環境でも動作しますか?

Antタスクtest-with-coverageが実行されていない可能性があります。ソナーはどのようにbuild.xmlを探しますか?そして、古いものと新しいものとでは何が違うのですか?

答えて

9

私は最近、ソナーとヤココを一緒に走らせることができました。私は最近話題になっているので、私は同様の問題についてstackoverflowをチェックして助けてくれると思った。私はJacocoから結果を取得していますが、明示的にあなたがあなたの記事に記載されてきた特性に加えて、以下のパラメータを設定する必要がありました見つかっています:

sonar.core.codeCoveragePlugin=jacoco 
sonar.jacoco.reportPath=tests/jacoco-exec/jacoco.exec 
sonar.dynamicAnalysis=reuseReports 
sonar.surefire.reportsPath=tests/test-reports 

あなたがいる場合sonar.core.codeCoveragePlugin = jacocoを設定する必要がありますsonar.jacoco.reportPathプロパティを使用できるようにします。それ以外の場合は、sonar.jacoco.itReportPathプロパティーを使用する必要があります。ただし、codeCoveragePluginプロパティとreportPathプロパティを設定することをお勧めします。それ以外の場合は、ソナーのデフォルトカバレッジウィジェットの下に表示されません。デフォルトのカバレッジツールとjacocoを一緒に使用することはできません。それはどちらか一方でなければなりません。私はJacocoを使うことに決めました。

jacocoを生成するには、antターゲットを設定する必要があります。前ソナータスクを実行するには、execの結果:

<jacoco:coverage enabled="${tests.code.coverage}" destfile="${jacoco.exec.dest}"> 
    <junit fork="yes" printsummary="withOutAndErr" dir="${tests.working.dir}"> 
    ... 

あなたはソナーの外でのJUnitを実行している場合つまり、あなたがソナー前のJUnitを実行している場合、レポートや任意のSUNFIREレポートを再利用するためにソナーを教えてください:

何らかの理由で
sonar.dynamicAnalysis=reuseReports 
sonar.jacoco.reportPath=tests/jacoco-exec/jacoco.exec 
sonar.surefire.reportsPath=tests/test-reports 

あなたはより詳細なデバッグが必要な場合は、次のプロパティを使用します。

sonar.verbose =

+0

真の感謝を! sonar.jacoco.reportPathを設定するポインタは、カバレッジデータを正しく読み込むために私のマルチプロジェクトのant駆動ソナーを取得するために必要な最後のビットです。 –

+0

@Jason:junitレポートの代わりにsahiを使用している場合、sonar.surefire.reportsPathのsahiレポート(htmlにあります)を使用できます – vinod

関連する問題