created: 2021-06-07T14:05:28.000Z
CloudBuild で CloudRun のデプロイをする。ブランチ名によってはstagingにデプロイされるようにする。
Cloud Build には Build と Trigger の2種類のエンティティがある。
- Build は
step
の設定に沿って実行した実行履歴1つ分 - Trigger は、どういうときに Build が実行されるかを設定するもの
トリガー
GitHub に push したら処理を動かすように Trigger を設定したい場合はこんなコマンドで登録する。
$ gcloud beta builds triggers create github ...
# どんなオプションが渡せるかはhelpで出てくる
$ gcloud beta builds triggers create github --help
GCPのUIでトリガーをつくったときはこうすれば yaml で定義をみられる。
$ gcloud beta builds triggers list
createTime: '2020-05-06T13:01:33.647678872Z'
description: master ブランチへの push
filename: site/www/cloudbuild.yaml
github:
name: myapp
owner: githubusername
push:
branch: ^master$
id: xxxxxxxx-362f-44a3-b7ed-79c3c61e041a
name: master-push-trigger
substitutions:
_SERVICE: master
tags:
- github-default-push-trigger
こんな設定になっている。
^master$
に引っかかるブランチ (master ブランチ) にpushしたとき_SERVICE=master
という変数名を埋め込んでsite/www/cloudbuild.yaml
に記述されているビルドステップを実行する
もう1つトリガーを作る。そちらはこんな設定をしている。(一部抜粋)
...
github:
push:
branch: ^canary/
substitutions:
_SERVICE: canary
...
これはつまり、canary/
という名前で始まるブランチが push されたら、 canary のアプリがデプロイされるという設定になっている。
cloudbuild.yaml
トリガーによって何が実行されるべきかを書くのが cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/docker'
id: 'docker-pull'
# $PROJECT_ID はCloudbuild組み込みの環境変数
# $_SERVICE はユーザ定義の環境変数 (`_`で始まる必要がある)
args: ['pull', 'asia.gcr.io/$PROJECT_ID/$_SERVICE:latest']
- name: 'gcr.io/cloud-builders/docker'
id: 'docker-build'
args: [ 'build',
'--cache-from', 'asia.gcr.io/$PROJECT_ID/$_SERVICE:latest',
'--tag', 'asia.gcr.io/$PROJECT_ID/$_SERVICE:$REVISION_ID',
# リポジトリの /site/www/Dockerfile を使ってビルドする
'site/www'
]
- name: 'gcr.io/cloud-builders/docker'
id: 'docker-tag'
args: ['tag',
'asia.gcr.io/$PROJECT_ID/$_SERVICE:$REVISION_ID',
'asia.gcr.io/$PROJECT_ID/$_SERVICE:latest'
]
- name: 'gcr.io/cloud-builders/docker'
id: 'docker-push'
args: ['push', 'asia.gcr.io/$PROJECT_ID/$_SERVICE']
- name: 'gcr.io/cloud-builders/gcloud'
id: 'cloudrun-deploy'
# _SERVICE はユーザ定義の変数
# pushしたブランチによってデプロイ先が変わるようにトリガーに設定している
args: ['beta', 'run', 'deploy', '$_SERVICE',
# さきほどタグをつけたイメージからデプロイ
'--image', 'asia.gcr.io/$PROJECT_ID/$_SERVICE:$REVISION_ID',
'--region', 'asia-northeast1',
# anthos とかが指定できる。デフォルトも managed
'--platform', 'managed',
# wwwに公開する場合は権限がなくてもアクセスできることを明示する
'--allow-unauthenticated'
]