web-dev-qa-db-ja.com

Jacocoと複数のモジュールを使用してJenkinsでコードカバレッジを取得するにはどうすればよいですか?

私のコード構造は次のとおりです:

イベント
メッセージ
その他のコード
機能テスト

Jacocoのビルドスクリプトでは、まずすべてのクラスをコピーし、そのクラスディレクトリを使用してツールを実行する必要があります。ここで、ターゲットディレクトリに関する手順を説明してください。コードカバレッジを実行するディレクトリについてはどうすればよいですか。

ビルド時に、各フォルダーには、クラスを含む独自のターゲットフォルダーがあります。

手順は次のとおりです。

  1. Jenkinsでジョブとしてプロジェクトをビルドする
  2. ユーザーステージにデプロイします
  3. Jenkinsでjacocoレポートジョブを実行する

Jacocoは仕事の説明を報告します:

  1. ビルドステップ-Maven 3.3.3の目標-クリーンなテストとテストスイート、ユーザーステージの詳細、その他の情報が渡されます。

  2. ポストステップ-シェルを実行する

    ここにフォーマットして貼り付けることができないため、ここにアップロードしました: https://zerobin.net/?8a988cd05bf3d752#fbzMlW1b7uzD+HZnmwnd9WjQYBI3j95Q7DCIx6q+l0U=

  3. トップレベルのMavenターゲットを呼び出す-Maven 3.3.3 -f jacoco_pom.xml jacoco:dump antrun:run @ report

シェルペーストで使用されているclasDir変数にはクラスが必要です。これまでのところ、私はこれをシェルスクリプトの最初に行いました。

mkdir -p target/classes
cp -R messages/target/classes target/classes

clsDir = target/classes

この方法で、そのモジュールに関するレポートを取得しました。私のテストスイートには1つのクラスしか含まれていませんでした。 eventsother-codeなどの他のモジュールも含めて、ソースをリンクしたい。

設定方法についてサポートが必要です。主な目的は、機能テストのコードカバレッジレポートを生成することです。

編集:

回答:以下の回答は役に立ちましたが、UIではなくシェルコマンドを使用してすべて実行する必要がありました。そのため、リポジトリのクローンを作成し、mvn clean package -DskipTestsを実行して、すべてのモジュールフォルダーからすべての第1レベルのサブフォルダーをコピーすることは役立ちましたが、カバレッジにエラーが表示されましたクラスファイルの実行データの不一致。つまり、インストルメントされたクラスとカバレッジに使用しているクラスは、異なるJVM(1つはJenkinsにあり、もう1つはステージにデプロイされています)によって個別にビルドされます。

したがって、解決策はそれらを複製して再コンパイルするのではなく、配備リポジトリからマニフェストをダウンロードしてすべてのjarを解凍することでした。このようにして、すべてのクラスを同じバージョンにしました。

5
xploreraj

Jenkins JaCoCoプラグイン構成を変更して複数のクラスディレクトリを含めるには、[クラスディレクトリへのパス]フィールドを変更する必要があります。

たとえば、「events」および「other-code」ディレクトリの下にクラスを含める場合は、「クラスディレクトリへのパス」セクションに以下を追加します。

**/events,**/other-code

複数のディレクトリを追加する場合は、各ディレクトリをカンマで区切る必要があり、スペースを入れないでください(バグのため)プラグインを使用)。注:このコンマのバグは、このプラグイン構成のすべてのテキストフィールドに当てはまります。

これが私の作業中のJaCoCoプラグイン設定です: Example JaCoCo Plugin Configuration

EDIT:コメントで述べたように、この問題の解決策の1つは、扱っているビルドツール(Ant、Maven、Gradle)を利用して、 target(つまり、jar、warなど)を共通ディレクトリに配置し、そこにjacocoプラグインを指定するだけです。

6
lax1089