こんにちはかみむらです。以前こんな記事を書きました。
この記事では手動でCloud Runにデプロイしてました。しかし、実際に運用していく場合はCIを使ったテストやデプロイの自動化が必須になってきます。そこで今回はGCPのサービスの一つであるCloud Buildを使って、コンテナイメージのビルドとデプロイの自動化をしていきます。
ベースとなるプロジェクトは、以前の記事で使ったリポジトリを使用します。こちらからcloneしてください。
Cloud Buildの設定ファイルを追加
まずはCloud Buildの設定ファイルを作成します。こちらがファイルの全体像です。いくつか重要なところにコメントアウトしたので、見ていきましょう。
cloudbuild.yaml
steps: - name: 'gcr.io/cloud-builders/yarn' args: ['install'] #Build image - name: 'gcr.io/cloud-builders/docker' dir: . args: [ 'build', '-t', 'gcr.io/$PROJECT_ID/${_IMAGE_NAME}:${_TAG}', '.' ] #Push image - name: 'gcr.io/cloud-builders/docker' args: ["push", 'gcr.io/$PROJECT_ID/${_IMAGE_NAME}'] #Deploy image - name: 'gcr.io/cloud-builders/gcloud' id: 'deploy-cloud-run' args: ['beta', 'run', 'deploy', '${_SERVICE_NAME}', '--image', 'gcr.io/$PROJECT_ID/${_SERVICE_NAME}', '--region', '${_REGION}','--platform', 'managed','--allow-unauthenticated'] substitutions: _REGION: us-central1 _SERVICE_NAME: node-image _IMAGE_NAME: node-image _TAG: latest
コンテナイメージのビルド
#Build image - name: 'gcr.io/cloud-builders/docker' dir: . args: [ 'build', '-t', 'gcr.io/$PROJECT_ID/${_IMAGE_NAME}:${_TAG}', '.' ]
コンテナイメージは-tフラグを付けることで、名前付きでビルドができます。これは下記のコマンドと同じになります。$PROJECT_IDはデフォルトで、プロジェクトIDが置換されます。
$ docker build -t gcr.io/$PROJECT_ID/node-image:latest
コンテナイメージの登録
ビルドしたコンテナイメージをContainer Registryに登録します。
#Push image - name: 'gcr.io/cloud-builders/docker' args: ["push", 'gcr.io/$PROJECT_ID/${_IMAGE_NAME}']
コンテナイメージのデプロイ
そして、Cloud Runにコンテナイメージをデプロイします。
#Deploy image - name: 'gcr.io/cloud-builders/gcloud' id: 'deploy-cloud-run' args: ['beta', 'run', 'deploy', '${_SERVICE_NAME}', '--image', 'gcr.io/$PROJECT_ID/${_SERVICE_NAME}', '--region', '${_REGION}','--platform', 'managed','--allow-unauthenticated']
substitutionsの登録
substitutionsで特定の変数を置換することができます。例えば、substitutionsで定義した_REGIONは${_REGION}として扱うことができます。変数値はアンダースコアで始まり、大文字と数字のみを使用できます。
substitutions: _REGION: us-central1 _SERVICE_NAME: node-image _IMAGE_NAME: node-image _TAG: latest
ここまでcloudbuild.yamlの内容を見てきましたが、実際にやってることは非常に単純です。次にCloud Buildでデプロイするための権限設定を行います。
権限設定
Cloud Runへデプロイするためには権限を設定する必要があります。GCP
のダッシュボードからCloud Build > 設定のページにいきます。そして、Cloud Runを有効にします。
ここではすべてのサービスアカウントにアクセス権を付与します。しかし、すべてのアカウントに権限を与えるのはあまりよくありません。実際にはIAMを使って、権限を振り分けます。IAMについては下記のリンクを参照してください。
Cloud Buildでデプロイ
これでデプロイするための準備ができました。gcloudで下記のコマンドを実行します。
$ gcloud builds submit --config cloudbuild.yaml
ビルドに成功した後、GCPのダッシュボードからCloud Runのページを見てみると、無事デプロイに成功してることが確認できます。
GitHubとの連携
最後にGitHubと連携していきます。まずは今回作成したプロジェクトをGitHubにプッシュしてください。
そして、GCPのダッシュボードからCloud Buildのページに移動して、リポジトリを接続をクリックします。
GitHubを選択後、GitHubのリポジトリを編集から今回プッシュしたリポジトリを選択してください。そしてリポジトリを接続をクリックします。
そして、pushトリガーを作成をクリックします。
トリガーを作成することができました。実際にトリガーを実行をクリックして実行してみましょう。
これでGitHubと連携ができました。現在の設定では、いずれかのブランチにプッシュするとCloud Buildが開始して、最新のコンテナイメージをCloud Runにデプロイすることができます。