くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

Cloud Build+Cloud Runでタグ名を環境変数に設定する

前にGitHub ActionsでやっていたやつのCloud Build+Cloud Run版。

www.memory-lovers.blog

Cloud RunだとDockerが絡むので、ちょっと面倒。。

全体の流れ

  • Cloud Buildだと、環境変数($TAG_NAME)からタグ名を取得できる
  • Cloud Runだとdocker buildしないといけない
  • なので、docker build時に--build-argを使って、$TAG_NAMEをARGに引き渡す

Dockerfile

Dockerfileはこんな感じ。

  • ARG VERSION=latestで初期値を設定
  • FROM以後、ARG VERSIONで値を取得
  • ENV VERSION $VERSION環境変数に設定
# Dockerfile
# *** VERSION引数の初期値を設定 ***
ARG VERSION=latest

FROM node:12

# *** VERSION引数を取得 ***
ARG VERSION

# コンテナ内のwork dirを設定
WORKDIR /src

# 環境変数を設定し、ポートとホストを指定
ENV PORT 8080
ENV HOST 0.0.0.0

# *** VERSION引数の値を環境変数として設定 ***
ENV VERSION $VERSION

# package.jsonをコピーして、パッケージのインストール
COPY package.json ./
RUN npm install

# ソースをコピーして、ビルド
COPY . .
RUN npm run build

# コンテナが起動したら、nuxtを起動するよう指定
CMD [ "npm", "run", "start" ]

cloudbuild.yaml

cloudbuild.yamlはこんな感じ。

  • substitutionsの_TAG_NAME: "$TAG_NAME"でタグ名を取得
  • `"--build-arg VERSION=$_TAG_NAME"でDockerfile側に渡す
# cloudbuild.yaml
steps:
  # Build the container image
  - name: docker
    id: Build
    args:
      - build
      - "--no-cache"
      - "-t"
      - "$_GCR_HOSTNAME/$PROJECT_ID/$_SERVICE_NAME:$COMMIT_SHA"
      - .
      - "-f"
      - "Dockerfile"
      # *** docker build時にタグ名をVERSIONとして設定 ***
      - "--build-arg"
      - "VERSION=$_TAG_NAME"
  # ... 略
images:
  - "$_GCR_HOSTNAME/$PROJECT_ID/$_SERVICE_NAME:$COMMIT_SHA"
options:
  substitutionOption: ALLOW_LOOSE
substitutions:
  _TAG_NAME: "$TAG_NAME"

以上!!

参考にしたサイト様