7

ジョブを 1 台の Hudson マシンから複数スレーブの Jenkins 環境に移動したところ、JaCoCo のカバレッジが機能しなくなりました。

WORKING(旧):Hudson 2.0.1、Jenkins Sonar Plugin 1.7.1、Sonar 2.1.2

BROKEN (新規): Jenkins 1.446、Jenkins Sonar Plugin 1.7.2、Sonar 2.1.2

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

1) と呼ばれる私の build.xml に Ant ターゲットを追加しましたtest-with-coverage

2) Hudson で Pinnacle ジョブを構成し、次のプロパティを使用して「スタンドアロンのソナー分析を呼び出す」ようにしました。

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

(コードは、Jenkins ジョブ ワークスペースの Pinnacle ディレクトリにチェックアウトされていることに注意してください。)

3)コードカバレッジにJaCoCoを使用するようにSonarの「一般設定」を構成しました

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

しかし、新しい Jenkins 環境では、Jenkins ビルド出力に次のエラーが表示されます。

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

そのファイルは、ビルドが実行されたスレーブには存在しません。(ディレクトリ /var/lib/jenkins/workspace/Pinnacle/Pinnacle存在します。)

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

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

test-with-coverageAnt タスクが実行されていないと思われます。Sonar はどのように build.xml を見つけますか? また、古いインストールと新しいインストールの違いは何ですか?

4

1 に答える 1

9

私は最近セットアップし、Sonar と Jacoco を一緒に実行することに成功しました。私はこのトピックに最近取り組んでいるので、同様の問題についてstackoverflowをチェックして助けたいと思いました. Jacoco から結果を取得していますが、投稿にリストしたプロパティに加えて、次のパラメーターを明示的に設定する必要があることがわかりました。

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

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

ソナー タスクを実行する前に、jacoco.exec の結果を生成するように Ant ターゲットを構成する必要があります。

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

ソナーの前にjunitを実行している場合、つまりソナーの外でjunitを実行している場合は、レポートとサンファイアレポートを再利用するようにソナーに伝えてください。

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

何らかの理由で、より詳細なデバッグが必要な場合は、次のプロパティを使用します。

sonar.verbose=true

于 2012-02-27T21:25:41.387 に答える