Oracle Cloud Hangout Cafe Season4 #3「CI/CD 最新事情」(2021年6月9日開催)
「Oracle Cloud Hangout Cafe」コミュニティとは
「Oracle Cloud Hangout Cafe」(通称「おちゃかふぇ」/以降、OCHaCafe)は、日本オラクルが主催するコミュニティの1つです。定期的に、開発者・エンジニアに向けたクラウドネイティブな時代に身につけておくべきテクノロジーを深堀する勉強会を開催しています。
OCHaCafeのテーマは、Oracleの製品や技術に特化せず、オープン/デファクト・スタンダードを基準に選定して、参加される方々がいかなるプラットフォームを利用している場合でも、必ずスキルアップに役立てられる内容を趣旨としています。
本連載について
OCHaCafeは、2018年12月から開始して、この4年間、多くの方にご参加いただきました。そして、この4年の間にたくさんの有益なコンテンツが蓄積されました。本連載では、その中からご好評いただいたテーマを選択して、ダイジェスト(全6回)としてお送りします。
- 第1回「CI/CD最新事情」
- 第2回「マイクロサービスの認証・認可とJWT」
- 第3回「Kubernetes Operator 超入門」
- 第4回「Kubernetes のセキュリティ」
- 第5回「実験!カオスエンジニアリング」
- 第6回「Service Mesh がっつり入門!」
なお、本連載にあたり、各回の内容は実施時の発表内容をベースとしますが、技術の進化により執筆時に内容を変更する場合もあります。その際は、実施時の発表内容とは異なりますので予めご了承ください。
連載第1回目の今回は、2021年6月9日に開催された「Oracle Cloud Hangout Cafe Season4 #3『CI/CD 最新事情』」の発表内容に基づいて紹介していきます。
この発表では、2021年6月時点のCI/CD最新事情として、CI/CDのこれまで、今、これからという時間軸を設けて、CI/CDのおさらいからCIOps、GitOps、Progressive Deliveryまで、デモを交えながら辿りました。
アジェンダ
今回は、以下アジェンダの「CI/CD これまでを見る」「CI/CD 今を見る」「CI/CD これからを見る」を中心に紹介します。
・ CI/CD これまでを見る
- CIOps
- CI/CD おさらい
- CIOps について
・ CI/CD 今を見る
- GitOps
- GitOps について
- CI & GitOps
- 手元で始める GitOps (デモ)
・ CI/CD これからを見る
- Progressive Delivery
- Progressive Delivery について
・ Oracle's DevOps
- OCI DevOps Service
- OKE & DevOps
・ 最後に
・ 参考資料
発表資料と動画については、下記のリンクを参照してください。
【資料リンク】
【動画リンク】
CI/CD これまでを見る
最初に、CI(Continuous Integration/継続的インテグレーション)とCD(Continuous Delivery/継続的デリバリー)について整理します。その上で、CIOpsを理解します。
CIOps
CI/CDおさらい
1. CIとは?
CIは、アプリケーション開発に必要となるビルド、テスト、成果物(アーティファクト)の保存までの工程を自動化して、継続的に行われる状態にすることです。
コンテナアプリケーション開発における例としては、ソースコードの変更を契機にアプリケーションビルド、アプリケーションテスト、コンテナイメージビルド、コンテナイメージレジストリへのコンテナイメージ格納までの工程を示す場合が多いとされています。
CI環境を整備することで、早期バグの発見による品質向上や検証時間の短縮によるリリーススピードの向上が見込まれ、開発者が開発に集中できる環境でより良い開発サイクルを実現します。
2. CDとは?
CDは、CIによって生み出された成果物(アーティファクト)を、実際の環境(ステージングやプロダクション)へ自動的に配置することです。
コンテナアプリケーション開発における例としては、CIによってコンテナイメージレジストリに格納されたコンテナイメージをデプロイ先となるコンテナプラットフォームに適用する工程です。
CD環境を整備することで、エンドユーザに影響を与えることなく、安全にアプリケーションのデプロイを実現します。
3. CI/CDとは?
これまでの流れを整理すると、CI/CDはソースコードの更新を契機にビルド、テストが進行して、アプリケーションが対象となる環境にデプロイされるまでの工程を自動化することだと理解できます。
4. CI/CDのメリット
アプリケーション開発において、CI/CDを導入するメリットはいくつかあります。以下に挙げた主な例を基に見ていきましょう。
- リリースサイクルの短縮により、市場ニーズに早く対応できる
エンドユーザからのフィードバックを受けて、実装、ビルド、テスト、リリースまでの工程を迅速に実現できます。市場のニーズに早く対応できることで、エンドユーザの満足度、企業競争力や収益の向上も見込めます。 - テスト工程が組まれていることにより、アプリケーションの品質を担保できる
早期にバグを発見できることにより品質の向上を計れます。 - 各工程が自動化されたパイプラインのため、全体的な工数削減を見込める
各工程が自動化されることによって手動作業が減って工数の削減を見込めます。そして、手動作業が減ることによってヒューマンエラーの回避にもつながります。 - 開発者は開発ロジックに集中できるため、開発効率の向上を見込める
開発者が、自動化の恩恵によって、アプリケーション開発ロジックに専念できるようになり、より良い開発サイクルを実現できます。
CI/CD環境を整備することで、早く正確により良いアプリケーションサービスをエンドユーザに届けることが可能となり、満足度の向上から企業競争力や収益の向上につながります。
5. CI/CDの難しさ
実際にCI/CDの導入を検討すると、状況にもよりますが簡単にはいかないところもあります。以下に挙げた主な例を基に見ていきましょう。
- CI/CD環境の構築、運用に乗せるまでの試行錯誤
実際にCI/CD環境を構築して運用していくことを考えると課題は避けられないと思われます。例えば、開発するアプリケーションの特性、基盤/開発/運用の体制や人数、教育など検討事項は多くあります。 - 多種多様で豊富なCI/CDツールの技術選定
CI/CDを実現するツールやサービスはたくさんあるため、基盤/開発/運用者の体制やスキルセットに合わせて検討が必要となります。 - コストの検討
開発規模、体制人数、サポートなど状況に合わせて検討が必要となります。 - 定期的なCI/CD環境のメンテナス
CI/CD環境は、一度構築して終わりではなく、維持、持続、改善をどうしていくか検討が必要となります。
もちろん、ここに挙げたことだけではありません。CI/CDの導入において時間やコストも要することは避けられないと思われますが、長い目で見たときに、その分のメリットをどう見込むかが大切なことではないでしょうか。
CIOpsについて
CI/CDのおさらいをしたところで、次はCIOpsをベースにコンテナアプリケーション開発におけるCI/CDを見ていきます。
CIOpsは、これまでのアプリケーション開発からコンテナアプリケーション開発において、広く利用されている手法です。OSS、各ベンダーやクラウドプロバイダーが提供するツールやマネージドサービスがあります。こうしたツールを組み合わせたり、サービスを利用してCI/CD環境を構築します。
・プッシュ(Push)型
CIOpsは、CI/CDツールやサービスがソースコードの更新を契機に、ビルド、テスト、デプロイの各工程を自動実行します。
下図は、コンテナアプリケーション開発において、ソースコード更新してプッシュやマージ処理などをトリガーにCIパイプラインが稼働して、ビルド、テスト、コンテナイメージビルド、コンテナイメージプッシュ、CDパイプラインによってデプロイされる流れです。
CIOpsは、CI/CDツールやサービスから対象となるプラットフォームにデプロイすることから、プッシュ(Push)型と呼ばれます。デプロイする上でCI/CDツール側に必要となる権限の付与やデプロイ先が増えるごとにその権限を管理するため、セキュリティを十分に考慮する必要があります。
CI/CD 今を見る
CIOpsは、CI/CDツールやサービスを利用して、対象となるプラットフォームにデプロイするプッシュ(Push)型でした。ここからは、Kubernetesを基盤としたコンテナプラットフォームが前提となるGitOpsを見ていきます。
GitOps
GitOpsについて
GitOpsという手法が流布し始めたのは、2017年8月に公開されたWeaveworksの「Operations by Pull Request」ブログ記事だと言われています。GitOpsのガイドラインを整理すると、以下となります。
- コードとして記述できるものは、すべてGitに保存及び管理する
- Kubernetesクラスタ上で稼働するコンテナアプリケーションを前提
- Kubernetes CLIであるkubectlコマンドを直接使用しない
- Kubernetesのオペレータパターンに従うコントローラーを使用
GitOpsは、デプロイ対象となるプラットフォームがKubernetes基盤上で稼働するコンテナアプリケーションであることが前提で、手動によるコマンド操作をせずにGitを利用してCI/CDを実現する手法です。次項で具体的に見ていきます。
・プル(Pull)型
GitOpsは、アプリケーションのソースコードを管理するCodeリポジトリとKubernetesで使用するマニフェストを管理するConfigリポジトリを分けて管理します。そして、Kubernetesクラスタ内に配備されたGitOpsオペレータがConfigリポジトリを定期的にポーリングして、マニフェストの更新を検知すると自動的にその更新内容をKubernetesクラスタに適用する仕組みです。
下図は、GitOpsの流れです。
- 開発者がソースコードを更新して、Codeリポジトリにプッシュを実行
- CIパイプラインが稼働して、ビルド、テスト、コンテナイメージビルド、コンテナイメージプッシュの自動実行
- コンテナイメージに付与された新たなタグをマニフェストに反映後、Configリポジトリにプルリクエスト
- 開発者がプルリクエストをマージ
- GitOpsオペレータが更新を検知後、Kubernetesクラスタに適用
GitOpsは、Kubernetesを基盤とするコンテナプラットフォームからGitOpsオペレータによってデプロイを実行するため、CIOpsのプッシュ(Push)型とは異なり、プル(Pull)型であることが特徴です。
GitOpsオペレータは、後述するArgo CDやFluxなどのGitOpsツールもあります。
・GitOpsの特徴
CodeとConfigリポジトリを分けることで、相互の影響を回避して境界線を明確にできます。また、デプロイに必要となるクレデンシャルなどを外部に持たせることも無いのでセキュリティリスクや管理の煩雑性も抑えられます。
KubernetesのマニフェストをGitで管理するということは、Configリポジトリにあるマニフェストの内容と実環境の状態が同一になります。Git管理により、マニフェストの履歴管理やロールバック対応など柔軟に実施できるため、実環境の再現性も保証できます。
マニフェストをGitで管理することによって得られる主な特徴を挙げます。
- デプロイ先に対して「誰が、何時、何」を変更したのか(変更差分)を履歴で追える
- デプロイ先をいつでも前の状態に戻すこと(ロールバック)ができる
- プルリクエストによるレビュー・マージプロセスを通すことで組織ガバナンスを適用できる
自動化という点では、CIOpsと同様に手動コマンド操作によるヒューマンエラーの回避、運用コストの低減を見込めます。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- 「GitOps」を活用して、アプリケーションを効率的かつ自動的にデプロイする
- HelmfileでKubernetesマニフェストやKustomization、Helm Chartなどで構成されるアプリケーションを効率的に管理する
- CNDT 2022、ChatworkのSREがコンテナセキュリティのための新しいツールを紹介
- CNDT2020シリーズ:CAのインフラエンジニアが解説するKubernetesネイティブなCI/CD
- CNDT2021、クラスター運用自動化をGitOps的に行う方法論をサイバーエージェントのエンジニアが解説
- CNDT 2022、ArgoCDとGitHub Actionsの導入でリリース時間を1/4に削減した事例を紹介
- CNDT2020シリーズ:オススメのGitOpsツールをCAのインフラエンジニアが解説
- インフラエンジニアの視点で見る、DevOpsを実現するためのツールとは
- CNCFのサンドボックスプロジェクト、カオスエンジニアリングのLitmus Chaosを紹介
- CI/CDから障害の復旧までハイレベルの運用自動化を実現するKeptnとは