Gitと連携して、develop(ステージング環境)とmaster(本番環境)にPushされると自動デプロイされるようにしたため、紹介します。
目次
Cloud BuildでGitの変更を検知し、GAEへ自動デプロイする構成図
構成図は上記の通りです。
Git(今回はBitBucket)のdevelop/masterブランチにPushされるとCloud Buildがソースの変更を検知し、GAEに自動でデプロイしてくれるといった感じです。
Cloud Source Repositoryで管理するGitのリポジトリを登録する
GCPのナビゲーションメニューからSource Repositoryを選択し、「リポジトリの追加」をクリックします。
今回は既にBitBucketにリポジトリがあるため、「外部リポジトリの接続」を選択します。
あとはプロジェクトIDを入力し、指定したGitプロパイダ(GitHub・BitBucket)を選択し、登録します。これで、GitとGCPが連携されました。
Cloud Buildでトリガーを作成
次にCloud Buildでトリガーを作成します。GCPのナビゲーションメニューからCloud Buildを選択し、「トリガーを作成」をクリックします。
リポジトリは、先ほど登録したGitのリポジトリを選択します。
トリガーのブランチは今回は本番環境なら「master」、ステージング環境なら「develop」にしています(本来は本番環境が「master」、ステージング環境が「staging」、開発環境が「develop」)。
ビルド設定は、「Cloud Build 構成ファイル(yaml または json)」を選択し、リポジトリのルーてディレクトリ配下にcloudbuild.yamlを作成します(本番環境はcloudbuild-production.yaml、ステージング環境はcloudbuild-staging.yaml)。
代入変数を設定することで、ビルドコマンドの変数として値を入れることができます。環境ごとに設定することでどの環境をデプロイしているかを確認することができます。
cloudbuild.yaml
1 2 3 4 5 6 7 | steps: - name: 'alpine' args: ['echo', '${_ENVIRONMENT}'] - name: 'gcr.io/cloud-builders/gsutil' args: ['cp', 'env-production', '.env'] - name: 'gcr.io/cloud-builders/gcloud' args: ['app', 'deploy'] |
以下に公式のビルド構成ファイルの書き方があるので参考にしましょう。
どの環境をデプロイしているかを出力し、.envファイルを本番環境用に設定し、デプロイといった流れです。
ビルド構成ファイルのスキーマ | Cloud Build Documentation | Google Cloud
これで、設定完了。あとは該当ブランチにPushすれば自動デプロイされます。
またビルド履歴から、ちゃんとデプロイが成功しているかを確認できます。
Cloud Buildデプロイ時のエラー対処法
ERROR: (gcloud.app.deploy) User [xxxxxxxxxxx] does not have permission to access app [xxxxxxxxxxxx]
こんなエラーが出たら、「IAMと管理」からデプロイしているユーザに以下の権限(役割)を追加してあげましょう。
- App Engine 管理者
- ストレージ管理者
- Cloud Build 編集者
App Engine Admin API has not been used in project xxxxxxxxxx before or it is disabled.
こんなエラーが出たら、「APIとサービス」から「App Engine Admin API」を有効にすると正常に動作します。