CI/CDパイプラインは、簡単に言えば、DevOpsチームがソフトウェアのデリバリープロセスを自動化するためのワークフローです。CI/CD (継続的インテグレーション/継続的デリバリー)は、開発チームがコード変更をより高い頻度と信頼性で行えるようにするためのソフトウェア開発手法です。CI/CDは、自動化を活用した2つの相補的なプラクティスで構成されます。
継続的インテグレーションプロセスでは、開発チームの各メンバーが頻繁にアプリケーションコードの一部を変更し、共有リポジトリにマージします。最近のアプリケーションは、さまざまなツールとプラットフォームで開発された多数の要素で構成されるため、コードを変更するたびに、その部分がアプリケーション全体に悪影響を及ぼさないように検証し、統合することが不可欠です。継続的インテグレーションでは、チームメンバーがバージョン管理システムに変更をコミットするたびに、コードが自動的にビルド、パッケージ化、テストされます。これにより、コード変更の頻繁なコミットが容易になるため、運用との連携が強化され、アプリケーションの品質向上につながります。
継続的デリバリーでは、ワークフローエンジンによって、バグ検出のためのテストやステージングリポジトリへのコード変更のアップロードなどのプロセスが自動的に開始されます。
CI/CDプロセスは、デプロイプロセスの効率と予測可能性を高めるために重要です。また、ソフトウェア開発プロセスに一貫性と信頼性をもたらし、それが開発チームと運用チーム間の連携強化、コストの削減、アプリケーションの品質向上につながります。
この記事では、CI/CDパイプラインプロセスの概要、CI/CDのメリット、ベストプラクティス、CI/CDを導入して開発ライフサイクルを向上させ、組織全体のメリットにつなげる方法について説明します。
DevOpsは、ITデリバリーのためのアプローチであり、人、手法、ツールを連携させることで、開発チームと運用チームのサイロ化を解消します。DevOpsを導入すれば、ソフトウェア開発(アプリケーションコードの作成)とIT運用(アプリケーションの本稼動、エンドユーザーへの提供、保守)のギャップを埋めることができます。他にも、ITインフラ管理での要求にすばやく対応できるようにすることで、デプロイとアップデートの頻度を増やして、アプリケーションやサービスの開発を加速させ、業界内での競争力を維持できます。
DevOpsが注目される要因の1つが、アジャイル開発の導入が進んだことです。アジャイル開発ではアプリケーションの開発とコードのアップデートをより頻繁に行いますが、従来のプロセスではテストとデプロイに時間がかかってラピッド開発の利点が台無しになるという重大な問題がありました。アジャイルの原則の適用範囲をソフトウェア開発ライフサイクル(SDLC)全体に拡大するDevOpsなら、継続的な改善を目標としてワークフロー全体を最適化できます。DevOpsがうまく機能すると、コードのイテレーションとデプロイを加速するだけでなく、新しいアイデアを市場に投入するまでの時間を短縮し、バグを低減して、インフラの安定性を向上させることができます。
CI/CDはDevOpsの基盤となるプロセスです。開発者は、新しいコードをメインのソースコードに定期的に(通常は1日1回)統合します。新しいコードを中央の共有リポジトリにチェックインすると、自動ビルドプロセスによって変更内容がテスト、検証されます。そこで問題が検出されると、開発者にただちにフィードバックされるため、必要な修正を加えることができます。
CI/CDパイプラインは基本的に、DevOpsチームがソフトウェアのデリバリープロセスを自動化するための道筋を提供するワークフローです。自動化パイプラインがない場合、チームメンバーはワークフローを各自手動で実行する必要があるため、時間がかかり、ミスも発生しやすくなります。CI/CDパイプラインを構築すれば、人的ミスを排除し、開発者のフィードバックループを標準化して、イテレーションのスピードを向上させることができます。
CI/CDの前身となったモデルに、アプリケーションリリースの自動化(ARA)と自動リリース管理(ARM)があります。どちらも「リリース自動化」の作業カテゴリに分類され、自動プロセスの進化の過程で生まれ、この分野の流れを象徴しています。
CI/CDパイプラインの手法や導入方法に標準はなく、パイプライン構築に使用するツールやサービスはDevOpsチームによってさまざまですが、一般的にパイプラインには以下のステージが含まれます。
開発者が、GitHubなどの中央リポジトリに保存されたアプリケーションのソースコードをチェックアウトし、ローカルの開発環境で作業を行います。新しいブランチを作成し、機能実装やバグ修正を行って、ローカル環境でテストを実施してから、ソースリポジトリにコミットします。
ソースリポジトリに新しいコードをコミットすると、ビルドステージが開始されます。このステージでは、ブランチのコードが集められ、コンパイルされて、実行可能なリリースインスタンスが構築されます。開発者は、担当するリリースを1日に何度でもビルドし、テストして、コード内のエラーを検出できます。ビルドが失敗したときやその他の問題が発生したときはアラートが送られるため、問題をただちに修正できます。すべてのエラーが解消されたら、次のステージに進みます。
ビルドでは複数のテストが実行され、コードが正しく動作するかどうかが検証されます。一般的なテストには、アプリケーションを構成するコードを小さい単位で個別にテストする単体テストと、本番環境へのデプロイ前にユーザーがアプリケーションをテストして他に変更が必要ないかどうかを判断するユーザー受け入れテスト(UAT)があります。負荷テスト、セキュリティテスト、その他の継続的なテストをこのステージで行うこともあります。
本番環境へのリリース準備ができたアプリケーションのデプロイには、さまざまな方法があります。どれを選択すべきかは、アプリケーションのタイプ、変更の規模、ターゲット環境などの要因によって変わります。クラウドアプリケーション向けの最新のデプロイアプローチには以下のものがあります。
パイプラインのどのステージでも、エラーが発生したときは開発チームにアラートが送られるため、問題にすばやく対処できます。修正したコードは再びパイプラインに送られるため、エラーをすべて解消した状態でコードを本番環境にデプロイできます。
継続的デプロイと継続的デリバリーはどちらも「CD」と略記され、同じものに思えるかもしれませんが、異なるプラクティスです。
継続的デプロイは、変更したコードを本番環境へ自動的にリリースするデプロイプロセスです。CI/CDパイプラインの中では、変更したコードが統合され、承認を受けた後で実行されます。変更したコードに対して一連の自動テストが実行され、すべてに合格すると、ユーザーにただちにプッシュされます。
継続的デリバリーは、新しいビルドを自動QAテスト環境に自動的にプッシュしてバグなどの問題がないかを検証して合格すると、デプロイの承認を人が行い、エンドユーザーに自動的にプッシュするデリバリープロセスです。この最終ステージで人が介入することなくデプロイまで行うプロセスを、継続的デプロイと呼びます。
継続的デプロイではCI/CDのアジリティとスピードが向上しますが、最終テストからユーザーへのリリースの間に人の介在がない点にリスクがあります。そのため、機密データのセキュリティ、規制コンプライアンス、大きな経済的利害が関わるソフトウェアには適しません。
CI/CDを導入すれば、ソフトウェア開発を自動化、効率化して、アプリケーションやサービスをより短期間で頻繁にリリースできます。CI/CDで特に重要な役割を果たすのが自動化で、テスト、フィードバック、コード修正、デプロイの迅速化に大きく貢献します。
CI/CDプラクティスの導入にはさまざまなメリットがあります。
CI/CDパイプラインのオーケストレーションと実践方法に決まりはありませんが、以下の基本的なガイドラインに従えば、よくある問題に対処し、自社にとって効果的なパイプラインを維持できます。
CI/CDプロセスを導入する上で覚えておくべきポイントがいくつかあります。
アマゾン ウェブ サービス(AWS)とGoogle Cloud Platform (GCP)は、DevOps-as-a-Service (DaaS)プラットフォームとしても人気があります。どちらにも独自のメリットとデメリットがあります。
AWSは一般的に高速で、DevOpsのクラウド移行と運用が容易であり、便利な従量課金モデルを利用できます。GCPはアプリケーションライフサイクルのパイプラインで利用できるツールが充実していて、Stackdriver Monitoring、Stackdriver Debugger、Stackdriver Logging、Security Scannerサービス(App Engine)などが用意されています。
どちらもDevOpsソリューションとしては十分な機能を備えているため、選択のポイントとなるのは価格と運用面でしょう。
開発ツールチェーンに追加するCI/CDツールを選定するときに考慮すべきことがいくつかあります。
まず、オープンソースのツールを使用するか、商用のツール(コードのデリバリー)を使用するか、または独自のツールを開発するかを検討します。オープンソースツールを使用する場合はコストを節約できますが、ツール自体のコードが大幅に変更されたり開発が中止されたりするリスクがあります。また、多くの場合は最小限のサポートしか提供されません。一方、商用ツールを使用する場合は、通常、サポートが充実し、アップデートも定期的に行われますが、コストがかかり、統合の柔軟性に欠けます。独自に開発する場合は、組織のニーズに合ったツールを構築できますが、多くのリソースが必要になります。
もう1つの考慮事項はホスティングモデルです。コードベースをオンプレミスに残す必要がある場合は、オンプレミスのサーバーまたは仮想インフラに導入できるツールチェーンが必要です。しかし、多くのCI/CDツールはクラウドとクラウドネイティブインフラで使用することを想定しています。この場合、ベンダーのクラウドインフラで運用されるSaaS (Software-as-a-Service)モデルの一部としてCI/CD環境が提供されるため、組織側は運用コストをかなり軽減できます。
さらに、上記のどのオプションを選択する場合でも、関連コストを考慮する必要があります。オープンソースツールは導入コストを節約できますが、組織のインフラでのツールの設定やサポートにコストがかかり、開発者が使い方を覚えるまで生産性が多少低下します。商用の汎用的なツールやSaaSツールでは、一般的に、従量課金が採用されています。
組織に最適なオプションの選択は、最終的に、通常のビルド件数、ビルドの同時実行が必要かどうか、ツールを利用するユーザー数によって決まるでしょう。
ソフトウェアのリリース頻度は市場での大きな差別化要因です。成功している企業は1日あたり50~100件のデプロイを行い、Netflix社のような巨大企業になると1,000件にも及びます。効果的なCI/CDパイプラインを導入すれば、生産性、信頼性、スピードを向上させてこうした数字を達成し、必要とされるアプリケーションを適時に提供して、変化の激しいビジネスニーズに対応できます。逆に、CI/CDプラクティスを実践しないと、市場で取り残されるリスクがあります。ソフトウェア開発プロセスの転換は容易でなく時間もかかりますが、それだけの価値はあり、今後数年間の競争力維持に欠かせません。
このブログはこちらの英語ブログの翻訳です。
この記事について誤りがある場合やご提案がございましたら、ssg-blogs@splunk.comまでメールでお知らせください。
この記事は必ずしもSplunkの姿勢、戦略、見解を代弁するものではなく、いただいたご連絡に必ず返信をさせていただくものではございません。
Splunkプラットフォームは、データを行動へとつなげる際に立ちはだかる障壁を取り除いて、オブザーバビリティチーム、IT運用チーム、セキュリティチームの能力を引き出し、組織のセキュリティ、レジリエンス(回復力)、イノベーションを強化します。
Splunkは、2003年に設立され、世界の21の地域で事業を展開し、7,500人以上の従業員が働くグローバル企業です。取得した特許数は1,020を超え、あらゆる環境間でデータを共有できるオープンで拡張性の高いプラットフォームを提供しています。Splunkプラットフォームを使用すれば、組織内のすべてのサービス間通信やビジネスプロセスをエンドツーエンドで可視化し、コンテキストに基づいて状況を把握できます。Splunkなら、強力なデータ基盤の構築が可能です。