🔧
Cloud BuildでgoのbuildをしてArtifact Registryにpushする
前回触れていなかったcloudbuild.yamlのことをまとめていきます
前回の記事はこちらになるのでもしよければ見てください!
やりたいこと
Cloud Buildを使ってGoのアプリケーションをbuildし、ImageをArtifact Registryにアップロードする
なので以下のファイルを作成します
- Dockerfile
- cloudbuild.yaml
Dockerfileの作成
Dockerfileは特に工夫せずGCPのサンプルから取ってきました
マルチステージビルドを使ってイメージサイズを下げています
FROM golang:1.21-alpine as builder
WORKDIR /app
COPY go.* ./
RUN go mod download
COPY . ./
RUN CGO_ENABLED=0 go build -v -o server
EXPOSE 8080
FROM debian:buster-slim
RUN set -x && apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
ca-certificates && \
rm -rf /var/lib/apt/lists/*
COPY --from=builder /app/server /app/server
EXPOSE 8080
CMD ["/app/server"]
builderはビルド用のステージです
go関連のファイルをコピーしてgo mod downloadを行い、go.modファイルに記載されたすべてのモジュールをダウンロードします
CGO_ENABLED=0を指定しないとエラーが出るので指定しておきます
詳しくは以下の記事に書いてありそうです
cloudbuild.yamlの作成
こちらも最小限
steps:
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t',
'$_GCR_HOSTNAME/$PROJECT_ID/$_SERVICE_NAME/image:$SHORT_SHA', '.']
- name: 'gcr.io/cloud-builders/docker'
args: ['push', '$_GCR_HOSTNAME/$PROJECT_ID/$_SERVICE_NAME/image:$SHORT_SHA']
- name: 'gcr.io/cloud-builders/gcloud'
args: ['run', 'deploy', '$_SERVICE_NAME',
'--image=$_GCR_HOSTNAME/$PROJECT_ID/$_SERVICE_NAME/image:$SHORT_SHA',
'--region', '$_DEPLOY_REGION', '--platform', 'managed']
images:
- $_GCR_HOSTNAME/$PROJECT_ID/$_SERVICE_NAME/image:$SHORT_SHA
substitutions:
_GCR_HOSTNAME: hostname
_DEPLOY_REGION: region-name
_SERVICE_NAME: service-name
1つめのステップ: dockerイメージのbuild
2つめのステップ: Artifact Registryにpush
3つめのステップ: Cloud Runにデプロイ
まとめ
最小限の構成で今回はまとめましたが、アプリケーションの機能を実装していくうちにここからDockerfileだったりcloudbuild.yamlを書き足していくのかなとなんとなく思ってます
とはいえ今のところこれだけで回っているのでまた修正するタイミングがあれば勉強し直そうかと思います!
Discussion