DevOpsを始めるにあたってCI/CDの観点から学ぶべきポイントを紹介します。
ここから始めるDevOpsCI/CD編日本仮想化技術株式会社水野 源 [email protected]2023/03/151
View Slide
発表者について• 水野 源• VTJ 技術部所属• Ubuntu JPメンバー• ubuntu.comメンバー• 日経Linuxにて「Linux 100%活用ガイド」を連載中• 著書に「そろそろ常識? マンガでわかるLinuxコマンド」など2
本日のアジェンダ• CIとは• CDとは• CircleCI• ArgoCD• まとめ3
CIとは• 自動的にテストするやつでしょ? くらいの理解の人も多いのでは• 間違いではないんだけど、テストは統合のための手段• Continuous Integrationの略• 日本語にすると継続的なインテグレーション(統合)• 統合とは、開発者のコードをリリースブランチにマージ可能にすること• リリースブランチは常に正常で、デプロイ可能でなければならない• ぶっ壊れたコードのマージはダメ絶対• マージ可能にするということは?• マージ対象となるコードの品質を確認できているということ• そのためのテスト4
コードの品質を担保するには• コードの品質を担保するにはテストがなにより重要• 最初にテストを書き、テストが成功するようロジックを実装するのも一般的• これがテスト駆動開発• コードをリリースブランチへマージする前には• コードのテストや静的解析を行う• テスト結果を確認する• 実際にマージを行う• ……というプロセスを踏む• これを継続的に行うのがCI5
継続的?• 単にテストを実行しているだけでは不十分• 人間は間違えるし、サボる生き物• コードに対して十分なカバレッジを持つテストを行うこと• それを常に、自動的に実行し続けること• この両方が大事• これが満たされていれば、リリースブランチにあるコードは常に、すべてのテストをパスしていることが担保される• この状態を維持することこそがCIの本質6
CDとは• Continuous Deliveryの略• デリバリーとは、本番デプロイ可能な準備を整えること• CIによって品質が担保され、リリースブランチにマージされたコードも、実際に動かすには本番サーバーにデプロイしなければならない• だがデプロイには、それなりの準備や手順がある• コンテナイメージをビルドしたり• ビルドしたイメージをコンテナレジストリにプッシュしたり• これを継続的に行うのがCD7
CDとは• 新しいコードをデプロイする時とは?• 当然リリースブランチのコードが更新された時• つまりCIを完了した後にCDが実行されるのが基本• そのためCIとCDはだいたいセットで扱われる• そのためまとめてCI/CDと呼ばれる8
Continuous Deployとは• Continuous Deliveryと同じくCDと略される概念• まぎらわしい……• デリバリーは、あくまでデプロイの準備を整えるだけ• 対してデプロイは、文字通りデプロイまでを一気に行う• Continuous Delivery + 本番デプロイ = Continuous Deploy という感じ• 単にCDと言った場合は区別がつかないことがあるので要注意9
CI/CD概念図10テスト静的解析セキュリティチェックetcイメージビルドプッシュetc本番デプロイContinuousIntegrationContinuousDeliveryContinuousDeployCircleCI ArgoCD
CircleCI• CIやCDを行うには専用のツールを使うのが一般的• コミットを検知し、自動的にCIワークフローを起動できることが求められる• そのためコードホスティングサービスと一体化したCIサービスも存在する• CircleCIはCIに特化した老舗のSaaS• GitHub/GitLabとスムーズに連携できる• Insight、分割並列実行、SSHデバッグなど、便利機能も豊富• 昨年、無料枠が大幅に強化された11
CircleCI• CIとCDは、概念的には別物• だが、実際は明確に分離されているものでもない• 分けて考える必要もあまりない• 単一のフロー内で、CIとCDを順番に実行することも一般的• CircleCIはCIという名前だが、デプロイ処理を書くこともできる• 例えばテスト→コンテナのビルド→プッシュ→k8sへのデプロイなどをひとつのワークフロー内で行うことも可能12
CircleCI13
ArgoCD• さっきCircleCIからのデプロイも可能と言ったな?• だがそのためには、CircleCIに本番をいじる権限を預けなければならない• 本番がk8sなら、KUBECONFIGをCircleCIに設定する必要がある• それセキュリティ的にどうよ……?• CIツールがクラスターを自由にいじれてしまうと、ワークフローを修正した時などに事故が起きるかもしれない• そこでCDはCD用のツールを別に用意するというのもおすすめ14
ArgoCD• ArgoCDは、それ自身もk8s上で動くアプリ• クラスター上で動作する他のアプリを管理できる• CircleCIがCDを行う場合、外からクラスターにアプリをプッシュする• だがArgoCDを使えば、ターゲットとなるクラスター上からアプリをプルできる• この方式のメリットは?• クラスターの認証情報を外部に持ち出さなくてよい• CI/CD(デリバリー)とCD(デプロイ)を分離できる• クラスター上で動いているアプリの状態を管理できる• etc…15
ArgoCD16
CI/CDCI/CD概念図17コンテナリポジトリGitHubコードCircleCIテストビルド イメージk8sArgoCDアプリコミットデリバリーデプロイ
まとめ• 高速にDevOpsサイクルを回すには• それを支援するツールの導入が必要不可欠• なによりキモとなるのが、CI/CD• だがCI/CD自体は、プロダクトの価値に直接寄与しない• なのでなるべくツールを使って手軽にやりたい• 無料枠の強化されたCircleCIはオススメ• テストやデプロイにツールを導入して自動化し、品質を担保しながら高速な開発とリリースを実現しよう18