Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ここから始めるDevOps CI/CD編

ここから始めるDevOps CI/CD編

DevOpsを始めるにあたってCI/CDの観点から学ぶべきポイントを紹介します。

とことんDevOps

March 16, 2023
Tweet

More Decks by とことんDevOps

Other Decks in Technology

Transcript

  1. ここから始めるDevOps
    CI/CD編
    日本仮想化技術株式会社
    水野 源 [email protected]
    2023/03/15
    1

    View Slide

  2. 発表者について
    • 水野 源
    • VTJ 技術部所属
    • Ubuntu JPメンバー
    • ubuntu.comメンバー
    • 日経Linuxにて「Linux 100%活用
    ガイド」を連載中
    • 著書に「そろそろ常識? マンガで
    わかるLinuxコマンド」など
    2

    View Slide

  3. 本日のアジェンダ
    • CIとは
    • CDとは
    • CircleCI
    • ArgoCD
    • まとめ
    3

    View Slide

  4. CIとは
    • 自動的にテストするやつでしょ? くらいの理解の人も多いのでは
    • 間違いではないんだけど、テストは統合のための手段
    • Continuous Integrationの略
    • 日本語にすると継続的なインテグレーション(統合)
    • 統合とは、開発者のコードをリリースブランチにマージ可能にすること
    • リリースブランチは常に正常で、デプロイ可能でなければならない
    • ぶっ壊れたコードのマージはダメ絶対
    • マージ可能にするということは?
    • マージ対象となるコードの品質を確認できているということ
    • そのためのテスト
    4

    View Slide

  5. コードの品質を担保するには
    • コードの品質を担保するにはテストがなにより重要
    • 最初にテストを書き、テストが成功するようロジックを実装するのも一般的
    • これがテスト駆動開発
    • コードをリリースブランチへマージする前には
    • コードのテストや静的解析を行う
    • テスト結果を確認する
    • 実際にマージを行う
    • ……というプロセスを踏む
    • これを継続的に行うのがCI
    5

    View Slide

  6. 継続的?
    • 単にテストを実行しているだけでは不十分
    • 人間は間違えるし、サボる生き物
    • コードに対して十分なカバレッジを持つテストを行うこと
    • それを常に、自動的に実行し続けること
    • この両方が大事
    • これが満たされていれば、リリースブランチにあるコードは常に、す
    べてのテストをパスしていることが担保される
    • この状態を維持することこそがCIの本質
    6

    View Slide

  7. CDとは
    • Continuous Deliveryの略
    • デリバリーとは、本番デプロイ可能な準備を整えること
    • CIによって品質が担保され、リリースブランチにマージされたコードも、
    実際に動かすには本番サーバーにデプロイしなければならない
    • だがデプロイには、それなりの準備や手順がある
    • コンテナイメージをビルドしたり
    • ビルドしたイメージをコンテナレジストリにプッシュしたり
    • これを継続的に行うのがCD
    7

    View Slide

  8. CDとは
    • 新しいコードをデプロイする時とは?
    • 当然リリースブランチのコードが更新された時
    • つまりCIを完了した後にCDが実行されるのが基本
    • そのためCIとCDはだいたいセットで扱われる
    • そのためまとめてCI/CDと呼ばれる
    8

    View Slide

  9. Continuous Deployとは
    • Continuous Deliveryと同じくCDと略される概念
    • まぎらわしい……
    • デリバリーは、あくまでデプロイの準備を整えるだけ
    • 対してデプロイは、文字通りデプロイまでを一気に行う
    • Continuous Delivery + 本番デプロイ = Continuous Deploy という感じ
    • 単にCDと言った場合は区別がつかないことがあるので要注意
    9

    View Slide

  10. CI/CD概念図
    10
    テスト
    静的解析
    セキュリティチェック
    etc
    イメージビルド
    プッシュ
    etc
    本番デプロイ
    Continuous
    Integration
    Continuous
    Delivery
    Continuous
    Deploy
    CircleCI ArgoCD

    View Slide

  11. CircleCI
    • CIやCDを行うには専用のツールを使うのが一般的
    • コミットを検知し、自動的にCIワークフローを起動できることが求められる
    • そのためコードホスティングサービスと一体化したCIサービスも存在する
    • CircleCIはCIに特化した老舗のSaaS
    • GitHub/GitLabとスムーズに連携できる
    • Insight、分割並列実行、SSHデバッグなど、便利機能も豊富
    • 昨年、無料枠が大幅に強化された
    11

    View Slide

  12. CircleCI
    • CIとCDは、概念的には別物
    • だが、実際は明確に分離されているものでもない
    • 分けて考える必要もあまりない
    • 単一のフロー内で、CIとCDを順番に実行することも一般的
    • CircleCIはCIという名前だが、デプロイ処理を書くこともできる
    • 例えばテスト→コンテナのビルド→プッシュ→k8sへのデプロイなどをひとつ
    のワークフロー内で行うことも可能
    12

    View Slide

  13. CircleCI
    13

    View Slide

  14. ArgoCD
    • さっきCircleCIからのデプロイも可能と言ったな?
    • だがそのためには、CircleCIに本番をいじる権限を預けなければならない
    • 本番がk8sなら、KUBECONFIGをCircleCIに設定する必要がある
    • それセキュリティ的にどうよ……?
    • CIツールがクラスターを自由にいじれてしまうと、ワークフローを修正した時
    などに事故が起きるかもしれない
    • そこでCDはCD用のツールを別に用意するというのもおすすめ
    14

    View Slide

  15. ArgoCD
    • ArgoCDは、それ自身もk8s上で動くアプリ
    • クラスター上で動作する他のアプリを管理できる
    • CircleCIがCDを行う場合、外からクラスターにアプリをプッシュする
    • だがArgoCDを使えば、ターゲットとなるクラスター上からアプリをプルできる
    • この方式のメリットは?
    • クラスターの認証情報を外部に持ち出さなくてよい
    • CI/CD(デリバリー)とCD(デプロイ)を分離できる
    • クラスター上で動いているアプリの状態を管理できる
    • etc…
    15

    View Slide

  16. ArgoCD
    16

    View Slide

  17. CI/CD
    CI/CD概念図
    17
    コンテナリポジトリ
    GitHub
    コード
    CircleCI
    テスト
    ビルド イメージ
    k8s
    ArgoCD
    アプリ
    コミット
    デリバリー
    デプロイ

    View Slide

  18. まとめ
    • 高速にDevOpsサイクルを回すには
    • それを支援するツールの導入が必要不可欠
    • なによりキモとなるのが、CI/CD
    • だがCI/CD自体は、プロダクトの価値に直接寄与しない
    • なのでなるべくツールを使って手軽にやりたい
    • 無料枠の強化されたCircleCIはオススメ
    • テストやデプロイにツールを導入して自動化し、品質を担保しながら
    高速な開発とリリースを実現しよう
    18

    View Slide