PipeCDを使ったGitOpsによる継続的デリバリー
PipeCDを使いGitOpsによる継続的デリバリーを構築し体験してみましょう。まず今回構築するソフトウェアデリバリーの全体像を見てください。
GitHub Actionsで継続的インテグレーションをし、PipeCDで継続的デリバリーをします。Hello Appリポジトリはアプリケーションコードを管理するリポジトリです。このリポジトリではプルリクエスト(PR)を出すとビルドとテストが走ります。PRが承認されmainブランチにマージされるとDockerイメージを作成し、GitHub Packages Container registry(GHCR)[注2]に作成したイメージをプッシュします。Hello App Configリポジトリはアプリケーションの設定を管理するリポジトリです。このリポジトリではデプロイするアプリケーションのイメージタグなどが記述されているKubernetesのManifestファイルを管理しています。GitOpsではアプリケーションコードを管理するリポジトリとアプリケーションの設定を管理するリポジトリを分けるのが良いプラクティスです。
PCで動くKubernetesクラスターではpipecd、piped、dev、prodという4つのネームスペースが存在します。pipedネームスペースではPipedエージェントが動作していて、Hello App Configリポジトリの変更を監視しています。変更があれば、pipecdネームスペースで動作するPipeCDコントロールプレーンに通知します。そしてdevネームスペースやprodネームスペースにHello Appをデプロイします。この時、Hello App Configリポジトリで記載されたバージョンでDockerイメージを取得してHello Appが起動します。デプロイの様子はコントロールプレーンで提供されるPipeCD Web UIから確認します。
今回はKubernetesやHelm、GitHub Actions、サンプルアプリケーションのコードに関しての説明は省きます。
[注2] GitHub Packagesの機能として提供されるコンテナレジストリです。
事前準備
事前に以下の準備が必要です。
- Kubernetesクラスター(今回はDocker Desktopを使っています[注3])
- kubectlのインストール
- helm v3のインストール
- GitHubアカウント
[注3] Docker Desktopは2021年9月より、個人利用、教育機関、非商用のオープンソースプロジェクトのみ無料です。
コントロールプレーンの構築
PipeCDのコントロールプレーンを手元のPCで動くKubernetesクラスター上に構築していきます[注4]。次のコマンドを実行しmanifestsリポジトリをクローンしてください。
$ git clone -b v0.16.0 https://github.com/pipe-cd/manifests.git $ cd manifests
manifestsリポジトリにはPipeCDを試すための設定ファイルがあります[注5]。次のコマンドでPipeCDコントロールプレーンをインストールします[注6]。
$ helm -n pipecd install pipecd ./manifests/pipecd --dependency-update --create-namespace \ --values ./quickstart/control-plane-values.yaml
PipeCD Web UIにアクセスするために次のコマンドを実行します。
$ kubectl -n pipecd port-forward svc/pipecd 8080
ブラウザからhttp://localhost:8080/にアクセスできることを確認してください。次のような画面が表示されます。
Project Nameにquickstartと入力し、CONTINUE→ボタンを押してください。Usernameにhello-pipecd、Passwordにもhello-pipecdと入力しLOGINボタンを押すとPipeCDのWeb UIへログインができます。
以上でコントロールプレーンの構築を終わります。次にアプリケーションのデプロイを実行するpipedをインストールします。
[注4] PipeCDは複数プロジェクトで利用できる設計なので、実際に運用する時はコントロールプレーンを管理する専用の組織がいると良いでしょう。
[注5] ファイルストアとしてGCSやAWS S3も使えます。
[注6] クラスター上にファイルストアとしてMINEOが、データベースとしてMySQLが起動するため、PC再起動などで全ての設定が消えることに注意してください。
