こんばんは
12/1 - 12/25でCyber Agentの就業型インターンCA Tech Jobに参加していました。
今回、OSSである継続的デリバリーツールPipeCDの開発を行いました。配属先はDeveloper Productivity室になります。
生産性を向上させ”最高の開発体験”を。 開発者のための「Developer Productivity室」を設立
本日、Developer Productivityチームが新しい継続的デリバリー(CD)ツールである「PipeCD」をOSSとして公開しました🎉#kubernetes #devops #gitops #terraform #continuousdelivery #serverless #istio #golang #sre https://t.co/wW7e6Fp58n
— CyberAgentDevelopers (@ca_developers) October 6, 2020
PipeCDとは
PipeCDとは前述のように「継続的デリバリー(CD)ツール」です。同じ種別に入るツールとしてはArgoCD、FluxCDなどが挙げられます。
GitOpsをベースの思考とするCDツールにはまだこれが定番っしょ!のようなデファクトのツールが定まりきっていない感じがしています。PipeCDの以下のページに他のツールとの比較が記載されています。
- What are the differences between PipeCD and FluxCD?
- What are the differences between PipeCD and ArgoCD?
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!!!