ついに最強のCI/CDが完成した 〜巨大リポジトリで各チームが独立して・安全に・高速にリリースする〜

概要

  • 一つのレポジトリでZOZOTOWNマイクロサービス基盤での全てのインフラリソースを対象にリリースを行っている
    • AWSたっだらCloudFormation、KubernetesだとFluxcd、datadogなどはterraformなどを用いている
  • 当初はreleaseブランチでのリリースを行っていたが、CI/CD実行時間が長期化したり、マイクロサービス毎にリリースするのが難しかったりした。
    • releaseブランチを全てのマイクロサービスで共有しているため
  • 上記の理由からドメイン単位で並行リリースできるようにした
    • ドメイン毎にmainとreleaseブランチを持つ設計にしたが、リリース手法が分散してしまったり、共通リソースとの兼ね合いでブランチ間の同期が複雑化するという問題も発生した
  • そこで今回CI/CDを刷新したというのが今回の記事
    • GAのを使って、PRに変更のあったファイルやディレクトリを取得
      • これにより、k8sのリソースが書かれているディレクトリに変更があったらkubectl diffを動かすといったことが可能になった
    • GitHub Environmentsを使うことで、特定のレビュアーからレビューをもらうまではCD Jobが実行されないといったことが可能になった
    • GAのを使うことで、事前に定義したファイルに変更があるかを検知できる。これによって、特定のファイルに変更があれば、あるチームのレビューを必須にするといったパイプラインを組むことが可能になった。
  • 最終的に1ヶ月のパイプライン実行時間がtotalで1/10程に減少した