エンドツーエンドパイプラインモニタリング

E2Eモニタリングツールと実践の概要

エンドツーエンド(E2E)テストパイプライン

テストパイプラインはスケジュールに基づいて実行され、その結果はSlackに投稿されます。以下は毎日モニタリングされているエンドツーエンドテストパイプラインです。

環境リンクテスト種類頻度Slackチャンネル最新テストレポート
本番パイプライン | 定義スモークカナリアへの各デプロイ後#e2e-run-production本番サニティ
カナリアパイプライン | 定義 | Chatopsスモークカナリアへの各デプロイ後および本番でフィーチャーフラグがtrueまたは*100%*に更新された後#e2e-run-productionカナリアサニティ
ステージングパイプライン | 定義スモークステージングカナリアへの各デプロイ後#e2e-run-stagingステージングサニティ
-パイプライン | 定義スモークステージングでのデプロイ後マイグレーション実行後#e2e-run-stagingステージングサニティ
ステージングカナリアパイプライン | 定義スモークステージングカナリアへの各デプロイ後#e2e-run-stagingステージングカナリアサニティ
-パイプライン | 定義 | Chatopsフルステージングカナリアへの各デプロイ後およびステージングでフィーチャーフラグがtrueまたは*100%*に更新された後#e2e-run-stagingステージングカナリアフル
CustomersDotステージングパイプライン | 定義フルCustomersDotステージングへの各デプロイ後#e2e-run-staging #s_fulfillment_statusCustomersDotステージング
CustomersDot本番パイプライン | 定義スモークCustomersDot本番への各デプロイ後#e2e-run-production #s_fulfillment_statusN/A
プレプロパイプライン | 定義スモークリリースの数日前の毎月03:00 UTCおよび、セキュリティとパッチリリース中にpreprodへのデプロイ後#e2e-run-preprodプレプロ
リリースパイプライン | 定義スモーク最終リリース後の毎月および、セキュリティとパッチリリース中にリリースへのデプロイ後#e2e-run-releaseリリース
GitLab master e2e:test-on-omnibus-eeパイプライン | 定義フル2時間ごとにスケジュールされたパイプライン#e2e-run-masterMaster EE
GitLab master e2e:test-on-omnibus-ceパイプライン | 定義フル毎日4:00am UTC#e2e-run-masterMaster CE
GitLab master e2e:test-on-gdkパイプライン | 定義フル2時間ごとにスケジュールされたパイプライン#e2e-run-masterMaster GDK
GitLab master e2e:test-on-cngパイプライン | 定義スモーク2時間ごとにスケジュールされたパイプライン#e2e-run-masterMaster CNG
GitLab master ナイトリーパイプライン | 定義フル毎日4:00am UTC#e2e-run-masterMaster ナイトリー

NOTE: エンドツーエンドテストとパイプラインの失敗を調査する方法については、失敗するテストとテストパイプラインのデバッグをご確認ください。

ビジュアルパイプライン環境マップ

E2Eテストパイプライン環境マップ

この図は、エンドツーエンドテストパイプラインがインフラストラクチャの様々な環境にどのようにマッピングされるかを視覚的に示しています。マージリクエスト、開発、ステージング、プレプロ、本番環境でのテストのフローを示し、テストがいつトリガーされるか(コミット時、デプロイ後、設定変更後など)と各環境でどの種類のテストが実行されるか(スモーク、フルなど)を示しています。

カラーコーディングはテストの種類と環境カテゴリを示しており、デプロイパイプライン全体にわたる包括的なテスト戦略を理解しやすくしています。この視覚化はインフラストラクチャ計画に特に価値があります。元のLucidChartダイアグラムにはCellsバージョンも含まれており、どのように見えるかを視覚化できます。

テストメトリクス

テストの健全性を可視化するために、テスト実行結果を以下にエクスポートしています。

テストレポート

Allureレポート

テスト結果を提示するもう一つのツールとして、Allureテストレポートがあります。パイプラインで実行されたテストはAllureレポートを生成します。QAフレームワークはAllure RSpec gemを使用してAllureテストレポートのソースファイルを生成します。パイプラインの追加ジョブが以下を行います。

  • すべてのテストジョブからこれらのソースファイルを取得します。
  • レポートを生成し、AWSグループプロジェクトeng-quality-ops-ci-cd-shared-infraにあるS3バケットgitlab-qa-allure-reportにアップロードします。

各種類のスケジュールされたパイプラインは、その段階に応じた最新のテストレポートへの静的リンクを生成します。

環境説明リンク
master (gdk)Dockerコンテナにパッケージされたgitlab-development-kit環境に対するE2Eテスト実行。e2e-test-on-gdk
master (test-on-omnibus)omnibusイメージの様々な設定に対するE2Eテスト実行。e2e-test-on-omnibus
nightlyomnibusナイトリーイメージの様々な設定に対するE2Eテスト実行。nightly
staging-fullhttps://staging.gitlab.com環境に対するE2Eテスト実行。staging-full
staging-sanityomnibusナイトリーイメージの様々な設定に対するE2Eテスト実行。staging-sanity
staging-ref-fullhttps://staging-ref.gitlab.com環境に対するE2Eテスト実行。staging-ref-full
staging-ref-sanityhttps://staging-ref.gitlab.com環境に対するE2Eテスト実行。staging-ref-sanity
preprodhttps://pre.gitlab.com環境に対するE2Eテスト実行。preprod-sanity
production-fullhttps://gitlab.com環境に対するE2Eテスト実行。production-full
production-sanityhttps://gitlab.com環境に対するE2Eテスト実行。production-sanity

これらのレポートはSlackのパイプラインステータスアラートにも含まれます。

テストセッションIssue

テストが実行される様々な環境について、自動テストを行う各エンドツーエンドパイプラインに対して、テストセッション情報を含むテストセッションIssueを作成します。テストセッションIssueはDevOpsステージでテスト結果をグループ化し、テストケースおよびテスト失敗Issueにリンクします。

テストセッションIssueの例: https://gitlab.com/gitlab-org/quality/testcase-sessions/-/issues/72516

テストセッションIssueはGitLab機能の欠落に対する回避策です。GitLabがテストデータを保存するようになれば、失敗のレポートと管理を改善できます。

テスト結果Issue

各テストはGitLab テストケースに関連付けられています。

  RSpec.describe 'Stage' do
    describe 'General description of the feature under test' do
      it 'test name', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/:test_case_id' do
        ...
      end

      it 'another test', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/:another_test_case_id' do
        ...
      end
    end
  end

テスト失敗スタックトレースとIssueスタックトレースが比較され、スタックトレースが(15%の差異しきい値以内で)テスト失敗に最も似ている既存のIssueが使用されます。テスト失敗ジョブは、IssueのFailureレポートリストに追加されます。グループラベルはテストのproduct_groupメタデータに基づいて自動的に推定されます。