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 ● 継続的な計測・改善