Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

● Seiya Muramatsu ● GitHub: mura-s ● Twitter: @mura_s_ ● Team: Bucketeer ● Role: Backend Engineer

Slide 3

Slide 3 text

● Bucketeerのアーキテクチャの概要 ● バックエンドのCI/CDの概要 ● PipeCDを使ったGitOps & Progressive Delivery ● まとめ アジェンダ

Slide 4

Slide 4 text

Bucketeerのアーキテクチャの概要

Slide 5

Slide 5 text

● 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 ● マルチプロジェクト/テナント アーキテクチャ

Slide 6

Slide 6 text

バックエンドのCI/CDの概要

Slide 7

Slide 7 text

● 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の全体像

Slide 8

Slide 8 text

● 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通知

Slide 9

Slide 9 text

CDについて ● PipeCDで計198 Appsを管理 ● GitOps & Progressive Delivery ● CDの流れ ○ CIでImageのバージョンアップを行うPR作成 ○ PRマージ (自動/手動) ○ カナリアPodデプロイ (prd環境のみ) ○ 自動デプロイ分析 (prd環境のみ) ○ 全Podsデプロイ ● 詳細は次のセクションで

Slide 10

Slide 10 text

PipeCDを使った GitOps & Progressive Delivery

Slide 11

Slide 11 text

PipeCD UIでの設定 ● Piped & Environment ○ GCPプロジェクト単位で作成

Slide 12

Slide 12 text

PipeCD UIでの設定 ● Project & API Key

Slide 13

Slide 13 text

Pipedの設定 ● analysisProviders ○ Automated Deployment Analysisで使用 ○ Cluster内のPrometheusを設定 ● notifications ○ デプロイ失敗時にSlack通知 abematv.yaml

Slide 14

Slide 14 text

● bucketeer-config repoの設定 (後述) ● pipectlを使ったscriptを作成 ○ Environmentを指定してAppsを一括登録 ○ EnvironmentとAppを指定して登録 Applicationの登録 ➢ pipectlはCIでも使用 ○ pipectl application sync --wait-status ...

Slide 15

Slide 15 text

Applicationの登録 ● Appリスト & 詳細ページ

Slide 16

Slide 16 text

bucketeer-config repoの構成 ディレクトリ構成 ● charts, configの下にサービスが並んでいる ● Environmentごとのconfigはディレクトリで分割 ○ デメリットもあるが現状は運用しやすさを優先 ○ cf. ブランチで分割、リポジトリで分割

Slide 17

Slide 17 text

bucketeer-config repoの構成 ディレクトリ構成 .pipe/analysis-template.yaml ● AnalysisTemplateにはgrpc_error_rateのmetricsを設定

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

dev環境のデプロイ dev環境へのPR + 自動マージ

Slide 20

Slide 20 text

dev環境のデプロイ QuickSync

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

prd環境のデプロイ Deploy Pipeline

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

まとめ

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

● Pros ○ PipeCD単体でGitOps, Progressive Deliveryが可能 ○ 独自のCustom Resourceを使用せず、K8SのDeploymentのまま扱える ○ ControlPlaneの社内SaaSが提供されている ○ 身近で開発されているのでやりとりがしやすい ● Cons ○ 競合ツールと比べて若干の機能不足や不安定さを感じることがある ○ コミュニティの活発さ => 一緒に盛り上げていきましょう! ● 要望 ○ Cascade deleteの実装 ■ https://github.com/pipe-cd/pipe/issues/1285 PipeCDについての所感

Slide 28

Slide 28 text

Thanks!