Kanji
・クラウドエンジニア / フリーランス ・1993年生まれ ・愛媛県出身 / 東京都渋谷区在住 ・AWS歴5年 プロフィールの詳細
目次
# ① 環境差分となる設定値を定義 substitutions: _CPU: "1" _MEMORY: "256Mi" _MAX_INSTANCES: "1" _MIN_INSTANCES: "1" _REGION: "asia-northeast1" steps: # ② Dockerイメージのビルド/プッシュ - name: "gcr.io/cloud-builders/docker" args: ["build", "-t", "${_REGION}-docker.pkg.dev/${PROJECT_ID}/${REPO_NAME}/prod:${COMMIT_SHA}", "."] - name: "gcr.io/cloud-builders/docker" args: ["push", "${_REGION}-docker.pkg.dev/${PROJECT_ID}/${REPO_NAME}/prod:${COMMIT_SHA}"] # ③ Cloud Runのデプロイ - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk' entrypoint: bash args: - -c - | gcloud run deploy \ ${REPO_NAME} \ --image ${_REGION}-docker.pkg.dev/${PROJECT_ID}/${REPO_NAME}/prod:${COMMIT_SHA} \ --cpu=${_CPU} \ --memory=${_MEMORY} \ --max-instances=${_MAX_INSTANCES} \ --min-instances=${_MIN_INSTANCES} \ --region ${_REGION} # ④ Artifactsの世代管理処理 - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk' entrypoint: bash args: - -c - | apt -y install jq five_minutes_ago=$(date -d '5 minutes ago' +%Y-%m-%dT%H:%M:%S) for image in `jq -c ".[]"<<<$(gcloud artifacts docker images list ${_REGION}-docker.pkg.dev/${PROJECT_ID}/${REPO_NAME} --format json --filter "updateTime<${five_minutes_ago}")`; do gcloud artifacts \ docker \ images \ delete \ ${_REGION}-docker.pkg.dev/${PROJECT_ID}/${REPO_NAME}/prod@$(jq -r ".version"<<<$image;) \ --delete-tags \ --quiet done
環境差分となりそうな Code Build のスペックや展開先のリージョンを substitutions へ定義しました。
substitutions
デプロイコマンドへ含めるよりも、パラメータが見やすくなるメリットがあります。
ビルド/デプロイ処理は同一のファイルで定義し、パラメータファイルを分離したい場合は別途処理を考える必要があります。
Docker コマンドを利用して、イメージのビルドと Artifacts にイメージをプッシュしています。
ビルド時間を短縮したい場合は、 docker build コマンドのステップを追加し、 –cache-from オプションを指定して古いイメージを利用すれば OK です。
docker build
–cache-from
Artifacts 自体には現状世代管理機能がないので、イメージを定期的に削除する必要があります。
サンプルでは最新のイメージ以外を削除していますが、必要に応じて複数世代のイメージを残すように処理を変更ください。