Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ここから始めるDevOps CI/CD編
Search
とことんDevOps
March 16, 2023
Technology
0
460
ここから始めるDevOps CI/CD編
DevOpsを始めるにあたってCI/CDの観点から学ぶべきポイントを紹介します。
とことんDevOps
March 16, 2023
Tweet
Share
More Decks by とことんDevOps
See All by とことんDevOps
Gitで始めるバージョン管理入門
devops_vtj
1
130
今さら聞けないDocker入門 〜 Dockerfileのベストプラクティス編
devops_vtj
32
9.3k
AWS AmplifyではじめるDevOps
devops_vtj
0
260
IaCコードリーディング ~Terraformのコードを一緒に読んで行こう~
devops_vtj
0
500
Software Design 11月号第1特集「理想のコンテナイメージを作る」を振り返る 第1章
devops_vtj
0
380
Software Design 11月号第1特集「理想のコンテナイメージを作る」を振り返る 第3章
devops_vtj
0
390
Software Design 11月号第1特集「理想のコンテナイメージを作る」を振り返る 第4章
devops_vtj
0
420
Terraformでニフクラにリモート開発環境を自動構築した話
devops_vtj
0
860
【ライブデモ】Visual Studio CodeのDev Containersを使って開発環境構築してみるよ
devops_vtj
1
800
Other Decks in Technology
See All in Technology
LayerXとMDMのリスク評価と年次対応の実例(公開版)
ken5scal
0
400
社内 TSKaigi 実施を経た Full Stack TypeScript 強化の道
niwatakeru
0
120
いまからでも遅くない!ROKS (RedHat OpenShift on IBM Cloud) の運用
helenxiao
0
230
Unified Diff 形式の差分から Go AST を構築して feature flag を自動計装する
biwashi
9
870
自動テストは何の役に立つのか そして役に立たないのか
undefined_name
3
1.1k
スケーラビリティの課題解決に向けたココナラのデータベース移行戦略
coconala_engineer
1
370
Developing image pull secrets provisioner / Kubernetes Meetup Tokyo #65
pfn
PRO
2
280
『VoLT』レバテックの デザインシステム ~電光石火の構築プロセスと目指す未来~
leveragestech
2
110
Kubernetesで作るIaaS基盤/KubeVirt Deep Dive
oracle4engineer
PRO
11
2.2k
Luupの開発組織におけるインシデントマネジメントの変遷
grimoh
2
380
しみじみ語る Microsoftの考える プラットフォームエンジニアリング
torumakabe
3
430
大規模 SaaS の技術的意思決定を支える三要素 / Three elements that support technical decision-making for large-scale SaaS
_atsushisakai
0
100
Featured
See All Featured
Building Your Own Lightsaber
phodgson
101
5.8k
StorybookのUI Testing Handbookを読んだ
zakiyama
14
4.8k
The Illustrated Children's Guide to Kubernetes
chrisshort
34
47k
GitHub's CSS Performance
jonrohan
1025
450k
Building Flexible Design Systems
yeseniaperezcruz
321
37k
Into the Great Unknown - MozCon
thekraken
16
1.2k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
10
1.4k
How STYLIGHT went responsive
nonsquared
92
4.9k
Optimizing for Happiness
mojombo
372
69k
Become a Pro
speakerdeck
PRO
13
4.7k
The Straight Up "How To Draw Better" Workshop
denniskardys
228
130k
BBQ
matthewcrist
80
8.8k
Transcript
ここから始めるDevOps CI/CD編 日本仮想化技術株式会社 水野 源
[email protected]
2023/03/15 1
発表者について • 水野 源 • VTJ 技術部所属 • Ubuntu JPメンバー
• ubuntu.comメンバー • 日経Linuxにて「Linux 100%活用 ガイド」を連載中 • 著書に「そろそろ常識? マンガで わかるLinuxコマンド」など 2
本日のアジェンダ • CIとは • CDとは • CircleCI • ArgoCD •
まとめ 3
CIとは • 自動的にテストするやつでしょ? くらいの理解の人も多いのでは • 間違いではないんだけど、テストは統合のための手段 • Continuous Integrationの略 •
日本語にすると継続的なインテグレーション(統合) • 統合とは、開発者のコードをリリースブランチにマージ可能にすること • リリースブランチは常に正常で、デプロイ可能でなければならない • ぶっ壊れたコードのマージはダメ絶対 • マージ可能にするということは? • マージ対象となるコードの品質を確認できているということ • そのためのテスト 4
コードの品質を担保するには • コードの品質を担保するにはテストがなにより重要 • 最初にテストを書き、テストが成功するようロジックを実装するのも一般的 • これがテスト駆動開発 • コードをリリースブランチへマージする前には •
コードのテストや静的解析を行う • テスト結果を確認する • 実際にマージを行う • ……というプロセスを踏む • これを継続的に行うのがCI 5
継続的? • 単にテストを実行しているだけでは不十分 • 人間は間違えるし、サボる生き物 • コードに対して十分なカバレッジを持つテストを行うこと • それを常に、自動的に実行し続けること •
この両方が大事 • これが満たされていれば、リリースブランチにあるコードは常に、す べてのテストをパスしていることが担保される • この状態を維持することこそがCIの本質 6
CDとは • Continuous Deliveryの略 • デリバリーとは、本番デプロイ可能な準備を整えること • CIによって品質が担保され、リリースブランチにマージされたコードも、 実際に動かすには本番サーバーにデプロイしなければならない •
だがデプロイには、それなりの準備や手順がある • コンテナイメージをビルドしたり • ビルドしたイメージをコンテナレジストリにプッシュしたり • これを継続的に行うのがCD 7
CDとは • 新しいコードをデプロイする時とは? • 当然リリースブランチのコードが更新された時 • つまりCIを完了した後にCDが実行されるのが基本 • そのためCIとCDはだいたいセットで扱われる •
そのためまとめてCI/CDと呼ばれる 8
Continuous Deployとは • Continuous Deliveryと同じくCDと略される概念 • まぎらわしい…… • デリバリーは、あくまでデプロイの準備を整えるだけ •
対してデプロイは、文字通りデプロイまでを一気に行う • Continuous Delivery + 本番デプロイ = Continuous Deploy という感じ • 単にCDと言った場合は区別がつかないことがあるので要注意 9
CI/CD概念図 10 テスト 静的解析 セキュリティチェック etc イメージビルド プッシュ etc 本番デプロイ
Continuous Integration Continuous Delivery Continuous Deploy CircleCI ArgoCD
CircleCI • CIやCDを行うには専用のツールを使うのが一般的 • コミットを検知し、自動的にCIワークフローを起動できることが求められる • そのためコードホスティングサービスと一体化したCIサービスも存在する • CircleCIはCIに特化した老舗のSaaS •
GitHub/GitLabとスムーズに連携できる • Insight、分割並列実行、SSHデバッグなど、便利機能も豊富 • 昨年、無料枠が大幅に強化された 11
CircleCI • CIとCDは、概念的には別物 • だが、実際は明確に分離されているものでもない • 分けて考える必要もあまりない • 単一のフロー内で、CIとCDを順番に実行することも一般的 •
CircleCIはCIという名前だが、デプロイ処理を書くこともできる • 例えばテスト→コンテナのビルド→プッシュ→k8sへのデプロイなどをひとつ のワークフロー内で行うことも可能 12
CircleCI 13
ArgoCD • さっきCircleCIからのデプロイも可能と言ったな? • だがそのためには、CircleCIに本番をいじる権限を預けなければならない • 本番がk8sなら、KUBECONFIGをCircleCIに設定する必要がある • それセキュリティ的にどうよ……? •
CIツールがクラスターを自由にいじれてしまうと、ワークフローを修正した時 などに事故が起きるかもしれない • そこでCDはCD用のツールを別に用意するというのもおすすめ 14
ArgoCD • ArgoCDは、それ自身もk8s上で動くアプリ • クラスター上で動作する他のアプリを管理できる • CircleCIがCDを行う場合、外からクラスターにアプリをプッシュする • だがArgoCDを使えば、ターゲットとなるクラスター上からアプリをプルできる •
この方式のメリットは? • クラスターの認証情報を外部に持ち出さなくてよい • CI/CD(デリバリー)とCD(デプロイ)を分離できる • クラスター上で動いているアプリの状態を管理できる • etc… 15
ArgoCD 16
CI/CD CI/CD概念図 17 コンテナリポジトリ GitHub コード CircleCI テスト ビルド イメージ
k8s ArgoCD アプリ コミット デリバリー デプロイ
まとめ • 高速にDevOpsサイクルを回すには • それを支援するツールの導入が必要不可欠 • なによりキモとなるのが、CI/CD • だがCI/CD自体は、プロダクトの価値に直接寄与しない •
なのでなるべくツールを使って手軽にやりたい • 無料枠の強化されたCircleCIはオススメ • テストやデプロイにツールを導入して自動化し、品質を担保しながら 高速な開発とリリースを実現しよう 18