前にGitHub ActionsでやっていたやつのCloud Build+Cloud Run版。
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"
以上!!
参考にしたサイト様
- gcloud builds submit | Cloud SDK のドキュメント | Google Cloud
- ビルド構成の概要 | Google Cloud
- Dockerfileの"ENV"と"ARG"と"環境変数"について | レコチョクのエンジニアブログ
- Docker で環境変数をホストからコンテナに渡す方法(ホスト OS 側からゲスト OS に渡す方法各種) - Qiita
- ビルド構成の概要 | Cloud Build のドキュメント | Google Cloud
- cloud-builders/docker at master · GoogleCloudPlatform/cloud-builders
- Nuxt(SSR)をCloud Runに自動デプロイする(GitHub連携) - くらげになりたい。