JaCoCoカバレッジレポート
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
JaCoCoカバレッジレポートを機能させるには、適切にフォーマットされたJaCoCo XMLファイルを生成し、行カバレッジを提供する必要があります。
マルチモジュールプロジェクトからの集約されたレポートはサポートされていません。集約されたレポートのサポートにコントリビュートするには、イシュー491015を参照してください。
JaCoCoカバレッジレポートの可視化では、以下をサポートしています:
- 指示(C0カバレッジ)、
ci(カバレッジ対象の指示) をレポートに表示します。
カバレッジ情報は、次のインジケーターとともにマージリクエスト差分ビューに表示されます:
- カバレッジ対象の指示(緑): 少なくとも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は、関連するマージリクエストからのデータを使用して、相対パスを絶対パスに変換しようとします。
パス照合プロセスは次のとおりです:
- 同じパイプラインrefsのすべてのマージリクエストを検索します。
- 変更されたすべてのファイルについて、すべての絶対パスを検索します。
- レポート内の相対パスごとに、最初に一致する絶対パスを使用します。
このプロセスでは、適切な一致する絶対パスを常に見つけられるとは限りません。
複数のモジュールまたはソースディレクトリ
複数のモジュールまたはソースディレクトリに同一のファイル名がある場合、デフォルトでは絶対パスを見つけることができない場合があります。
たとえば、マージリクエストで次のファイルが変更された場合、GitLabは絶対パスを見つけることができません:
src/main/java/org/acme/DemoExample.javasrc/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
完全な相対パスが一意である限り、新しいディレクトリを追加することもできます。
トラブルシューティング
すべての変更されたファイルに対してメトリクスが表示されない
同じソースブランチから新しいマージリクエストを作成しても、異なるターゲットブランチを使用すると、メトリクスが正しく表示されない場合があります。
このジョブは、新しいマージリクエストからの差分を考慮せず、他のマージリクエストの差分に含まれていないファイルについては、メトリクスを表示しません。これは、生成されたカバレッジレポートに指定されたファイルのメトリクスが含まれている場合でも発生します。
この修正を行うには、新しいマージリクエストが作成されるまで待ってから、パイプラインを再実行するか、新しいパイプラインを開始します。次に、新しいマージリクエストが考慮されます。
