Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PipeCDを使用したBucketeerのGitOps-style CI/CD

5b9550b2ea725a86cde115633e7cd162?s=47 muras
January 20, 2021

PipeCDを使用したBucketeerのGitOps-style CI/CD

5b9550b2ea725a86cde115633e7cd162?s=128

muras

January 20, 2021
Tweet

Transcript

  1. Developer Productivity Study #1 PipeCDを使用した Bucketeerの GitOps-style CI/CD Seiya Muramatsu

    (@mura_s_)
  2. • Seiya Muramatsu • GitHub: mura-s • Twitter: @mura_s_ •

    Team: Bucketeer • Role: Backend Engineer
  3. • Bucketeerのアーキテクチャの概要 • バックエンドのCI/CDの概要 • PipeCDを使ったGitOps & Progressive Delivery •

    まとめ アジェンダ
  4. Bucketeerのアーキテクチャの概要

  5. • Feature Flag & A/B Testing機能を 提供する社内SaaSプロダクト • GCPプロジェクト ◦

    bucketeer-dev-host ◦ bucketeer-prd-host ◦ bucketeer-dev-srv ◦ bucketeer-uat-srv ◦ bucketeer-abematv-srv: 専用prd環境 ◦ bucketeer-media-srv: 共用prd環境 ◦ bucketeer-load-srv • マルチプロジェクト/テナント アーキテクチャ
  6. バックエンドのCI/CDの概要

  7. • GitHubリポジトリ ◦ bucketeer: App Code (Monorepo) ◦ bucketeer-config: App

    Config ◦ bucketeer-ops: CI, Terraform, ... • Buildツール ◦ Bazel (GoやPythonをbuild) • CIツール ◦ Argo Events ◦ Argo Workflows • CDツール ◦ PipeCD v0.9.4 • マニフェスト管理 ◦ Helm v3 CI/CDの全体像
  8. • ArgoのCI Workflow ◦ 1a) Build ◦ 1b) Unit test

    ◦ 2) 変更されたサービスの検出 ◦ 3) GCRにImagesをpush ◦ 4) dev環境用のPR作成, マージ CIについて ◦ 5) pipectlを使ってsync & wait ◦ 6) E2E test ◦ 7a) stage環境用のPR作成, マージ ◦ 7b) prd環境用のPR作成 ◦ 7c) Git Tag, Release Note作成 ◦ 8) Slack通知
  9. CDについて • PipeCDで計198 Appsを管理 • GitOps & Progressive Delivery •

    CDの流れ ◦ CIでImageのバージョンアップを行うPR作成 ◦ PRマージ (自動/手動) ◦ カナリアPodデプロイ (prd環境のみ) ◦ 自動デプロイ分析 (prd環境のみ) ◦ 全Podsデプロイ • 詳細は次のセクションで
  10. PipeCDを使った GitOps & Progressive Delivery

  11. PipeCD UIでの設定 • Piped & Environment ◦ GCPプロジェクト単位で作成

  12. PipeCD UIでの設定 • Project & API Key

  13. Pipedの設定 • analysisProviders ◦ Automated Deployment Analysisで使用 ◦ Cluster内のPrometheusを設定 •

    notifications ◦ デプロイ失敗時にSlack通知 abematv.yaml
  14. • bucketeer-config repoの設定 (後述) • pipectlを使ったscriptを作成 ◦ Environmentを指定してAppsを一括登録 ◦ EnvironmentとAppを指定して登録

    Applicationの登録 ➢ pipectlはCIでも使用 ◦ pipectl application sync --wait-status ...
  15. Applicationの登録 • Appリスト & 詳細ページ

  16. bucketeer-config repoの構成 ディレクトリ構成 • charts, configの下にサービスが並んでいる • Environmentごとのconfigはディレクトリで分割 ◦ デメリットもあるが現状は運用しやすさを優先

    ◦ cf. ブランチで分割、リポジトリで分割
  17. bucketeer-config repoの構成 ディレクトリ構成 .pipe/analysis-template.yaml • AnalysisTemplateにはgrpc_error_rateのmetricsを設定

  18. bucketeer-config repoの構成 ディレクトリ構成 account/dev/.pipe.yaml account/abematv/.pipe.yaml • prd環境以外はQuickSync • prd環境のみDeploy Pipeline

    を設定
  19. dev環境のデプロイ dev環境へのPR + 自動マージ

  20. dev環境のデプロイ QuickSync

  21. prd環境のデプロイ prd環境へのPR + 手動マージ

  22. prd環境のデプロイ Deploy Pipeline

  23. prd環境のデプロイ (Failure) • 自動でRollback • Slack通知

  24. 手動Rollback • リリース完了後に何らかの問題 があってRollbackしたいケース • PRをRevertしてマージするだけ

  25. まとめ

  26. • CI/CDの全体像 (再掲) • PipeCDを使ってどのように GitOps & Progressive Delivery を行っているかを紹介した

    まとめ
  27. • Pros ◦ PipeCD単体でGitOps, Progressive Deliveryが可能 ◦ 独自のCustom Resourceを使用せず、K8SのDeploymentのまま扱える ◦

    ControlPlaneの社内SaaSが提供されている ◦ 身近で開発されているのでやりとりがしやすい • Cons ◦ 競合ツールと比べて若干の機能不足や不安定さを感じることがある ◦ コミュニティの活発さ => 一緒に盛り上げていきましょう! • 要望 ◦ Cascade deleteの実装 ▪ https://github.com/pipe-cd/pipe/issues/1285 PipeCDについての所感
  28. Thanks!