CyberAgentでOSS「PipeCD」の開発をしてきた

December 25, 2020

こんばんは

12/1 - 12/25 で Cyber Agent の就業型インターン CA Tech Job に参加していました。

今回、OSS である継続的デリバリーツールPipeCDの開発を行いました。配属先は Developer Productivity 室になります。

生産性を向上させ”最高の開発体験”を。 開発者のための「Developer Productivity 室」を設立

PipeCD とは

PipeCD とは前述のように「継続的デリバリー(CD)ツール」です。同じ種別に入るツールとしてはArgoCDFluxCDなどが挙げられます。

GitOps をベースの思考とする CD ツールにはまだこれが定番っしょ!のようなデファクトのツールが定まりきっていない感じがしています。PipeCD の以下のページに他のツールとの比較が記載されています。

Kubernetes 以外のデプロイもサポートされているなど、後発であるからこその強みを生かし、既存の CD ツールの欲しかった機能が最初の段階で設計されていることがわかります。

そして今回僕が開発を行なったのは上記の比較の中にも登場しているInsightの機能です。

担当した issue は以下になります。

Add support for insights feature #1142

Insights について

Based on executed deployment data, PipeCD provides the graphs at the Insights page that helps you understand the delivery performance of a single application or your whole project. https://pipecd.dev/docs/user-guide/insights/

このように delivery のパフォーマンスを把握するための指標となるグラフが Insights の機能です。

現状サポートする予定となっているのは以下のメトリクスです。

  • Lead Time for Changes: How long does it take to go from code committed to code successfully running on production.
  • Deployment Frequency: How often does your application/project deploy code to production.
  • Mean Time To Restore: How long does it generally take to restore service when a service incident occurs.
  • Change Failure Rate: How often deployment failures occur in production that requires an immediate remedy (fix, rollback…).

これらの指標はThe Accelerate State of DevOps Reportに記載のある PERFORMANCE METRICS に則ったものです。

今回は Insights の全般の実装に加え、メトリクスとしてDeployment Frequency,Change Failure Rateの実装を担当しました。

具体的な設計

Insights を実現するために必要なものは以下です。

  • 定期的に Deployment の情報を集計/解析して DB に保存する InsightCollector
  • フロントエンドからのリクエストで上記の情報を返す WebAPI(gRPC)

PipeCD では Deployment の情報が Database に保存されています。そこからメトリクス別に集計を行い、DB に保存します。それをグラフに表示するといった流れになります。

やったこと

この PR で protobuf のスキーマを定義しています。

この PR で一旦仮の実装を整えました。この実装ではリクエストのたびに集計を行なっています。

この PR で insight 用の filestore 周りの実装を完了させています。

この PR で実際に insight collector を作成しています。定期的に Deployment の集計/解析を行い先程の insight 用の filestore を使用して永続化するといったことを行なっています。

この PR で insight collector が収集したデータを実際に filestore から取得し API で返しています。

insight の API に cache を実装しています。

インターンを通して

これまではバグ fix レベルでしか OSS に対する contribute を投げたことがなく、ガッツリ新規の機能を最初から開発するということは初経験でした。 また、12 月の最初の方のみ出社をしていて、CyberAgent の雰囲気も知れ、とても楽しかったです。

終わりに

pipe-cd adminのみなさん 1 ヶ月間大変お世話になりました!!

PipeCD は OSS なので誰でも contribute を行うことができます。Let’s contribute!!!

pipe-cd/pipe - GitHub

最終出社日に撮った写真

このエントリーをはてなブックマークに追加