⚒️
Cloud BuildでDockerfileからimageを作成してGCRにpushする
要件
- Go1.16での動作を想定
- Cloud BuildでDockerfileからimageを作成してGCRにpushしたい
- go build時にprivateリポジトリのソースコードをgo mod vendorにてmoduleとして取り込んで利用するため、private repoへのアクセス権限を有したい
secret managerにてsecretの作成
事前に、cloudbuildからsecret mangerへアクセスしてPAT(Personal access tokens)を取得できる様にする為にsecretを作成します
名前は github-access-token
としています。
作成画面
作成後
コード
cloudbuild.yaml
steps:
# Access the id_github file from Secret Manager
- name: gcr.io/cloud-builders/gcloud
entrypoint: 'bash'
args: [ '-c', 'gcloud secrets versions access latest --secret=github-access-token > /root/github-access-token' ]
volumes:
- name: 'vol'
path: /root/
# Build the container image
- name: 'docker'
entrypoint: 'sh'
args: [
'-c',
'docker build --build-arg CREDENTIALS="$(cat /root/github-access-token)"
-f Dockerfile
-t us.gcr.io/$PROJECT_ID/${_IMAGE_NAME}:$COMMIT_SHA
-t us.gcr.io/$PROJECT_ID/${_IMAGE_NAME}:latest
.'
]
volumes:
- name: 'vol'
path: /root/
# Push the container image
- name: gcr.io/cloud-builders/docker
args:
- push
- us.gcr.io/$PROJECT_ID/${_IMAGE_NAME}
timeout: 1200s
github: https://github.com/momota10/gcp-samples/blob/master/cloudbuild/build-push/cloudbuild.yaml
Dockerfile
FROM golang:1.16-alpine as builder
RUN apk add --update --no-cache ca-certificates git gcc musl-dev
# git
ARG CREDENTIALS
RUN git config \
--system \
url."https://${CREDENTIALS}:x-oauth-basic@github.com/{your-org}".insteadOf \
"https://github.com/{your-org}"
# go
RUN go env -w GOPRIVATE="github.com/{your-org}"
WORKDIR /go/src/github.com/{your-org}/{your-repo}
COPY . .
RUN GOOS=linux CGO_ENABLED=0 go build -ldflags "-s -w" -o bin/app -v main.go
FROM gcr.io/google.com/cloudsdktool/cloud-sdk:alpine
COPY /go/src/github.com/{your-org}/{your-repo}/bin/app /app
EXPOSE 8080
ENTRYPOINT ["/app"]
Discussion