Fix docker build
This commit is contained in:
parent
d20ad71071
commit
25570a0c6d
41
Dockerfile
41
Dockerfile
|
|
@ -1,32 +1,39 @@
|
||||||
# Build the manager binary
|
# Build the manager binary
|
||||||
FROM golang:1.17 as builder
|
FROM --platform=$BUILDPLATFORM golang:1.17 as builder
|
||||||
|
|
||||||
ARG TARGETPLATFORM
|
|
||||||
|
|
||||||
WORKDIR /workspace
|
WORKDIR /workspace
|
||||||
|
|
||||||
ENV GO111MODULE=on \
|
# Copy the Go Modules manifests
|
||||||
CGO_ENABLED=0
|
COPY go.mod go.sum ./
|
||||||
|
|
||||||
# # Copy the Go Modules manifests
|
# cache deps before building and copying source so that we don't need to re-download as much
|
||||||
# COPY go.mod go.sum ./
|
# and so that source changes don't invalidate our downloaded layer.
|
||||||
|
#
|
||||||
# # cache deps before building and copying source so that we don't need to re-download as much
|
# Also, we need to do this before setting TARGETPLATFORM/TARGETOS/TARGETARCH/TARGETVARIANT
|
||||||
# # and so that source changes don't invalidate our downloaded layer
|
# so that go mod cache is shared across platforms.
|
||||||
# RUN --mount=type=cache,target=/go/pkg/mod go mod download
|
RUN go mod download
|
||||||
|
|
||||||
# Copy the go source
|
# Copy the go source
|
||||||
# COPY . .
|
# COPY . .
|
||||||
|
|
||||||
ARG TARGETOS
|
# Usage:
|
||||||
ARG TARGETARCH
|
# docker buildx build --tag repo/img:tag -f ./Dockerfile . --platform linux/amd64,linux/arm64,linux/arm/v7
|
||||||
|
#
|
||||||
|
# With the above commmand,
|
||||||
|
# TARGETOS can be "linux", TARGETARCH can be "amd64", "arm64", and "arm", TARGETVARIANT can be "v7".
|
||||||
|
|
||||||
|
ARG TARGETPLATFORM TARGETOS TARGETARCH TARGETVARIANT
|
||||||
|
|
||||||
|
# We intentionally avoid `--mount=type=cache,mode=0777,target=/go/pkg/mod` in the `go mod download` and the `go build` runs
|
||||||
|
# to avoid https://github.com/moby/buildkit/issues/2334
|
||||||
|
# We can use docker layer cache so the build is fast enogh anyway
|
||||||
|
# We also use per-platform GOCACHE for the same reason.
|
||||||
|
env GOCACHE /build/${TARGETPLATFORM}/root/.cache/go-build
|
||||||
|
|
||||||
# Build
|
# Build
|
||||||
RUN --mount=target=. \
|
RUN --mount=target=. \
|
||||||
--mount=type=cache,mode=0777,target=/root/.cache/go-build \
|
--mount=type=cache,mode=0777,target=${GOCACHE} \
|
||||||
--mount=type=cache,mode=0777,target=/go/pkg/mod\
|
GOOS=${TARGETOS} GOARCH=${TARGETARCH} GOARM=${TARGETVARIANT#v} \
|
||||||
GOOS=${TARGETOS} GOARCH=${TARGETARCH} \
|
|
||||||
GOARM=$(echo ${TARGETPLATFORM} | cut -d / -f3 | cut -c2-) \
|
|
||||||
go build -o /out/manager main.go && go build -o /out/github-webhook-server ./cmd/githubwebhookserver
|
go build -o /out/manager main.go && go build -o /out/github-webhook-server ./cmd/githubwebhookserver
|
||||||
|
|
||||||
# Use distroless as minimal base image to package the manager binary
|
# Use distroless as minimal base image to package the manager binary
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue