正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

JaCoCoカバレッジレポート

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

あなたのフィードバックをお寄せください

JaCoCoカバレッジレポートを機能させるには、適切にフォーマットされたJaCoCo XMLファイルを生成し、行カバレッジを提供する必要があります。

マルチモジュールプロジェクトからの集約されたレポートはサポートされていません。集約されたレポートのサポートにコントリビュートするには、イシュー491015を参照してください。

JaCoCoカバレッジレポートの可視化では、以下をサポートしています:

カバレッジ情報は、次のインジケーターとともにマージリクエスト差分ビューに表示されます:

  • カバレッジ対象の指示(緑): 少なくとも1つのカバレッジ対象の指示がある行(ci > 0
  • カバレッジ対象外の指示(赤): カバレッジ対象の指示がない行(ci = 0
  • カバレッジ情報なし: カバレッジレポートに含まれていない行

たとえば、このレポートの出力を使用します:

<line nr="83" mi="2" ci="0" mb="0" cb="0"/>
<line nr="84" mi="2" ci="0" mb="0" cb="0"/>
<line nr="85" mi="2" ci="0" mb="0" cb="0"/>
<line nr="86" mi="2" ci="0" mb="0" cb="0"/>
<line nr="88" mi="0" ci="7" mb="0" cb="1"/>

マージリクエスト差分ビューには、カバレッジが次のように表示されます:

カバレッジ対象外の行には赤いバー、カバレッジ対象の行には緑のバーが表示されるマージリクエスト差分ビュー。

この例では、83〜86行目はカバレッジ対象外のコードに対して赤いバーが表示され、88行目はカバレッジ対象のコードに対して緑のバーが表示され、87、89〜90行目にはカバレッジデータがありません。

JaCoCoカバレッジジョブを追加

カバレッジレポートを生成するようにパイプラインを設定するには、.gitlab-ci.ymlファイルにジョブを追加します。例:

test-jdk11:
  stage: test
  image: maven:3.6.3-jdk-11
  script:
    - mvn $MAVEN_CLI_OPTS clean org.jacoco:jacoco-maven-plugin:prepare-agent test jacoco:report
  artifacts:
    reports:
      coverage_report:
        coverage_format: jacoco
        path: target/site/jacoco/jacoco.xml

この例では、mvnコマンドはJaCoCoカバレッジレポートを生成します。pathは、生成されたレポートを指します。

ジョブが複数のレポートを生成する場合は、アーティファクトパスでワイルドカードを使用します。

相対ファイルパスの修正

ファイルパスの変換

JaCoCoレポートは相対ファイルパスを提供しますが、カバレッジレポートの可視化では絶対パスが必要です。GitLabは、関連するマージリクエストからのデータを使用して、相対パスを絶対パスに変換しようとします。

パス照合プロセスは次のとおりです:

  1. 同じパイプラインrefsのすべてのマージリクエストを検索します。
  2. 変更されたすべてのファイルについて、すべての絶対パスを検索します。
  3. レポート内の相対パスごとに、最初に一致する絶対パスを使用します。

このプロセスでは、適切な一致する絶対パスを常に見つけられるとは限りません。

複数のモジュールまたはソースディレクトリ

複数のモジュールまたはソースディレクトリに同一のファイル名がある場合、デフォルトでは絶対パスを見つけることができない場合があります。

たとえば、マージリクエストで次のファイルが変更された場合、GitLabは絶対パスを見つけることができません:

  • src/main/java/org/acme/DemoExample.java
  • src/main/other-module/org/acme/DemoExample.java

パス変換を成功させるには、相対パスに何らかの一意の違いが必要です。たとえば、ファイル名またはディレクトリ名のいずれかを変更できます:

  • ファイル名を変更します:

    src/main/java/org/acme/DemoExample.java
    - src/main/other-module/org/acme/DemoExample.java
    + src/main/other-module/org/acme/OtherDemoExample.java
    
  • パスを変更します:

    src/main/java/org/acme/DemoExample.java
    - src/main/other-module/org/acme/DemoExample.java
    + src/main/other-module/org/other-acme/DemoExample.java
    

完全な相対パスが一意である限り、新しいディレクトリを追加することもできます。

トラブルシューティング

すべての変更されたファイルに対してメトリクスが表示されない

同じソースブランチから新しいマージリクエストを作成しても、異なるターゲットブランチを使用すると、メトリクスが正しく表示されない場合があります。

このジョブは、新しいマージリクエストからの差分を考慮せず、他のマージリクエストの差分に含まれていないファイルについては、メトリクスを表示しません。これは、生成されたカバレッジレポートに指定されたファイルのメトリクスが含まれている場合でも発生します。

この修正を行うには、新しいマージリクエストが作成されるまで待ってから、パイプラインを再実行するか、新しいパイプラインを開始します。次に、新しいマージリクエストが考慮されます。