Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

heyにおけるCI/CDの現状と課題

 heyにおけるCI/CDの現状と課題

【スタンバイ× hey】急成長スタートアップSREのリアル(https://hey.connpass.com/event/250012/) での発表資料です。

Ryoma Fujiwara

June 15, 2022
Tweet

More Decks by Ryoma Fujiwara

Other Decks in Programming

Transcript

  1. 自己紹介 藤原 涼馬 ヘイ株式会社 プロダクト基盤本部 SRE (他にもいろいろ) 経歴  SIer R&D

    →      → 趣味  自動車の運転  模型製作  各種寄稿・登壇 好きなAWSサービス  ECS Fargate / AWS SSO + 他いろいろ 今ここ
  2. CI/CDの目的ってそもそも何? • CIもCDも基本的には、 ”誰でも、いつでも同じ品質でタスクを実行する”ことを目的としています • CI(Continuous Integration; 継続的インテグレーション) ◦ リポジトリに格納されているコードを自動的にビルド・テストする手法

    ref) https://aws.amazon.com/jp/devops/continuous-integration/ • CD(Continuous Deploy/Delivery; 継続的デプロイ/デリバリー) ◦ リポジトリに格納されているコードを自動的に本番環境に配置、配布する手法 ◦ デプロイ...トリガーまで自動化 ◦ デリバリー... トリガーは手動
  3. CD: エンジニアリング観点でのでデプロイ頻度の重要性 高頻度でデプロイすることによる差分の極小化とそれに伴うMTTRの縮小 低頻度デプロイ 時間 変更 変更 変更 変更 変更

    変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 デプロイ デプロイ 不具合発生 高頻度デプロイ 時間 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 デプロイ デプロイ 不具合発生 デプロイ デプロイ デプロイ 過去の変更に伴うものが爆発したの でなければこの部分の変更が原因の 可能性が高い
  4. CD: エンジニアリング観点でのでデプロイ頻度の重要性 高頻度でデプロイすることによる差分の極小化とそれに伴うMTTRの縮小 低頻度デプロイ 時間 変更 変更 変更 変更 変更

    変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 デプロイ デプロイ 不具合発生 高頻度デプロイ 時間 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 変更 デプロイ デプロイ 不具合発生 デプロイ デプロイ デプロイ 過去の変更に伴うものが爆発したの でなければこの部分の変更が原因の 可能性が高い 不具合原因の特定&修正にかかる時間(= MTTR): 低頻度デプロイ > 高頻度デプロイ 変更失敗率: 低頻度デプロイ(50%) > 高頻度デプロイ(20%)
  5. CD: ビジネス観点でのデプロイ頻度の重要性 機能が早くリリースされるほど利用者への提供価値の総和は大きくなる 低頻度デプロイ 高頻度デプロイ 時間 提 供 価 値

    時間 提 供 価 値 機能1 機能1 機能2 機能3 機能4 機能5 差分 機能2 機能3 機能4 機能5 差分 リリースせずに 寝かせている期間 リリースせずに 寝かせている期間 デプロイ デプロイ デプロイ デプロイ デプロイ デプロイ デプロイ デプロイ
  6. CD: ビジネス観点でのデプロイ頻度の重要性 機能が早くリリースされるほど利用者への提供価値の総和は大きくなる 低頻度デプロイ 高頻度デプロイ 時間 提 供 価 値

    時間 提 供 価 値 機能1 機能1 機能2 機能3 機能4 機能5 差分 機能2 機能3 機能4 機能5 差分 リリースせずに 寝かせている期間 リリースせずに 寝かせている期間 デプロイ デプロイ デプロイ デプロイ デプロイ デプロイ デプロイ デプロイ デプロイ頻度が高い方が 時間を跨って見たときの提供価値の総和は大きい
  7. 個別プロダクトの状況 CIは全てのプロダクトに存在しています。 実施している内容や深さはプロダクトによって異なります。 プロダクト1 プロダクト2 プロダクト3 プロダクト4 プロダクト5 CI ・Circle

    CI ・PR単位でlintとテスト CD ・Circle CI ・mainブランチプッシュでリリース CI ・CircleCI(テスト) ・GitHub Actions  (コンテナイメージビルド) CD ・Rundeck CI ・CircleCI -> GitHubActions ・lint, テスト(rspec, jest), E2E(mabl) CD ・GitHub Actions(chat ops with slack)  ECS… ecspresso + CodeDeploy  EC2… capistrano CI ・GitHub Actions ・テスト, Codacy(静的解析) CD ・GitHub Actions  ECS … CodeDeploy  EB … Swap URL CI ・GitHub Actions (C)D ・ローカルからの独自スクリプト
  8. 全体的な傾向 • CI基盤としてはCircleCI、GitHub Actions(+ 一部で追加のSaaSを利用) • CDについては多少幅が出てきます ◦ CircleCI, GitHub

    Actions, Rundeck, (+ 独自スクリプト) ◦ コンピューティング基盤は徐々にECSに寄せていこうとしています
  9. 現状の課題(とやりたいこと) • プロダクトによってはデプロイに要する時間が長く、 頻度を上げるための改善をしたい • デプロイ容易性などを上げる目的でECS移行を進めているプロダクトがある • 特定プロダクトの良い取り組みを他にも広めたい ◦ CIのモニタリング/E2Eテスト/フィーチャートグル

    • CI/CDにおける機密情報管理、セキュリティレベルの底上げ (現時点では具体的に問題が生じているわけではないが) ◦ AWSへのアクセスはOIDCベースに移行したい(GitHub ActionsでAWSのアクセスキーを管理したくない)
  10. 現状の課題(とやりたいこと) • プロダクトによってはデプロイに要する時間が長く、 頻度を上げるための改善をしたい • デプロイ容易性などを上げる目的でECS移行を進めているプロダクトがある • 特定プロダクトの良い取り組みを他にも広めたい ◦ CIのモニタリング/E2Eテスト/フィーチャートグル

    • CI/CDにおける機密情報管理、セキュリティレベルの底上げ (現時点では具体的に問題が生じているわけではないが) ◦ AWSへのアクセスはOIDCベースに移行したい(GitHub ActionsでAWSのアクセスキーを管理したくない) 他にもやりたいことたくさんあります
  11. まとめ • 前段セッションでもあった通り、SLO/SLI策定や測定するための仕組み作りは 重要です • それ以上にそもそも高いSLIを実現するにはインフラとアプリケーションその ものが重要です。CIの整備を通じてテストを高頻度で実行し、アプリケーショ ンコードの特性を可視化して改善をすすめられるようにしておきましょう。 • また、アプリケーションが無事にデプロイ出来なければSLOもSLIもありませ

    ん。ダウンタイムのより少ないデプロイ手法、より確実なデプロイ手法の実現 のためにCDを磨き込んでいきましょう。 • heyのプロダクトでもCI/CDについては状況はまちまちな状態です。取り組み たい事はCI/CDに限らずたくさんあります。CI/CDが何を果たしているのかを 理解した上で適切な優先順位付けをしてより良くしていくための取り組みを進 めたいと考えています。