継続的インテグレーションと継続的デリバリー/デプロイとは
このセクションでは、継続的インテグレーションと継続的デリバリーの実践方法、そして継続的デリバリーと継続的デプロイの違いについて説明します。
継続的インテグレーション
継続的インテグレーション (CI) とは、デベロッパーが定期的にコードに対する変更をセントラルリポジトリにマージし、その後自動化されたビルドとテストが実行されるソフトウェア開発手法です。CI は、ほとんどの場合ソフトウェアリリースプロセスのビルドまたはインテグレーションステージを指し、オートメーション要素 (CI やビルドサービスなど) と文化的要素 (頻繁に統合することを学ぶなど) の両方を必要とします。CI の主な目標は、バグを早期に発見して対処し、ソフトウェアの品質を向上し、新しいソフトウェアアップデートの検証とリリースにかかる時間を短縮することです。
継続的インテグレーションでは、より小さなコミットと、統合するためのより小さなコードの変更に焦点を当てます。デベロッパーは、定期的な間隔で、少なくとも 1 日に 1 回コードをコミットします。デベロッパーは、コードリポジトリからコードをプルし、ビルドサーバーにプッシュする前に、ローカルホスト上でコードがマージできることを確認します。このステージでは、ビルドサーバーで様々なテストを実行し、コードのコミットを許可または拒否します。
CI を実装する際の基本的な課題には、共通のコードベースへのより頻繁なコミット、単一のソースコードリポジトリの維持、ビルドの自動化、テストの自動化などがあります。さらに、本稼働環境に類似した環境でのテスト、チームへのプロセスの可視性の提供、デベロッパーがアプリケーションのすべてのバージョンを容易に取得できるようにすることなどの課題があります。
継続的デリバリーおよびデプロイ
継続的デリバリー (CD) とは、コードの変更によって自動的なビルド、テスト、本稼働環境へのリリースの準備を実施するソフトウェア開発のプラクティスです。ビルドステージが完了した後でテスト環境または本稼働環境、あるいはその両方にすべてのコード変更をデプロイすることで、継続的インテグレーションを拡張します。継続的デリバリーは、ワークフロープロセスを使用して完全に自動化するか、重要なポイントで手動ステップを使用して部分的に自動化することができます。継続的デリバリーが適切に実装されている場合、デベロッパーは、標準化されたテストプロセスをパスしたデプロイ可能なビルドアーティファクトを常に手元に持つことになります。
継続的デプロイを使用すると、デベロッパーからの明示的な承認なしでリビジョンが本稼働環境にデプロイされ、ソフトウェアリリースプロセス全体が自動化されます。これにより、製品ライフサイクルの早い段階で継続的なフィードバックループを実現することができます。
継続的デリバリーは継続的デプロイとは異なる
継続的デリバリーに関する誤解の 1 つとして、コミットされたすべての変更が自動テストをパスした直後に本稼働環境に適用されるということがあります。しかし、継続的デリバリーの主眼は、すべての変更を即座に本稼働環境に適用することではなく、すべての変更を本稼働環境に適用する準備が整った状態にすることです。
本稼働環境に変更をデプロイする前に、本番デプロイを承認し、監査することを保証する意思決定プロセスを実装します。この決定は人が行い、その後ツールを使用して実行することができます。
継続的デリバリーを使用することで、稼働の決定はビジネス上の決定となり、技術的な決定ではなくなります。技術的な検証はコミットごとに行われます。
本稼働環境への変更のロールアウトは、破壊的なイベントではありません。デプロイは、技術チームが次の一連の変更作業を中断することなく、プロジェクト計画、引き渡しドキュメント、またはメンテナンスウィンドウも必要としません。デプロイは、テスト環境で複数回実行され、検証される反復可能なプロセスになります。