以下の例は、環境をプロジェクトで別けていて、develop
/ production
といったサフィックスを持っているという想定です。
環境の変数名は適当に PROJECT_ENV
にしてます。
まず、Dockerfile
に以下を追記します。
Dockerfile
# ...略...
# PROJECT_ENV という引数を受け取れるようにする
ARG PROJECT_ENV
# 環境変数 PROJECT_ENV に 引数で受け取った値を横流しする
# 環境変数として使う必要がなければ不要
ENV PROJECT_ENV $PROJECT_ENV
# ...略...
cloudbuild.yaml
を用意します。
gcloud builds submit
コマンドで完結させたかったんですが、どうやらできないようです。
cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/docker'
args:
[
'build',
'--build-arg',
'PROJECT_ENV=$_PROJECT_ENV', # substitutions に指定されている変数を `docker build` に横流しする
'-t',
'gcr.io/your-project-${_PROJECT_ENV}/your-service-name',
'.'
]
substitutions:
_PROJECT_ENV: develop # 変数のデフォルトの値を指定
images: ['gcr.io/your-project-${_PROJECT_ENV}/your-service-name']
ビルド関連の準備が整ったので、Makefile
を書きます。
Makefile
# 環境変数のデフォルトの値を指定
PROJECT_ENV=develop
pre:
# e という arg を受け取っていたらその文字列を代入
# - 実際に運用するときは develop / production など、
# 特定の文字列しか受け取れないようにする処理とかを入れたほうがいいかも
ifdef e
PROJECT_ENV=${e}
endif
deploy-setup: pre
gcloud config set project your-project-${PROJECT_ENV} ;
deploy: pre
@make deploy-setup ;\
cd ./path/to/your-app ;\
gcloud builds submit --config=cloudbuild.yaml \ # 用意しておいた yaml を使って build する
--substitutions=_PROJECT_ENV="${PROJECT_ENV}" ;\ # substitutions の _PROJECT_ENV に値を横流しする
gcloud run deploy your-service-name \
--image gcr.io/your-project-${PROJECT_ENV}/your-service-name \
--platform managed \
--region asia-northeast1 ; # region はテキトー
これで、
$ make deploy
で develop 環境へのデプロイ、
$ make deploy -e=production
で production 環境へのデプロイが可能になります。
終
制作・著作
━━━━━
ⓁⓈⓅ