コンテンツにスキップ

GoのCICDを少しでも早くしたい

チェック

  • [ ] 本文を確認した
  • [ ] 概要を確認した
  • [ ] タグを確認した
  • [ ] inbox/ 直下へ移行した

概要

Go API server の CI/CD を高速化した every Tech Blog の事例。 AWS CodeBuild で deploy、GitHub Actions で test を回しており、CodeBuild が 15 分、GitHub Actions が 10 分程度かかっていた。 不要 code の削除、Docker build cache、go mod download.dockerignore、GitHub Actions cache の見直しなどが改善ポイント。

本文

CI/CD pipeline の数分の遅延は、開発チーム全体の生産性低下や cost 増加につながる。 対象の API server は Go で書かれ、AWS CodeBuild で ECS deploy、GitHub Actions で test を実行していた。

現状把握では、CodeBuild が約 15 分、GitHub Actions が約 10 分。 ものすごく長いわけではないが、日常的に回る pipeline では数分が効く。

CodeBuild 側では、ECR image build / push / ECS deploy の過程で cache が活用されていなかった。 Dockerfile では go mod download がなく、build stage で毎回依存解決をしていた。 .dockerignore も十分に効いておらず、build に関係ない差分が copy 対象になっていた。

改善観点は次の通り。

  • 不要 code や dead code の削除
  • Docker layer cache を効かせる
  • go mod download を依存 file copy 後に分離する
  • .dockerignore を整える
  • GitHub Actions の cache を適切に使う
  • pipeline のどこが遅いかをまず測る

要点

  • CI/CD 高速化はまず現状の時間内訳を測る。
  • Docker build は layer cache と .dockerignore が効く。
  • Go では go mod download を build 前に分離すると依存 cache を使いやすい。
  • 数分の削減でも、チーム全体では大きな開発体験改善になる。

タグ

go #ci-cd #docker #github-actions #aws-codebuild