Open2

Cloudbuild から GCR へ 複数の tag をつけて pushする方法

基本 latest か 個別の 認識タグで GCR の運用するときに、build した image に複数のタグつけて 最初の一回 で一緒に push したい願望!
SDK で add-tag あるけど一度でしたいw

Cloudbuild.yaml

steps:
  - name: 'gcr.io/cloud-builders/docker'
    args: [
          'build', 
          '-t', 'gcr.io/$PROJECT_ID/scala-sbt:$SHORT_SHA', 
          '-t', 'gcr.io/$PROJECT_ID/scala-sbt:latest',
          '--cache-from', 'gcr.io/$PROJECT_ID/scala-sbt:latest',
          '-f', 'Dockerfile', '.'
        ]
    env:
      'SHORT_SHA=$SHORT_SHA'
  - name: 'gcr.io/cloud-builders/docker'
    args: ['push', 'gcr.io/$PROJECT_ID/scala-sbt']
images:
  - 'gcr.io/$PROJECT_ID/scala-sbt:latest'
tags: ['cloud-builders-community']

Dockerfile

FROM amazoncorretto:11-alpine

ARG SBT_VERSION=1.4.4

RUN apk update && \
  apk add curl && \
  apk add bash && \
  curl -L -o sbt-${SBT_VERSION}.tgz https://github.com/sbt/sbt/releases/download/v${SBT_VERSION}/sbt-${SBT_VERSION}.tgz && \
  tar -xvzf sbt-${SBT_VERSION}.tgz && \
  rm sbt-${SBT_VERSION}.tgz

ENV PATH $PATH:/sbt/bin

RUN sbt -V

CMD [ "sh" ]

git の short hash, $SHORT_SHAとlatestをビルドした際につける。

'-t', 'gcr.io/$PROJECT_ID/scala-sbt:$SHORT_SHA', 
'-t', 'gcr.io/$PROJECT_ID/scala-sbt:latest',

$SHORT_SHA は cloudbuild上では default substitutions として値があるが手元からsubmit するときは 定義する。

env:
      'SHORT_SHA=$SHORT_SHA'

submit command

# 環境変数の設定
GCP_PROJECT=$(gcloud config get-value project) # $PROJECT_ID
SHORT_SHA=$(git rev-parse --short HEAD) # tag の 値

# 
gcloud builds submit . --config cloudbuild.yaml \
--substitutions=SHORT_SHA=$SHORT_SHA

設定した値がないと

Step #0: invalid argument "gcr.io/{GCP_PROJECT_ID}/scala-sbt:" for "-t, --tag" flag: invalid reference format
ログインするとコメントできます