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