カバレッジの可視化
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
artifacts:reports:coverage_reportキーワードを使用して、MR差分に1行ごとのカバレッジアノテーションを表示します。
このキーワードは、差分アノテーションのみを表示します。カバレッジの割合をMRウィジェットに表示したり、カバレッジ履歴グラフにデータを入力したりすることはありません。カバレッジの割合を表示するには、coverageキーワードを個別に設定します。
パイプラインが完了すると、GitLabはバックグラウンドでレポートを処理し、MR差分の行にアノテーションを付けます:
- 緑: 行はテストによってカバーされています。
- 赤: 行はテストによってカバーされていません。
- オレンジ (Coberturaのみ): 行は読み込まれますが、実行されません。
アノテーションは、MR差分で変更されたファイルにのみ表示されます。MRで変更されていないファイルには、レポートにカバレッジデータが含まれていても、アノテーションは付けられません。
カバレッジの可視化を設定する
カバレッジの可視化を設定するには、artifacts:reports:coverage_reportをジョブに追加します:
test:
script:
- run tests with coverage
artifacts:
reports:
coverage_report:
coverage_format: cobertura # or jacoco
path: coverage/coverage.xml言語固有の例については、以下を参照してください:
複数のレポートを収集するには、アーティファクトパスでワイルドカードを使用します。GitLabは結果を1つのレポートにマージします。
子パイプラインからのカバレッジレポートは、MR差分のアノテーションに表示されます。
制限
| 制限 | 値 |
|---|---|
| Cobertura XMLファイルの最大サイズ | 10 MiB |
Cobertura XMLファイル内の最大<source>ノード数 | 100 |
Coberturaレポートが100個を超える<source>ノードの場合、差分表示でアノテーションが欠落したり、一致しなかったりする可能性があります。大規模なプロジェクトの場合は、レポートをより小さなファイルに分割します。詳細については、イシュー328772を参照してください。
可視化はパイプラインが完了した後にのみ表示されます。パイプラインにブロックする手動ジョブがある場合、そのジョブが実行されるまで可視化は利用できません。
ジョブ詳細ページからカバレッジレポートをダウンロードするには、それをアーティファクトpathsとreportsの両方に追加します:
artifacts:
paths:
- coverage/cobertura-coverage.xml
reports:
coverage_report:
coverage_format: cobertura
path: coverage/cobertura-coverage.xmlパスの解決
カバレッジレポートは相対ファイルパスを使用します。GitLabは、MRで変更されたファイルと照合することにより、これらを絶対リポジトリパスに解決します。
JaCoCoの場合、マッチングプロセスは次のとおりです:
- 同じパイプライン参照のすべてのMRを見つけます。
- 変更されたすべてのファイルについて、絶対パスを収集します。
- レポート内の各相対パスについて、最初の一致する絶対パスを使用します。
Coberturaの場合、GitLabは<sources>要素も使用してパスを再構築します:
- 各
<source>エントリからパスセグメントを抽出します。 - 各セグメントを、各
<class>要素のfilename属性と結合します。 - 候補パスがリポジトリに存在するかどうかを確認します。
- 最初の一致を絶対パスとして使用します。
この自動修正は、<source>パスが<CI_BUILDS_DIR>/<PROJECT_FULL_PATH>/...の形式に従っている場合にのみ機能します。
パスの解決例
C#プロジェクトで、フルパスがtest-org/test-cs-projectで、プロジェクトルートに対するこれらのファイル:
Auth/User.cs
Lib/Utils/User.csCobertura XML内のこれらのsources:
<sources>
<source>/builds/test-org/test-cs-project/Auth</source>
<source>/builds/test-org/test-cs-project/Lib/Utils</source>
</sources>パーサーはsourcesからAuthとLib/Utilsを抽出し、それぞれを各<class>要素のfilename属性と結合します。filename="User.cs"を持つクラスの場合、リポジトリ内のファイルと一致する最初の候補はAuth/User.csです。
各<class>要素に対して、パーサーは最大100回のイテレーションを試行します。一致が見つからない場合、そのクラスは最終的なカバレッジレポートに含まれません。
トラブルシューティング
カバレッジ可視化を使用する際、以下のイシューに遭遇する可能性があります。
差分アノテーションが表示されない
アノテーションは、以下の理由で表示されない場合があります:
パイプラインが完了していません。アノテーションは、パイプラインが完了した後に生成されます。パイプラインが完了するまで待ってから、MR差分をリロードしてください。
ファイルがMR差分にありません。アノテーションは、MRで変更されたファイルにのみ表示されます。レポートに他のファイルのカバレッジデータが含まれていても同様です。
レポート内のファイルパスがリポジトリパスと一致しません。パスの解決が失敗すると、アノテーションはサイレントにスキップされます。診断するには、カバレッジXMLアーティファクトをダウンロードし、
<class>要素のfilename属性を、プロジェクトルートからのリポジトリ内のファイルのパスと比較します。プロジェクトには、重複する相対パスを持つ複数のモジュールがあります。パスがモジュール全体で一意でない場合、GitLabはアノテーションがどのファイルに属するかを解決することができません。相対パスがモジュール全体で一意であることを確認してください:
src/main/java/org/acme/DemoExample.java - src/main/other-module/org/acme/DemoExample.java + src/main/other-module/org/acme/OtherDemoExample.javacoverageキーワードが設定されていません。artifacts:reports:coverage_reportはMRウィジェットに割合を表示しません。カバレッジの割合を表示するには、coverageキーワードを個別に設定します。
変更されたすべてのファイルにメトリクスが表示されない
このイシューは、同じソースブランチから新しいMRを作成し、ターゲットブランチが異なる場合に発生します。パイプラインは、以前のMRからの差分を使用し、その差分にないファイルのアノテーションは表示しません。
このイシューを修正するには、新しいMRが作成されるまで待ってから、パイプラインを再実行します。