📝
GAEのデプロイ環境をjenkinsからCloud Buildに移行
はじめに
AppEngineのデプロイ環境をjenkinsからCloudBuildに移行したので、備忘録として記載します。
環境情報はこちら
・リポジトリ:GitHub
・フレームワーク:Laravel6.0/php7.3(あんまり関係ない)
やること
やることは以下の3点です。
- 準備(IAMの権限設定など)
- SecretManagerに機密データを格納
- CloudBuildのトリガー作成
1. 準備
IAM権限付与
CloudBuildサービスアカウントに必要なIAM権限を付与します。
確認した結果、必要なIAM権限は以下でした。
- AppEngineサービス管理者:任意
デプロイ後、トラフィックを自動で切り替える際に必要。
本番環境など、必ず手動で切り替えたい場合はあえて権限付与しないのもあり。 - AppEngineデプロイ担当者:必須
- CloudBuildサービスアカウント:必須
- SecretManagerのシークレットアクセサー:任意
シークレットにアクセスする場合は必要。 - サービスアカウントユーザー:必須
参考(公式)
GitHubにGoogleCloudBuildをインストール
こちらから設定できます。
CloudBuildとGitHubの連携に必要です。
自分の参加しているリポジトリすべて、またはリポジトリごとに個別にインストールできます。
必要最低限にしたかったので、個別にインストールしました。
2. SecretManagerに機密データを格納
機密データをSecretManagerで管理し、デプロイ時に参照します。
今回はapp.yamlの内容をSecretManagerに格納し、デプロイ時にapp.yamlを書き出してみます。
「app」という名前で登録しました。
3. CloudBuildのトリガー作成
手動で実行できるトリガーを作成します。
- 名前やリージョンは任意で、イベントを「手動呼び出し」に指定します。
- ソースとブランチを指定します。
GitHubを選択→認証
リポジトリとブランチを選択
※事前準備の「GoogleCloudBuildをインストール」を行っていない場合、ここでインストールを求められます。
- 構成の形式とロケーションを設定します。
形式:Cloud Build 構成ファイル(yaml または json)
ロケーション:インライン→エディターを開いて、以下のYAML構文を入力
steps:
## シークレット(app)を取得して、backendディレクトリ配下に書き出し
- name: gcr.io/cloud-builders/gcloud
entrypoint: 'bash'
args: [ '-c', "gcloud secrets versions access latest --secret=app --format='get(payload.data)' | tr '_-' '/+' | base64 -d > backend/app.yaml" ]
## backendディレクトリでデプロイ
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: 'bash'
dir: backend
args: ['-c', 'gcloud config set app/cloud_build_timeout 900 && gcloud app deploy']
timeout: '900s'
- 詳細設定
デフォルト
以上でトリガー作成が完了しました。実行ボタンから手動実行できます。
おわり。
おまけ
デプロイ時のパラメータを都度切り替えたい
_DEPLOY_OPTION
変数を追加して、必要に応じてデプロイオプションを設定できるようにしてみます。
- YAMLを更新
gcloud app deploy
の後ろに${_DEPLOY_OPTION}
を追加して、変数の値を取得できるようにします。
steps:
## backendディレクトリ配下にapp.yamlを書き出し
- name: gcr.io/cloud-builders/gcloud
entrypoint: 'bash'
args: [ '-c', "gcloud secrets versions access latest --secret=app --format='get(payload.data)' | tr '_-' '/+' | base64 -d > backend/app.yaml" ]
## backendディレクトリでデプロイ
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: 'bash'
dir: backend
args: ['-c', 'gcloud config set app/cloud_build_timeout 900 && gcloud app deploy ${_DEPLOY_OPTION}']
timeout: '900s'
-
代入変数を設定
_DEPLOY_OPTION
変数を追加します。
値1はデフォルト値なので、入れても入れなくてもOK。
-
実行
実行時、変数の値入力欄が表示されるので、任意のパラメータを指定して実行します。
今回は「--no-promote」を指定してみます。
実行後、インスタンスのバージョンを確認。
--no-promoteが効いてる(トラフィックが自動で切り替わってない)ことを確認できました。
参考にさせていただいた記事
感謝🙏🙏🙏
Discussion