CloudBuild から GKE にかんたんにデプロイする
kustomize じゃない
めんどすぎるぞ
---.icon
GitOps にはしたい
kustomize 使いたい
staging のテストが通ったら dev クラスタへ反映する
Cloud IAM で Cloud Build サービスエージェントにロールを付与しておく CloudBuild の Artifact、images: ... を使わない、途中で push する
case で書いてるのはほんとはもっと場合分けがあったり追加の処理があるからです
1行ぐらいなら inline で if にするけど、数行あるなら YAML の Array の要素にヒアドキュメント入れたほうが見やすい
code:cloudbuild.yaml
steps:
# イメージのビルド
- name: 'gcr.io/cloud-builders/docker'
args: [
'build',
'--tag=gcr.io/$PROJECT_ID/app:$SHORT_SHA',
'--file=./docker/app/Dockerfile',
'.'
]
# テストとか
- name: 'docker/compose:1.27.4'
args: [
'-f', 'docker-compose.yaml',
'-f', 'docker-compose.test.yaml',
'run', 'app'
]
env:
- COMPOSE_DOCKER_CLI_BUILD=1
# image の push
# $SHORT_SHA を tag にして push
# staging, master などで tag の向き先を更新して push したいなら以下みたいにする
# docker tag gcr.io/$PROJECT_ID/app:$SHORT_SHA gcr.io/$PROJECT_ID/app:$BRANCH_NAME
# docker push gcr.io/$PROJECT_ID/app:$BRANCH_NAME
# 作った staging イメージを↑の step で --cache-from=gcr.io/$PROJECT_ID/app:staging などするとビルドも速くなる
- name: 'gcr.io/cloud-builders/docker'
entrypoint: 'bash'
args:
- '-c'
- |
case "$BRANCH_NAME" in
staging|master)
docker push gcr.io/$PROJECT_ID/app:$SHORT_SHA
;;
esac
# deploy to GKE
# brach と manifest ディレクトリ, クラスタの対応を書いてもいいかも
# $ で参照したら Cloud Build が置き換えに来る? のかどうかが気になる
- name: 'gcr.io/$PROJECT_ID/kustomize:v3.8.7'
entrypoint: 'bash'
args:
- '-c'
- |
case "$BRANCH_NAME" in
staging)
gcloud container clusters get-credentials --zone "$$GKE_ZONE" "$$GKE_CLUSTER"
# KMS で復号など、apply 前にやる必要のある処理
(cd ./manifest; make decrypt)
# ...
cd ./manifest/overlays/dev
kustomize edit set image gcr.io/$PROJECT_ID/app:$SHORT_SHA
kustomize build . | kubectl diff -f -
kustomize build . | kubectl apply -f -
;;
esac
env:
- GKE_ZONE=asia-northeast1
- GKE_CLUSTER=dev