CI/CD パイプラインとは
CI/CD パイプラインとは
企業は、競争が激化するアプリケーション市場において、ソフトウェアの更新、バグ修正、新しいイノベーションへの対応を迫られています。ソフトウェアチームと運用チームは、事業運営に影響を与えることなく、ユーザーのフィードバックに対応し、問題を解決し、更新プログラムをデプロイするために団結して取り組む必要があります。従来のソフトウェア開発サイクル、特にシーケンシャルウォーターフォールモデルに基づく開発サイクルでは、近年のソフトウェアデリバリーのペースに追いつくのに苦労しています。ソフトウェア開発ライフサイクルがよりコンパクトになるにつれて、開発チームは正確で高品質で安全なコードを効率的に作成するために CI/CD に目を向けています。
CI/CD とは継続的インテグレーションと継続的デリバリーを略したものです。CD は継続的デプロイを意味する場合もあります。
- 継続的インテグレーションにより、コードの安定性を損なうことなく、複数の開発者が同時にコードの作業とマージを行うことができます。
- 継続的デリバリーは、承認を得たうえでのリリースに向けてソフトウェアをテスト、検証、準備するための自動化されたワークフローです。
- 継続的デプロイメントは継続的デリバリーに似ていますが、承認が事前設定されたルールによって自動化される点が異なります。
CI/CD を組み合わせると、以前は手動で行われていたすべてのプロセスを自動化するパイプラインとして実装できます。CI/CD パイプラインの仕組みをよりよく理解するには、以下の図を参照してください。
CI/CD パイプラインの各ステージは、ソフトウェア開発プロセス内の特定のアクティビティで構成されています。ソフトウェアのビルドが次のステージに進む前に、コードの品質、脆弱性、その他の技術的な問題を検証する自動テストが行われることが特徴です。これにより、開発チームはコードの問題を早期に特定して修正できるため、企業は時間、リソース、コストを大幅に節約できます。
CI/CD パイプラインの設定は簡単に思えます。ただし、CI/CD ワークフローを実装する場合、特にオンプレミスのセットアップでは、企業が課題に直面することがよくあります。たとえば、企業が多数のアプリケーション、ツール、およびチームメンバーを管理する必要がある場合、インフラストラクチャのボトルネックが発生します。対処しないままにしておくと、開発者はコード自体に取り組むよりもパイプラインの修正により多くの時間を費やすことになります。
CI/CD ワークフローを AWS クラウドに移行することで、チームは最新のソフトウェア開発ワークロードをスケールし、変更をより効果的に伝え、リソースをより効率的に管理できるようになります。たとえば、Duolingo は CI/CD パイプラインを AWS EC2 Mac に移行し、高度な自動スケーリング戦略を実装しました。その結果、ビルド時間が 50 分からわずか 16 分に短縮されました。
CI/CD パイプラインを確立する方法
AWS では、マネージドサービスおよび自動サービスにより、CI/CD の実装がより簡単で、自動的かつ安全に実施できます。開発ツール、サーバー、リソースの手動プロビジョニングをせずに、チームはユーザーのリクエストへの対応やソフトウェアリリースプロセスの戦略立案など、重要度の高いアクティビティに集中できます。
初めに、DevOps チームが CI/CD パイプラインを設定することで、AWS CloudFormation でクラウドリソースを自動的にデプロイすることができます。まず、必要なリソースをテンプレートに記述するか、作成済みのテンプレートを使用します。CloudFormation がリソースをプロビジョニングし、これらが一緒になって CI/CD をサポートする基盤環境が形成されます。次に、次のように AWS クラウドに CI/CD パイプラインステージを実装できます。
ソース
ソースステージは、開発者が行ったバージョン変更を追跡します。開発者は、共有の中央リポジトリからローカルマシンに元のコードのバージョンをコピーします。次に、変更されたコードを編集、コンパイル、テストし、リポジトリとマージします。
チームは次の方法で、AWS ツールでコードを変更および管理します。
ステップ 1 - IDE でコードを作成する
開発者は、一般的なプログラミング言語をサポートするクラウドベースの統合開発環境 (IDE) である AWS Cloud9 を使用して、新しいコードを作成したり、既存のコードを編集したりできます。Cloud9 を使用すると、インターネットにアクセスできる限り、Web ブラウザでソースコードを記述、実行、およびデバッグできます。また、サードパーティ製 IDE をインストールする場合は、Software Development Kit (SDK) をダウンロードすることで、Java、Python、JavaScript などのさまざまな言語でコードを作成することもできます。SDK を使用すると、お好みのコーディング環境からアプリケーションプログラミングインターフェイス (API) を介して AWS リソースとライブラリにアクセスできます。
ステップ 2 - コードを中央リポジトリにコミットする
開発者は GitHub などのサードパーティ製ツールを利用して、プライベートコードリポジトリの作成、プルリクエストの管理、変更のマージを行います。これはバージョン管理システムとして機能し、他の開発者がコミットした変更を追跡し、必要に応じて以前の機能的なソースコードに戻すことができます。
ビルドとテスト
ビルドステージでは、中央リポジトリに保存されているコードがビルドサーバーに送信されます。ビルドサーバーはソースコードと依存関係をアーティファクトと呼ばれるソフトウェアファイルに変換し、開発者はそれを後続のステージで実行できます。たとえば、Java プログラムをビルドする場合、JAR ファイルまたは WAR ファイルが作成されます。このステージでは、ユニットコード分析や静的コード分析など、いくつかの予備テストを実行できます。
- ユニットテストは、個々のソフトウェア機能が正しい結果を生成することを確認します。
- 静的コード分析は、ソースコードをチェックして、バグ、セキュリティの脆弱性、およびコーディング標準への準拠を識別します。
コードがいずれかのテストに失敗した場合、開発者はコードを以前の状態に戻して問題を解決します。
従来、ソフトウェアチームはアプリケーションをパッケージ化するために独自のビルドサーバーをセットアップする必要がありました。さらに、テストスクリプトを手動で作成して検証し、イテレーションして結果を監視する必要がありました。現在は、AWS CodeBuild を使用して CI/CD ビルドのワークフローをスピードアップすることができます。これを使用すると、チームは、変更を加えた際のソフトウェアのビルドとテストを自動化できます。指定されたリポジトリからソースコードを検索し、設定したビルドスクリプトを実行します。
AWS CodeBuild は、ビルドワークロードに合わせてコンピューティング容量を自動的にスケールします。これにより、以前のビルドが完了するのを待つことなく、新しいビルドを開始できます。ソフトウェアチームは、コードの問題を早いステージで特定し、複雑になる前に解決できます。
たとえば、Node.js プロジェクトをビルドする場合、Jasmine または Jest のテストフレームワークを AWS CodeBuild と統合できます。これらのフレームワークにより、テストケースを簡単に作成し、期待される結果を指定し、ビルド実行中に検証することができます。
テストステージはビルド直後に行われます。アプリケーションをより厳密なテストにかけるように設計されているため、ソフトウェアチームはコードの品質、パフォーマンス、セキュリティ、その他の重要な側面を強化できます。CI/CD パイプラインを使用すると、テストが自動化され、複数の領域に拡張されます。
- 統合テストでは、アプリケーションが使用するすべてのサービスとサードパーティコンポーネントが相互に正しく連携していることを確認します。
- 機能テストでは、エンドユーザーの視点からアプリケーションを包括的に評価します。
- セキュリティテストでは、アプリケーションにセキュリティリスクや脆弱性がないか調べます。
- パフォーマンステストでは、突然のトラフィックの急増など、極端な状況や予期しない状況が発生した場合でも、アプリケーションの応答性と機能が維持されることを確認します。
繰り返しになりますが、アプリケーションは次のステージに進む前に、指定されたすべてのテストに合格する必要があります。
ステージング
ステージングにより、アプリケーションをエンドユーザーにリリースする前に、最終チェックを行うことができます。このステージでは、ソフトウェアチームは実際の実装を模倣した環境にアプリケーションをデプロイします。多くの場合、リリース前に検出されない問題を見つけることを目的として、模擬データを使用してエンドユーザーのグループを登録しアプリケーションをテストします。
たとえば、アプリケーションを更新したときに、そのアプリケーションがユーザー操作でどのように動作するかを確認したいとします。ステージング環境にデプロイすると、業務を中断することなくソフトウェアのパフォーマンスを評価できます。すべてのテスト条件を満たした後、ソフトウェアチームはアプリケーションを本番環境にデプロイし、エンドユーザーがアクセスできるようにします。
クロス環境デプロイは、特にチームが手動で行う場合は難しい場合があります。AWS CodeDeploy ではアプリケーションのデプロイ作業を簡素化できます。さまざまな環境へのアプリケーションのデプロイを自動化します。デプロイアクティビティを表示したり、変更を追跡したり、必要に応じて以前のバージョンにロールバックしたりできます。また、ステージングと本番環境の間のギャップを補います。たとえば、本番リリースのステージングに使用するのとまったく同じデプロイ手順を使用できます。
本番環境
本番環境は、実際のユーザーがアプリケーションにアクセスするライブ環境です。変更を修正、テスト、検証した後、ソフトウェアチームは更新されたアプリケーションを本番環境でリリースします。この作業は CI/CD パイプラインの終了を意味しますが、アプリケーションがパフォーマンス、セキュリティ、およびビジネス要件を満たしていることを確認するための取り組みは続きます。そのため、本番環境で動作しているアプリケーションを継続的に監視する必要があります。
Amazon CloudWatch は、開発チームと運用チームが AWS、オンプレミス、またはその他のクラウド環境にデプロイするアプリケーションを可視化するサービスです。運用データを自動的に収集して視覚化するため、実際の環境でアプリケーションがどのように動作するかをより深く理解できます。さらに、アラートを設定して、チームからの迅速な対応が必要なイベントの通知を受けることができます。
CI/CD パイプラインを自動化する方法
さまざまなプロバイダーが提供する CI/CD ツールを効率化することは、特に手作業による大規模なセットアップを伴う場合は難しいことがあります。ただし、AWS CodePipeline を使用すると、柔軟性を維持しながら、コードリリースプロセス全体を自動化、スケール、および加速できます。
AWS CodePipeline では、グラフィカルユーザーインターフェイスを使用して CI/CD ワークフローをモデル化できます。AWS サービスをパイプラインに簡単に統合したり、使用している既存のツールやリソースに接続したりできます。たとえば、Jenkins をビルドサーバーとして使用する場合は、Jenkins を AWS CodePipeline と統合できます。
以下に、その手順を要約します。
- Jenkins と Jenkins 用の AWS CodePipeline プラグインをインストールします。
- 次に、Jenkins 用の AWS Identity and Access Management (IAM) を使用してアクセス権限を設定します。これにより、Jenkins は許可された認証情報を使用して AWS CodePipeline とやり取りすることができます。
- AWS CodePipeline コンソールにログインし、カスタムパイプラインを作成します。
- パイプラインを GitHub などの共有ソースコードリポジトリに接続します。
- 次に、ビルドステージを追加し、ビルドサーバーとして Jenkins を選択します。
- 必要なテストアクションやビルドトリガーなど、必要なテストステージを追加します。
- 次に、デプロイステージを AWS CodeDeploy または別のデプロイサービスに接続します。
AWS での CI/CD パイプラインニーズのサポート
CI/CD パイプラインを使用すると、企業はソフトウェアの品質やセキュリティを損なうことなく、アプリケーションのアップデートをより迅速に作成、テスト、リリースすることができます。ソフトウェア開発チームは、自動化された CI/CD ツールを使用して、コードの修正、変更のマージ、テストの自動化、デプロイのスケジュール設定などを行います。ただし、一部のチームでは、インフラストラクチャ、リソース、プロセスの制限により、CI/CD ワークフローのスケーリングで課題に直面する場合があります。
AWS は、CI/CD パイプラインを作成、合理化、スケールするためのクラウドベースのソリューションスイートを提供しています。
- AWS CloudFormation は、CI/CD ツールが実行されるリソースをプロビジョニングします。
- AWS Cloud9 では、開発者はブラウザからコードを書いたり、実行したり、デバッグしたりできます。
- AWS CodeBuild では、独自のビルドサーバーを管理しなくても、アプリケーションをコンパイル、テスト、およびパックできます。
- AWS CodeDeploy は、オンプレミスインスタンスや AWS インスタンスを含むあらゆる環境へのデプロイを自動化します。
- AWS CodePipeline では、ソースから本番環境まで、CI/CD ワークフロー全体をモデル化できます。
- AWS CloudWatch を使用すると、運用チームはデプロイされたアプリケーションを継続的に監視、ログ、分析できます。
CI/CD パイプラインの設定についてさらにサポートが必要な場合は、Amazon プロフェッショナルサービスにお問い合わせください。