🐈
Cloud Run自動デプロイ簡単ガイド
Cloud Run 自動デプロイ
Flow
Githubのブランチにプッシュされると、イメージをビルドしてArtifact Registryに登録し、Cloud Runにデプロイします
Sample
Dockerfile,cloudbuild.yamlをリポジトリのルートディレクトリに配置します。
Dockerfile
# syntax=docker/dockerfile:1
##
## Build
##
FROM golang:1.16-buster AS build
WORKDIR /app
COPY go.mod ./
COPY go.sum ./
RUN go mod download
COPY *.go ./
RUN go build -o /docker-gs-ping
##
## Deploy
##
FROM gcr.io/distroless/base-debian10
WORKDIR /
COPY /docker-gs-ping /docker-gs-ping
EXPOSE 8080
USER nonroot:nonroot
ENTRYPOINT ["/docker-gs-ping"]
cloudbuild.yaml
steps:
# Build the container image
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', '${_IMAGE_NAME}:$COMMIT_SHA', '.']
# Push the container image to Container Registry
- name: 'gcr.io/cloud-builders/docker'
args: ['push', '${_IMAGE_NAME}:$COMMIT_SHA']
# Deploy container image to Cloud Run
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: gcloud
args:
- 'run'
- 'deploy'
- '${_SERVICE_NAME}'
- '--image'
- '${_IMAGE_NAME}:$COMMIT_SHA'
- '--set-cloudsql-instances' # CloudSQLProxyを使用しない場合は不要
- ${_CLOUDSQL_NAME} # CloudSQLProxyを使用しない場合は不要
- '--region'
- '${_REGION}'
- '--allow-unauthenticated'
- '--set-env-vars' # プログラム内で使用する環境変数を設定
- 'a=b'
# トリガーで設定した代入変数
substitutions:
_CLOUDSQL_NAME: ${_CLOUDSQL_NAME} # CloudSQLProxyを使用しない場合は不要
_IMAGE_NAME: ${_IMAGE_NAME} # Buildするイメージの名前
_SERVICE_NAME: ${_SERVICE_NAME} # CloudRunのサービス名
_REGION: ${_REGION} # リージョン
images:
- '${_IMAGE_NAME}:$COMMIT_SHA'
CloudBuildのトリガーを作成
- 名前
- リージョン
- イベント
- リポジトリ
- ブランチ
- 代入変数
変数名 | 意味 | 例 |
---|---|---|
_CLOUDSQL_NAME | CloudSQLの接続名 | myproject:us-central1:myinstance |
_IMAGE_NAME | Artifact Registryに登録するイメージの名前(URL) | us-central1-docker.pkg.dev/my-project/my-repo/my-app |
_SERVICE_NAME | Cloud Runのサービス名 | my-service |
_REGION | リージョン | us-central1 |
キャッシュされた Docker イメージの使用
一度目
cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/docker'
args: [
'build',
'-t', 'gcr.io/$PROJECT_ID/[IMAGE_NAME]:latest',
'.'
]
images: ['gcr.io/$PROJECT_ID/[IMAGE_NAME]:latest']
二度目
cloudbuild.yaml
steps:
+ - name: 'gcr.io/cloud-builders/docker'
+ entrypoint: 'bash'
+ args: ['-c', 'docker pull gcr.io/$PROJECT_ID/[IMAGE_NAME]:latest || exit 0']
- name: 'gcr.io/cloud-builders/docker'
args: [
'build',
'-t', 'gcr.io/$PROJECT_ID/[IMAGE_NAME]:latest',
+ '--cache-from', 'gcr.io/$PROJECT_ID/[IMAGE_NAME]:latest',
'.'
]
images: ['gcr.io/$PROJECT_ID/[IMAGE_NAME]:latest']
Discussion