2020.6.3 CircleCI ユーザーコミュニティミートアップ登壇資料 https://circleci.connpass.com/event/175195/
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.Kubernetes × CircleCIで実現する安⼼安全DeployVTRyo / @3s_hv#CircleCIJP
View Slide
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. #CircleCIJPイベントハッシュタグ#CircleCIJP
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved. #CircleCIJPスライドは公開します
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.VTRyo / @3s_hv➤ 株式会社マツリカ / SRE➤ 作家(早く脱稿したい)➤ CircleCIユーザコミュニティメンバー etc.➤ AWS Summit 2019 StartupCentral 登壇 etc.https://vtryo.meillustration by 湊川あい#CircleCIJP
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.営業をもっと⾃由に、もっと創造的に。#CircleCIJP
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.➤ CI/CDってなんだっけ?➤ 安⼼安全のDeployって?➤ CircleCIに何をさせている?➤ Deploy Workflow➤ config.yml話すこと#CircleCIJP
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.⼿動でDeployまでしている⼈#CircleCIJP
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.Build, Testは⾃動の⼈#CircleCIJP
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.Build, Test, Deploy承認までは⾃動の⼈#CircleCIJP
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.⾃動でDeployまでしている⼈#CircleCIJP
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.⾃動CI/CDってなんだっけ?#CircleCIJP参考:https://aws.amazon.com/jp/devops/continuous-delivery/Build & TestDeployStagingDeployProductionCommitchange⾃動継続的インテグレーション継続的デリバリ継続的デプロイメントv1.1 本番Deploy 承認します⾃動
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.➤ CI(継続的インテグレーション)➤ リリースプロセスのBuild段階とTest段階のことを指す。コードの変更がCommitされるたびに、⾃動化されたBuildとTestが実⾏される➤ CD(継続的デリバリ)➤ リリースプロセスの全体を⾃動化すること。ステージング環境まで⾃動Deployされる。本番環境へのDeployするかは開発者が決める➤ CD(継続的デプロイメント)➤ 継続的デリバリにおいて、本番環境へのDeployに承認が必要かどうかCI/CDってなんだっけ?#CircleCIJP参考:https://aws.amazon.com/jp/devops/continuous-delivery/
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.҆৺҆શͷDeployͱ#CircleCIJP
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.1. 開発者なら誰でもDeployまでできるCircleCIの頑張りどころ#CircleCIJP
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.2. ⼈間が頑張らずにDeployまでできるCircleCI, Kubernetes の頑張りどころ#CircleCIJP
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.3. Stagingでテストされた環境がProductionにDeployされるCircleCI, Kubernetes の頑張りどころ#CircleCIJP
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.͜ͷ3ͭΛϙΠϯτʹ͍͖ͯ͠·͢#CircleCIJP
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.։ൃऀͳΒ୭ͰDeploy·ͰͰ͖Δ#CircleCIJP
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.⾃動どこの部分の話?#CircleCIJP参考:https://aws.amazon.com/jp/devops/continuous-delivery/Build & TestDeployStagingDeployProductionCommitchange⾃動継続的インテグレーション継続的デリバリ継続的デプロイメントv1.1 本番Deploy 承認します⾃動͜͜ͷΛ͢ΔΑ
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.➤ 開発者がソースコードをPush or Mergeすると…➤ CircleCIがBuild & Testを開始➤ DockerΠϝʔδ͕ECRにPushされる➤ KubernetesクラスタにDeployされるWorkflowの概要#CircleCIJP
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.➤ 開発者がソースコードをPush or Mergeすると…➤ CircleCIがBuild & Testを開始➤ DockerΠϝʔδ͕ECRにPushされる➤ KubernetesクラスタにDeployされるWorkflowの概要開発者がやることはシンプル#CircleCIJP
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.➤ ⾃動的にテスト(リリース候補確認)環境にDeployされる➤ 開発者はMasterにMergeするだけでOKv1.1がMasterにMergeされたWorkflow#CircleCIJP
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.➤ ProductionリリースWorkflowはStaging(本番相当)環境に⾃動Deployされる➤ 問題なければ「request_prod 」をApprovedすることで本番Deployされるv1.1がProduction DeployされるときのWorkflow#CircleCIJP
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.➤ ProductionリリースWorkflowはStaging(本番相当)環境に⾃動Deployされる➤ 問題なければ「request_prod 」をApprovedすることで本番Deployされるv1.1がProduction DeployされるときのWorkflow#CircleCIJP開発者は「Approved」するだけ
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.➤ ProductionリリースWorkflowはStaging(本番相当)環境に⾃動Deployされる➤ 問題なければ「request_prod 」をApprovedすることで本番Deployされるv1.1がProduction DeployされるときのWorkflow#CircleCIJP安全だね!
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.➤ Stagingに⾃動的にDeployしたあとに ApprovedのJobを挟んでおく➤ 開発者はこの中⾝を知らなかったとしても Deployすることができるconfig.yml#CircleCIJP
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.ਓ͕ؒؤுΒͣʹDeploy·ͰͰ͖Δ#CircleCIJP
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.➤ ⼈間がコマンドラインなどを使⽤してDeployするやりかた➤ kubectl apply➤ terraform apply➤ Deploy時にパラメータの変更が⼿動で必要なやりかた⼈間が頑張るDeployとは(⼀例です)#CircleCIJP
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.➤ ⼈間がコマンドラインなどを使⽤してDeployするやりかた➤ kubectl apply➤ terraform apply➤ Deploy時にパラメータの変更が⼿動で必要なやりかた⼈間が頑張るDeployとは(⼀例です)#CircleCIJPいつかミスでる & 時間かかる
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.➤ 変更されたコードのテスト➤ Dockerイメージの作成➤ 作成されるたび、Dockerイメージタグにバージョン管理のためコミットハッシュを付与する➤ ECRにPushする➤ Migrationの実⾏➤ Deploy➤ クラスタで、作成したDockerイメージに差し替えるKubernetesクラスタにDeployするまで#CircleCIJP
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.➤ 変更されたコードのテスト➤ Dockerイメージの作成➤ 作成されるたび、Dockerイメージタグにバージョン管理のためコミットハッシュを付与する➤ ECRにPushする➤ Migrationの実⾏➤ Deploy➤ クラスタで、作成したDockerイメージに差し替えるKubernetesクラスタにDeployするまで#CircleCIJPなんだかんだ⾔ってやること多い
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.➤ Dockerイメージタグにコミットハッシュ➤ ↑で作成されたDockerイメージを使ってDeployされるconfig.yml#CircleCIJP
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.➤ ECRの操作は、CircleCI Orbsを利⽤することで簡単に実現できるconfig.yml#CircleCIJP参考:https://circleci.com/orbs/registry/orb/circleci/aws-ecr
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.StagingͰςετ͞Εͨڥ͕ProductionʹDeploy͞ΕΔ#CircleCIJP
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.➤ StagingにDeployされてからでなければProductionへDeployできない流れv1.1がProduction DeployされるときのWorkflow#CircleCIJP
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.なぜその流れがよいの?#CircleCIJP
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.かつての地獄…➤ Opsworksによる構築、Deploy➤ Stackによって失敗したりする➤ 詳細なログを出してくれない…➤ 構成変更に時間がかかる(停⽌も⻑い)➤ Chef➤ 毎回Setupコマンド待ち➤ ローカル開発環境はDockerなんだけど…#CircleCIJP
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.確かなDockerイメージをProductionへ#CircleCIJPDeployStagingDeployProductionDockerImage⾃動workflowでは Staging Deploy前にdocker build実⾏同じDockerイメージがDeploy➤ 動作確認が取れているDockerイメージが確実にProductionへ届く➤ 安定性の向上➤ 「それStagingだと環境差分があって 再現しないんですよ」が減る ※データベース内容による環境差分はあると思います
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.確かなDockerイメージをProductionへ#CircleCIJPDeployStagingDeployProductionDockerImage⾃動workflowでは Staging Deploy前にdocker build実⾏同じDockerイメージがDeploy➤ 動作確認が取れているDockerイメージが確実にProductionへ届く➤ 安定性の向上➤ 「それStagingだと環境差分があって 再現しないんですよ」が減る ※データベース内容による環境差分はあると思います安全だね!
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.➤ CircleCIによって、継続的デプロイメント(or 継続的デリバリ)の実装が可能➤ 「⼈間が頑張らず、誰でもDeployできる」ことには様々なメリットがあるよ➤ 効率化➤ 属⼈化排除➤ Deploy安定性向上➤ Staging→ProductionというDeployフローが可能なら実装するとメリットがあるよ➤ 動作確認保証が取れたものがProductionへ届く➤ サービス安定性向上まとめ#CircleCIJP
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.➤ Amazon EKSͰߏங͢ΔࣾPaaS➤ https://speakerdeck.com/vtryo/create-paas-eks➤ KubernetesͷJobͰ࣮ߦͨ͠MigrationͷϩάΛCircleCIͰݟΕΔͱศར➤ https://blog.vtryo.me/entry/migration-log-to-circleci➤ CircleCIͰϏϧυ͍ͯ͠Δϒϥϯν໊ΛDockerΠϝʔδͷλάʹઃఆ͢Δ➤ https://blog.vtryo.me/entry/docker-image-tag-using-branch-nameその他 参考資料#CircleCIJP
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.Hire me! (side job.)➤ Hire meは冗談ですが、ご相談はいつでもお待ちしています➤ Twitter→@3s_hv#CircleCIJPillustration by 湊川あい
© 株式会社マツリカ ∕ mazrica, inc. - All Rights Reserved.Kubernetes × CircleCIで実現する安⼼安全DeployVTRyo / @3s_hv完#CircleCIJP