Jump to section

CI/CD とは

URL をコピー

CI/CDとは、「Continuous Integration/Continuous Delivery」の略であり、日本語では継続的インティグレーション/継続的デリバリーと呼ばれています。CI/CD は、アプリケーション開発の各ステージに自動化を導入し、顧客にアプリケーションを頻繁に提供できるようにする手法です。CI/CD は、新規コードの統合によって開発チームや運用チームに生じる問題 (すなわち「インテグレーション地獄 (integration hell)」) を解決します。

CI/CD の具体的なメリットとして、CI/CD によって、統合およびテストのフェーズからデリバリー、デプロイメントに至る、アプリケーションのライフサイクル全体を通じて、継続的な自動化と継続的な監視が導入されます。これらの連結した一連のステップはまとめて「CI/CD パイプライン」と呼ばれ、DevOps または SRE (サイト信頼性エンジニアリング) のいずれかのアプローチを使用してアジャイルな方法で共同作業する開発チームと運用チームが実施します。

CI/CD パイプラインの運用方法 (動画)

現代のアプリケーション開発では、複数の開発者が同じアプリケーションに対して同時に作業でき、それぞれが別の機能の開発を行えることを目標としています。しかし、組織ですべてのソースコードのブランチを 1 日 (いわゆる「マージ日」) でマージするよう計画されている場合は、その作業は膨大になり、追加の手動の作業と時間が発生します。開発者が孤立した状態で作業してアプリケーションに変更を加えた場合に、同時に他の開発者が行った別の変更と競合する可能性があるからです。また、チーム全員が 1 つのクラウドベースの統合開発環境 (IDE) を使うのではなく、各人がローカルで IDE をカスタマイズして使用している場合、この問題はさらに大きくなります。

これとは対照的に、継続的インテグレーション (CI) では「トランク」と呼ばれる共有ブランチに開発者が各自のコード変更を頻繁にマージでき、日次ベースのマージも可能です。開発者による変更がアプリケーションにマージされると、アプリケーションのビルド、さまざまなレベルのテスト (通常は単体テストと統合テスト) が自動的に実行され、変更の検証が行われます。これらのテストでは、変更によるアプリケーションの破損がないことを確認します。つまり、クラスや関数から各種モジュールまで、アプリケーション全体を構成するすべてのテストが行われます。これらの自動化されるテストで新規コードと既存コード間に競合が見つかった場合も、CI プロセスではバグを簡単に、迅速に、高頻度で修復できます。

CI でのビルドと単体テストおよび統合テストの自動化の後、継続的デリバリーは検証されたコードのリポジトリへのリリースを自動化します。効果的な継続的デリバリープロセスを実施するには、CI が開発パイプラインに組み込まれている必要があります。継続的デリバリーの目標は、コードベースを常に本番環境にデプロイできる状態にしておくことにあります。

継続的デリバリーでは、コード変更のマージから本番環境用ビルドのデリバリーまでのすべてのステージで、テストの自動化とコードリリースの自動化が実施されます。このプロセスの終了時に、運用チームはアプリケーションを本番環境にすばやく簡単にデプロイできるようになります。

成熟した CI/CD パイプラインの最終ステージには、継続的デプロイメントが来ます。継続的デプロイメントでは、継続的デリバリー (本番環境用ビルドをコードリポジトリへ自動的にリリースするプロセス) の延長として、アプリケーションを本番環境に自動的にリリースします。本番環境への移行前のパイプラインのこのステージでは手動チェックは発生しないため、継続的デプロイメントの成功は、テストの自動化が適切に設計されているかどうかに依存しています。

実際のところ、継続的デプロイメントでは、開発者によるクラウドアプリケーションへの変更は、作成後数分以内に実稼働に反映されます (自動テストに合格した場合)。これにより、ユーザーからのフィードバックを継続的に受け取り、反映させることが簡単になります。これらの相互に接続された CI/CD プロセスでは、アプリケーションのデプロイメントのリスクを低下させ、アプリケーションへの変更を一度に全部リリースするのではなく、少しずつリリースできます。ただし、CI/CD パイプラインのさまざまなテストやリリースステージに対応する自動テストを作成する必要があるため、まとまった先行投資も必要になります。

CI/CD ツールは、開発、デプロイ、テストを自動化するためのものです。これらのツールには、インテグレーション (CI) 側を処理するものもあれば、開発とデプロイ (CD) 側を管理するものもあり、継続的なテストや関連機能に特化したツールもあります。

CI/CD のオープンソースツールで最もよく知られている 1 つが、自動化サーバーの Jenkins です。Jenkins は、単純な CI サーバーから CD ハブ全体までのあらゆるものを処理するように設計されています。

Tekton Pipelines は、コンテナを使って標準のクラウドネイティブな CI/CD エクスペリエンスを提供する Kubernetes プラットフォームの CI/CD フレームワークです。

Jenkins と Tekton Pipelines 以外にも、知っておくべきオープンソースの CI/CD ツールには次のようなものがあります。

  • Spinnakerマルチクラウド環境向けに構築された CD プラットフォーム

  • GoCD:モデリングと可視化に重点を置いた CI/CD サーバー

  • Concourse:「オープンソースの継続的な実行者」

  • Screwdriver:CD 用に設計されたビルド・プラットフォーム

さらに、さまざまなベンダーから入手できるマネージド型の CI/CD ツールを検討することもできます。主要なパブリッククラウドプロバイダーはすべて、GitLabCircleCITravis CIAtlassian Bamboo などとともに、CI/CD ソリューションを提供しています。

さらに、DevOps の基盤となるほぼすべてのツールは CI/CD プロセスの一部となっていると言えます。構成の自動化 (AnsibleChefPuppet など)、コンテナランタイム用ツール (Dockerrktcri-o など)、コンテナ・オーケストレーション用ツール (Kubernetes) は、厳密には CI/CD ツールではありませんが、 多くの CI/CD ワークフローで使用されています。

優先するアプリケーション開発戦略とクラウドプロバイダーに基づいて、CI/CDを実装する方法はさまざまです。Red Hat® OpenShift® Service on AWS には、Tekton や OpenShift Pipelines など、独自の CI/CD ワークフローをより容易にするためのオプションがいくつか用意されています。 Red Hat OpenShift を使用することで、組織は CI/CD を採用して、複数のオンプレミスおよびクラウドプラットフォームにわたるアプリケーションの構築、テスト、デプロイを自動化できます。

関連資料

記事

DevOps エンジニアとは

DevOps エンジニアは、組織内でのコラボレーション、イノベーション、文化的変革を可能にする特有のスキルと専門知識を持ち合わせています。  

記事

CI/CD とは

CI/CD によって、統合およびテストのフェーズからデリバリー、デプロイメントに至る、アプリケーションのライフサイクル全体を通じて、継続的な自動化と継続的な監視が導入されます。

記事

DevSecOps とは

DevOps によるアジリティと応答性を存分に利用するのであれば、IT セキュリティはアプリケーションのライフサイクル全体を通じて、重要な役目を果たす必要があります。