CI/CDテストパイプライン:デプロイを遅らせずにクオリティゲートを追加する方法

Yunhao Jiao
CI/CDテストパイプライン:デプロイを遅らせずにクオリティゲートを追加する方法 カバー

CI/CDの理想はシンプルです。コードをプッシュしたら、デプロイされる。自動的に。信頼性高く。素早く。

現実はもっと複雑です。ほとんどのCI/CDパイプラインにはテストのステップが含まれていますが、そのステップがボトルネックになることが多いです。45分かかるSeleniumスイート。ランダムに失敗するフlakyなインテグレーションテスト。会議中の人間を待つ手動承認ゲート。

結果として、チームは低速なパイプラインを許容する(速度を犠牲にする)か、テストステップをスキップする(品質を犠牲にする)かの選択を迫られます。どちらも受け入れられません。

このチュートリアルでは、5分以内に実行され、テストコードのメンテナンスも不要な包括的なクオリティゲートをCI/CDパイプラインに追加する方法を説明します。

既存のCI/CDテストステップの問題点

ほとんどのCI/CDパイプラインには何らかの形のテストが含まれています。

  • ユニットテスト(高速、カバレッジは限定的)
  • インテグレーションテスト(中程度の速度、不安定になりがち)
  • E2Eテスト(低速、メンテナンスコストが高い)
  • リントおよび静的解析(高速、コードパターンに限定)

このスタック全体の実行時間は、一般的に15分から1時間以上に及びます。1日に複数回デプロイするチームにとって、これは無視できないボトルネックになります。

さらに悪いことに、カバレッジが不十分なケースも少なくありません。ユニットテストは個々の関数を検証しますが、統合バグを見逃しがちです。静的解析はコードパターンを検出しますが、振る舞いの問題は捉えられません。E2Eテストは振る舞いの問題を検出できますが、あまりにも低速で不安定なため、パイプラインを高速に保つためにスコープを縮小せざるを得ないチームが多くあります。

AIテスト品質ゲートの追加

TestSpriteは、既存のE2EテストステップをそのままAI品質ゲートに置き換えるか補完する、包括的な品質ゲートを追加します。

テスト対象:UIフロー、APIエンドポイント、セキュリティ脆弱性、エラーハンドリング、認証、クロスフィーチャーの相互作用。1ステップでフルスタックカバレッジを実現します。

実行速度:包括的なテストスイートを5分以内で完了。より広いカバレッジを持ちながら、E2E単体ステップよりも高速です。

追加方法:

オプションA:GitHub App(設定不要)

リポジトリにTestSprite GitHub Appをインストールするだけです。すべてのPRに対して、プレビューデプロイメントへのテストが自動的にトリガーされます。結果はPRのチェックとして投稿され、テストのパスがマージの条件となります。

このオプションでは、CI/CDパイプラインの設定変更は一切不要です。品質ゲートはGitHubのチェックシステムを通じて動作し、パイプラインランナーから独立しています。

オプションB:GitHub Action(カスタマイズ可能)

GitHub ActionsワークフローにTestSpriteステップを追加します。テストの実行タイミング、トリガー条件、結果のレポート方法を細かく制御できます。

このオプションは既存のパイプラインに直接統合され、ユニットテストやリントステップと並行して実行されます。

並列化による高速化

TestSpriteは、既存のCIステップと順番に実行されるのではなく、並列で実行されます。ユニットテストの実行中に、TestSpriteはプレビューデプロイメントを独立してテストします。TestSpriteのステップによってパイプライン全体の時間が延びることはなく、並行して実行されます。

TestSprite導入後の一般的なパイプラインタイムライン:

  • 0:00 — パイプライン開始。ユニットテストとリントが開始。TestSpriteがプレビューデプロイメントのテストを開始。
  • 2:00 — ユニットテストとリントが完了。
  • 4:30 — TestSpriteのテストが完了。結果が投稿。
  • 5:00 — すべてのチェックがグリーン。PRのレビュー準備完了。

追加の遅延はゼロ。合計実行時間を延ばすことなく、包括的なテストがパイプラインに追加されます。

TestSpriteの無料プランには、GitHub AppとGitHub Actions連携の両方が含まれています。数分でセットアップが完了し、すべてのPRで自動的に実行されます。

TestSpriteを無料で試す →