Kenta Kozuka
こづか けんた(@kentakozuka)
@kentakozuka
@kenta_kozuka
Engineer at CyberAgent / Developer Productivity / #PipeCD / #Bucketeer / ✈️🎾🏃⛰️
チャンコン カイン(@khanhtc1202)
CyberAgent Developer Productivity室
Friendly neighborhood wizard!!! 👨💻📸🎧🌉👾🐈🎶🥤♟
今日のスケジュール
Code of Conduct
PipeCDはCNCFのCode of Conductに従っています。
みんなが楽しくイベントが終われば最高です😆
長いです。気楽にいきましょう
スライド見てもらえば分かると思いますが、量がかなりあります。
適当に休みながら見てください。
途中で休憩入れると思います。
いつでも質問してください
書いていて、説明するのも理解するのも難しいなと思いましたw
説明中にぶった切っていいので、質問してください。
Zoomのチャットでも良いです。
CNCF Slack の #pipecd, #pipecd-jp チャンネルではいつでも質問募集中です!
Non-code contributions
コードのコントリビューションは数あるコントリビューションの一つです。
ドキュメント、ブログエントリー、Slackチャンネルでの質問・回答、イベントへの参加など、全て平等で重要なコントリビューションです。
是非コミュニティに参加してください!
すごく良い記事です👇
9
CI, CD周りの
開発手法の紹介
基本的なCI/CDの役割
gitops
11
GitOpsはCDの1つの手法
GitOpsのメリット
プログレッシブデリバリー
commit
rollout
analyze
release
deploy
rollback
プログレッシブデリバリーのプロセス
16
PipeCDの概要
17
One CD for All
18
全ての環境
全てのオペレーション
全てのアプリケーション
全てのインフラ
マルチプロバイダ & マルチテナント
19
様々なプラットフォーム、アプリケーション、テレメトリーに対応
マルチクラスタ・テナンシーでの運用が可能
Kubernetesエコシステムとのインテグレーション
20
GitOps
シンプルなUIと可視性
22
UIはアプリケーションの状態をリアルタイムで可視化し、
どのタイミングで何が発生したかが明示される
Control Plane & Agentモデル
セキュリティ
高度な自動化
25
エラーレートに基づく
自動ロールバック
構成変更の自動検知
DevOps指標の可視化
Plan Preview
プログレッシブデリバリー
commit
rollout
analyze
release
deploy
rollback
プログレッシブデリバリーのプロセス
メトリクスの取得
ユーザーのモニタリングシステムからメトリクスを取得
分析
Pipedのリモートアップグレード
Piped エージェントのアップグレードはUIで簡単に可能
EventWatcher
UPDATE
CIからCDへのデリバリープロセスの自動化
Wait-Approval
34
デプロイに必要な承認者を指定する
Deployment chain
35
dev
stg
prd
asia
us
europe
通知機能
36
37
実際に見てみよう!
38
PipeCDの
アーキテクチャー
PipeCDの全体アーキテクチャー
Control PlaneとAgentの2つ
複数のPipedを管理する
例えば
pipedはシングルバイナリなのでどこでもデプロイ可能
各チームの運用が簡単
大きい組織でスケールする
Control Plane - アーキテクチャー
各種API、UIを提供
5つのコンポーネント
Control Plane - Server
Control Plane - Ops
Control Plane - DataStore
Control Plane - FileStore
コントロールプレーン構成 ー GKE
コントロールプレーン構成 ー ECS Fargate
Piped Agent
48
質問あれば🙋
49
PipeCDの用語集📗
用語集 - 1
Control Plane - コントロールプレーン、たまにPipeCDと言ったらControl Planeを指すこともある。
Agent - Piped agent、piped、単にエージェントとも
Application - 1つのapp.pipecd.yamlで管理するアプリやインフラの集合
Application Kind - Applicationの種類。k8s、Terraformとか
Platform Provider - Applicationを提供するサービス。今のところApplication Kindと1対1
Deployment - Applicationを環境に適用すること。ApplicationとDeploymentは1対N
Stage - Pipelineの中の1つの段階、ステップのこと。例)Quick Sync, Wait, Canary Rollout, Analysis
Analysis - Analysis Stageで行う分析のこと
Analysis Provider - Analysisのために必要なメトリクスやログを提供するサービス
ADA - Automated Deployment Analysis、Analysis Stageで自動的に分析して次のStageに進む機能
用語集 - 2
Plan Preview - Git commitの変更をマージ前にユーザーに通知する機能
Drift - GitとLive Stateの差異
Drift Detection - Driftを検知すること
Sync - GitとLive Stateを同期させること
Sync Strategy- Syncの方法、Quick Sync, Pipeline Syncとか
Insight - PipeCDで収集・表示しているデプロイ周りの指標とその可視化機能
Event Watcher - CIからPipeCDに通知してGitのファイルを更新し、シームレスにCDの処理につなげる機能
Deployment Chain - DeploymentとDeploymentを鎖のように繋げて実行する機能
52
Data Objects
Data Object
※ Userという概念はPipeCDにはない
54
Command
Command
Command
Commandの種類
Command Status
Commandのステータスを表す
58
Deployment
Deployment
Applicationを環境に適用すること。ApplicationとDeploymentは1対N
1つのApplicationを何回もDeployする
Sync - GitとLive Stateを同期させること、ほぼDeploymentと同義
Sync Strategy- Syncの方法、2つある
Deployment Pipeline
ユーザーが自由に設定できるDeploymentの手順
Stage - Pipelineの中の1つの段階、ステップのこと。例)Wait, Canary Rollout, Analysis
Quick Sync StrategyはQuick Syncという1つのステージのみを持つ
Deployment Status
Deploymentの各ステータス
PENDING - トリガーするとまずこのステータスになるPLANNED - 実行することが決定して、待っている状態RUNNING - 実行中
ROLLING_BACK - ロールバック中
SUCCESS - 問題なく完了した状態
FAILURE - 実行中にエラーが発生して終了した状態
CANCELLED - なにかによってキャンセルされた
デプロイメントはPENDINGから始まり、SUCCESS/FAILURE/CANCELLEDのどれかで終わる
Deployment オブジェクト
ApplicationId - ApplicationのID
PipedId - Applicationを管理しているPipedのID
ProjectId - Pipedが属しているProjectのID
RunningCommitHash - Deploymentに使うGit commit hash
GitPath - アプリケーション構成ファイルのパス
PlatformProvider - k8s, Terraformなど
Trigger - Deployementが誰によって、どのようにトリガーしたのかの情報
Versions - Deploymentで使用するアーティファクトの情報、例えば
Status - ステータス
Stages - Deployment pipelineの各ステージの情報
63
ソースコードの
くわしい解説 👀
リポジトリ
リポジトリのディレクトリ構成
cmd - 各コンポーネントのエントリーポイント
docs - ドキュメント
examples - 各フィーチャーを試すための簡単な構成ファイル
hacks - いろんなスクリプト
manifests - helm charts
pkg - 実際のGoのコード
quickstart - Quickstartで必要なコンフィグ
test - インテグレーションテストのコード
tool - 開発に使うGoのアプリコード
web - WebUI
CONTRIBUTING.md - コントリビュートについてのあれこれ
Makefile - 開発中に使う便利コマンド集
cmd/
launcher
pipectl
Command Line Interface
69
Deployment
Deep Dive
piped - PipeCDの超重要コンポーネント
pipedの重要人物たち
Application Live State Store
https://github.com/pipe-cd/pipecd/blob/master/pkg/app/piped/livestatestore/livestatestore.go
Application Live State Reporter
https://github.com/pipe-cd/pipecd/tree/master/pkg/app/piped/livestatereporter
Application Drift Detector
https://github.com/pipe-cd/pipecd/tree/master/pkg/app/piped/driftdetector
Deployment Trigger
デプロイメントをトリガーする
定期実行とオンデマンドの2つの処理がある
https://github.com/pipe-cd/pipecd/tree/master/pkg/app/piped/trigger
Deployment Trigger
定期実行
オンデマンド
Deployment Controller
Control PlaneからDeploymentを取得し、適切にスケジューリングしつつApplicationをデプロイする賢いやつ。例えるなら監督みたい?
https://github.com/pipe-cd/pipecd/tree/master/pkg/app/piped/controller
Deployment Controllerの内部
Controller
Planner
Scheduler
Deployment Controllerが定期的に実行するもの
syncPlanners()
planner.Run()
syncSchedulers()
FAQ
A: Pipedがdeploymentの実行中に再起動になった可能性もある
scheduler.Run()
checkCommands()
85
Let’s take a 5min break
86
How to Start Contributing
How to Start Contributing to PipeCD
Contributing to PipeCDを読んでみよう!
88
Good First Issues
PipeCD’s Good First Issues
最初にやるのにちょうどよいIssueにつけるラベル
90
Let’s Create a PR!
We always welcome your contributions!