JavaScriptを有効にしてください

PipecdのControl PlaneとPipedを起動してみる

 ·  ☕ 5 分で読めます  ·  🐙 subaru

pipeCDを触ってみる。

https://github.com/pipe-cd/tutorial/blob/main/content/ja/30-install/01-git.md

k8sは触ったことがないので、業務でも使っているECSをPipedにデプロイしてみる(言葉の使い方が合っているのかわからない)

PipeCDとは


様々なサーバーレスプラットフォームで統一的なGitOpsを提供するProgressive Deliveryツールとある。CI/CDと略されるうちのCDを担当していて、特定の場所に配置されたアーティファクトを実際にデプロイし、ユーザーへ届けるContinuous Deliveryを担当しているツールである。(https://www.cyberagent.co.jp/way/list/detail/id=30032)

Github, JenkinsとAWS Code系サービスを組み合わせたパターンや、GithubとAWS Code系サービスを組み合わせたCI/CDパターンしか経験がないのであまり想像がつかない。が、あるサービスはk8s, 他のサービスはECSを使っているというような会社で、ノウハウを横断的に共有したいときはPipeCDを使うと嬉しいのかもしれない。

カナリアリリースやブルーグリーンデプロイメント2つのデプロイ手法を採用している。いずれも、様子を見て、閾値を超えるメトリクスがあったらすぐに戻せるという点で、プログレッシブデリバリーの概念を踏襲したリリースであり、採用理由には納得だった。

Progressive Delivery

PipeCDにはAutomated deplyment analysisという、メトリクスツールと連携して、メトリクスが設定した閾値を満たしていない場合に自動でロールバックする機能があります。これはまさにProgressive Deliveryのための機能です。

Bucketeerでは、Analysis用のテンプレートファイル (analysis-template.yaml) にリクエストのエラーレートが1%以上だと失敗となるような設定を書いています。このテンプレートをデプロイ設定ファイル (.pipe.yaml) から参照して、デプロイパイプラインに分析ステージを設定しています。

(https://developers.cyberagent.co.jp/blog/archives/30573/)

自分はデプロイ完了後、エラーが出ていないかの確認を手動で行っている(マネジメントコンソールからCloudWatchLogsを見たり、該当ページへアクセスして動作確認したりしている)ので、メトリクスに閾値を設定してControll Plainで全て完結できるのは嬉しいなと思った。

Controll Plain and Piped


pipeCDはControll PlainとシングルバイナリからなるPipedエージェントの2つで構成されている。

Pipedは任意のプラットフォーム(k8s, ECS, lambda, Cloud Run等)に搭載することができ、yamlに登録したgithub repoを監視している。もしrepoに変更が加えられると、コントロールプレーンにgRPCコールを送ってデプロイを始める。

コントロールプレーンはWebUIを提供していて、認証/認可、デプロイの状態や履歴等をみることができる。

Controll Plainは、デプロイやアプリのモデルを保存するDataStoreやログを保存するFileStoreなど、5つのコンポーネントを持つadmin画面を提供している。

それぞれのコンポーネントを駆使してデプロイの状態やpipedから送られてくるシグナルを検知したりしているらしい。

Tutorialを進める

これがControll Brain。UIを提供していて、各プラットフォームに置いたPipedの現在の状態やデプロイ履歴などをみることができる。

image.png

これがControl PlainのUIになる。UIを提供していて、各プラットフォームに置いたPipedの現在の状態やデプロイ履歴などをみることができる。

image.png

ひとまずControl Plainを立ち上げることができた。

次は、シングルバイナリのPipedエージェントをローカルで実行してみる。

image.png

インターネット接続はされてないサーバーなのでクレデンシャルはそのまま公開して大丈夫だろう。

1
2
3
791a677d-ef2c-403e-bafc-5aeed2dc90e2
gq5pli28zqw4gohv38la84fnx5g0vytun3gy0u4ge8ltt0t0br
Z3E1cGxpMjh6cXc0Z29odjM4bGE4NGZueDVnMHZ5dHVuM2d5MHU0Z2U4bHR0MHQwYnI=

pipedの実行するとエラーが出る。

1
./piped piped --config-file=./piped.yaml --insecure

なんかここら辺に原因がありそう

1
2
3
4
failed to report piped meta to control-plane, wait to the next retry    {"calls": 1}
failed to fetch from remote     {"repo-id": "tutorial-repo", "remote": "https://github.com/subaru-hello/React-Pipecd.git", "repo-cache-path": "/var/folders/5m/kds1j17j0ms1zxtpsmdrk3dm0000gn/T/gitcache2142117600/tutorial-repo", "out": "", "error": "context canceled"}
failed while running    {"error": "failed to sync events first time: failed to list events: rpc error: code = Unavailable desc = error reading from server: EOF"}
github.com/pipe-cd/pip

公式Docを見て、pipedKeyFileではなく、pipeKeyDataを指定したらpipedを起動できた(https://pipecd.dev/docs-v0.49.x/user-guide/managing-piped/configuration-reference/)

  • piped.yaml
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# This is a configuration for running a Piped. See https://pipecd.dev/docs/user-guide/managing-piped/configuration-reference/ for details.
apiVersion: pipecd.dev/v1beta1
kind: Piped
spec:
  apiAddress: localhost:8080
  projectID: tutorial
  pipedID: 791a677d-ef2c-403e-bafc-5aeed2dc90e2
  # pipedKeyFile: /Users/subaru/development/parse-check/tutorial/src/install/piped/piped.yaml. // ここをコメントアウトして、
  pipedKeyData: Z3E1cGxpMjh6cXc0Z29odjM4bGE4NGZueDVnMHZ5dHVuM2d5MHU0Z2U4bHR0MHQwYnI= // こっちを設定した
  repositories:
    - repoID: first-piped
      remote: https://github.com/subaru-hello/React-Pipecd.git # [EDIT_HERE] The HTTPS URL of your repository.
      branch: main
  syncInterval: 15s
  platformProviders:
    # [EDIT_HERE] Unco

起動時のログ

1
2
3
4
5
6
successfully collected and reported metrics    {"duration": 0.122166167}
there was no config file for Event Watcher in .pipe directory   {"repo-id": "first-piped", "error": "not found"}
configuration for Event Watcher in application configuration not found  {"repo-id": "first-piped"}
found 0 candidates: 0 commit candidates and 0 out_of_sync candidates
found out 0 valid registered applications that config has been changed in repository "first-piped"
found out 0 valid unregistered applications in repository "first-piped"

起動したらpipedがonlineになる。

References

https://developers.cyberagent.co.jp/blog/archives/30573/
https://dev.classmethod.jp/articles/getting-started-pipecd/
https://zenn.dev/cadp/articles/piped-on-ecs?redirected=1
https://dev.classmethod.jp/articles/terraform-deploy-pipeline-tool/
https://developers.cyberagent.co.jp/blog/archives/41612/

共有

octpsubaru
著者
subaru
Web Developer