AWS Startup Tech Meetup Online #4 https://aws-startup-community.connpass.com/event/209830/
デプロイ頻度を10倍にした、ブランチ戦略とGitHub Actions on AWS ECSTadashi Nemoto
View Slide
⾃⼰紹介● 根本 征 (ねもと ただし)● 株式会社エクサウィザーズ● Platform Engineer (DevOps Engineer)○ CI / CD 基盤の構築・改善・導⼊○ 本番・検証環境の構築・運⽤○ テスト⾃動化の導⼊・布教
CI / CD を導⼊していますか︖
その CI / CD パイプラインは現在のプロダクト・開発組織に最適でしょうか︖
State of DevOps Report 2019
State of DevOps Report 2018
https://tech.uzabase.com/entry/2021/01/28/190209
スタートアップでは変化するスピードがとても重要
デプロイ頻度(27回 / 2週間)10倍以上のデプロイ頻度
アウトライン● これまでの CI / CD・デプロイフロー● 変えたこと○ Jenkins → GitHub Actions on AWS ECS○ Git Flow → GitLab Flow● 改善の効果● これから
これまでの CI / CD・デプロイフロー
これまでのCI / CD・デプロイフロー● Hashicorp Nomad on AWS○ develop, staging, production○ 簡単に複数の develop 環境が作れない● Git Flow○ チームによって使い⽅が多少異なる● Jenkins on AWS○ 本番環境へのデプロイは⼀部弊チームに依存
⼩さく・⾃律的にデプロイできるようにする
デプロイ頻度を上げる
改善したこと①Jenkins → GitHub Actions on AWS ECS
Jenkins● メンテナンスコストが⾼い○ バージョン・プラグインのアップデート○ マシンの追加・スケール○ 権限付与・セキュリティなど● 専任のメンバー・チームが必要● ⾃律的なデプロイに向いていない
SaaS系 CI / CD ツール
デプロイ制限
GitHub Actions self-hosted runners
GitHub Actions self-hosted runners● GitHub Actions ではクラウド版とセルフホスト版を⽤意● セルフホスト版は無料で利⽤可能(GitHub ユーザー)● クラウド版同等の機能を利⽤可能 (Marketplace, Secret)● クラウド版とセルフホスト版を両⽴することが可能○ デプロイはセルフホスト版、テストはクラウド版● ワークフロー管理部分をマネージドにできる
GitHub Actions self-hosted runners on AWS ECS
https://techblog.exawizards.com/entry/2020/10/22/080000
改善したこと②Git Flow -> GitLab Flow
Git Flow
Git Flow● リリースタイミングが決まっている開発には有効○ モバイルアプリ(1~2週間に1回)● 恣意的にリリースできる開発にはメリットが少ない○ API / Frontend をクラウドにいつでもデプロイできる● 不要なブランチ作業によってデプロイ頻度を下げる可能性○ リリースブランチ・Hotfix ブランチ・Tag の作成
GitHub Flow
GitHub Flow本番環境?環境?環境● シンプルなブランチ管理○ master / feature ブランチ● リリース頻度を⾼くできる● リリース前の検証環境が課題○ master ブランチ = production○ staging 環境︖○ development 環境︖
既存の環境(develop, staging, production)をうまく使いながら、デプロイ頻度を上げたい
GitLab Flow● feature → master ブランチの関係○ GitHub Flow と同じ● リリースに必要なブランチを⽤意できる○ master ブランチ → staging 環境○ production ブランチ → 本番環境○ リリースするタイミングで mergeStaging環境本番環境
Develop 環境へのデプロイ
リリースのための Pull Request を⾃動⽣成・更新Staging環境本番環境
https://techblog.exawizards.com/entry/2021/01/21/111031
改善の効果
デプロイ頻度(4回 / ⽉)
デプロイ頻度(27回 / 2週間)
⼩さく・⾃律的にデプロイできるように
これから
継続的に計測・改善する
PRベースの環境構築 / self-hosted runners を使わないstaging環境PR1 環境PR2 環境
継続的テスティング / 継続的インスペクション
まとめ
まとめ● デプロイ頻度の向上はスタートアップ含めとても重要● 2つの改善によって 10 倍以上のデプロイ頻度を実現した○ Jenkins -> GitHub Actions on AWS ECS○ Git Flow -> GitLab Flow● 継続的な計測・改善