Skip to content

Commit 8781e95

Browse files
committed
Cache module dependencies between container builds
Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com> break up velero-builder stage to allow more concurrent layer builds. Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com> Add restic caching if fix_restic_cve.txt changes, only the dep added during patch will require redownload. ``` ❯ make container [+] Building 64.5s (20/20) FINISHED docker-container:colima-multiplat => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 3.24kB 0.0s => [internal] load metadata for docker.io/paketobuildpacks/run-jammy-tiny:latest 0.1s => [internal] load metadata for docker.io/library/golang:1.22-bookworm 0.1s => [internal] load .dockerignore 0.0s => => transferring context: 60B 0.0s => [stage-2 1/3] FROM docker.io/paketobuildpacks/run-jammy-tiny:latest@sha256:6a3b9424b0616c4c37309b3f3e410f305ad75c484ab74b0a624d22c8a33ae5ae 0.0s => => resolve docker.io/paketobuildpacks/run-jammy-tiny:latest@sha256:6a3b9424b0616c4c37309b3f3e410f305ad75c484ab74b0a624d22c8a33ae5ae 0.0s => [restic-builder 1/5] FROM docker.io/library/golang:1.22-bookworm@sha256:475ff60e52faaf037be2e7a1bc2ea5ea4aaa3396274af3def6545124a18b99b4 0.0s => => resolve docker.io/library/golang:1.22-bookworm@sha256:475ff60e52faaf037be2e7a1bc2ea5ea4aaa3396274af3def6545124a18b99b4 0.0s => [internal] load build context 0.3s => => transferring context: 546.21kB 0.3s => CACHED [restic-builder 2/5] RUN if [ "velero" = "velero" ]; then mkdir -p /build/restic && cd /build/restic && git clone --single-branch -b v0.15.0 https://github.com/restic/restic.git . && go mod download; fi 0.0s => [restic-builder 3/5] COPY hack/fix_restic_cve.txt /go/src/github.com/vmware-tanzu/velero/hack/ 0.0s => CACHED [velero-builder 2/6] WORKDIR /go/src/github.com/vmware-tanzu/velero 0.0s => CACHED [velero-builder 3/6] COPY go.mod go.sum /go/src/github.com/vmware-tanzu/velero/ 0.0s => CACHED [velero-builder 4/6] RUN go mod download 0.0s => [velero-builder 5/6] COPY . /go/src/github.com/vmware-tanzu/velero 6.5s => [restic-builder 4/5] RUN if [ "velero" = "velero" ]; then mkdir -p /output/usr/bin && cd /build/restic && git apply /go/src/github.com/vmware-tanzu/velero/hack/fix_restic_cve.txt && go mod download; fi 7.2s => [velero-builder 6/6] RUN mkdir -p /output/usr/bin && export GOARM=$( echo "" | cut -c2-) && go build -o /output/velero -ldflags "-X github.com/vmware-tanzu/velero/pkg/buildinfo.Version=main -X github.com/vmware-tanzu/velero/pkg/buildinfo.GitSHA=590f6df48d3fdc 55.5s => [restic-builder 5/5] RUN if [ "velero" = "velero" ]; then cd /build/restic && GOARM=$(echo "" | cut -c2-) go run build.go --goos "linux" --goarch "amd64" --goarm "" -o /output/usr/bin/restic && chmod +x /output/usr/bin/restic; fi && go cle 30.0s => CACHED [stage-2 2/3] COPY --from=velero-builder /output / 0.0s => CACHED [stage-2 3/3] COPY --from=restic-builder /output / 0.0s => exporting to docker image format 0.7s => => exporting layers 0.0s => => exporting manifest sha256:d275186bbf7b7fb08da8fe957037d8600c7b96693fe59bdfb119d977058daaa0 0.0s => => exporting config sha256:5cb88b0eac0b14df3efd549e0ca4df1980501a5f5cea677f0de1f5dd97050141 0.0s => => sending tarball 0.7s => importing to docker 0.0s container: velero/velero:main ``` Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>
1 parent 7a51e0d commit 8781e95

File tree

2 files changed

+42
-70
lines changed

2 files changed

+42
-70
lines changed

Dockerfile

Lines changed: 42 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
# limitations under the License.
1414

1515
# Velero binary build section
16-
FROM --platform=$BUILDPLATFORM golang:1.22-bookworm AS velero-builder
16+
FROM --platform=$BUILDPLATFORM golang:1.22-bookworm AS velero-builder-base
1717

1818
ARG GOPROXY
1919
ARG BIN
@@ -36,15 +36,20 @@ ENV CGO_ENABLED=0 \
3636

3737
WORKDIR /go/src/github.com/vmware-tanzu/velero
3838

39+
COPY go.mod go.sum /go/src/github.com/vmware-tanzu/velero/
40+
RUN go mod download
41+
3942
COPY . /go/src/github.com/vmware-tanzu/velero
4043

41-
RUN mkdir -p /output/usr/bin && \
42-
export GOARM=$( echo "${GOARM}" | cut -c2-) && \
43-
go build -o /output/${BIN} \
44-
-ldflags "${LDFLAGS}" ${PKG}/cmd/${BIN} && \
45-
go build -o /output/velero-helper \
46-
-ldflags "${LDFLAGS}" ${PKG}/cmd/velero-helper && \
47-
go clean -modcache -cache
44+
RUN mkdir -p /output/usr/bin
45+
46+
FROM velero-builder-base AS velero-builder-helper
47+
RUN GOARM=$( echo "${GOARM}" | cut -c2-) go build -o /output/velero-helper \
48+
-ldflags "${LDFLAGS}" ${PKG}/cmd/velero-helper
49+
50+
FROM velero-builder-base AS velero-builder
51+
RUN GOARM=$( echo "${GOARM}" | cut -c2-) go build -o /output/${BIN} \
52+
-ldflags "${LDFLAGS}" ${PKG}/cmd/${BIN}
4853

4954
# Restic binary build section
5055
FROM --platform=$BUILDPLATFORM golang:1.22-bookworm AS restic-builder
@@ -63,12 +68,33 @@ ENV CGO_ENABLED=0 \
6368
GOARCH=${TARGETARCH} \
6469
GOARM=${TARGETVARIANT}
6570

66-
COPY . /go/src/github.com/vmware-tanzu/velero
67-
68-
RUN mkdir -p /output/usr/bin && \
69-
export GOARM=$(echo "${GOARM}" | cut -c2-) && \
70-
/go/src/github.com/vmware-tanzu/velero/hack/build-restic.sh && \
71-
go clean -modcache -cache
71+
# /output dir needed by last stage to copy even when BIN is not velero
72+
RUN mkdir -p /output/usr/bin
73+
74+
# cache go mod download before applying patches
75+
RUN --mount=type=cache,target=/go/pkg/mod if [ "${BIN}" = "velero" ]; then \
76+
mkdir -p /build/restic && \
77+
cd /build/restic && \
78+
git clone --single-branch -b v${RESTIC_VERSION} https://github.com/restic/restic.git . && \
79+
go mod download; \
80+
fi
81+
82+
# invalidate cache if patch changes
83+
COPY hack/fix_restic_cve.txt /go/src/github.com/vmware-tanzu/velero/hack/
84+
85+
# cache go mod download after applying patches
86+
RUN --mount=type=cache,target=/go/pkg/mod if [ "${BIN}" = "velero" ]; then \
87+
cd /build/restic && \
88+
git apply /go/src/github.com/vmware-tanzu/velero/hack/fix_restic_cve.txt && \
89+
go mod download; \
90+
fi
91+
92+
# arch specific build layer
93+
RUN --mount=type=cache,target=/go/pkg/mod if [ "${BIN}" = "velero" ]; then \
94+
cd /build/restic && \
95+
GOARM=$(echo "${GOARM}" | cut -c2-) go run build.go --goos "${GOOS}" --goarch "${GOARCH}" --goarm "${GOARM}" -o /output/usr/bin/restic && \
96+
chmod +x /output/usr/bin/restic; \
97+
fi
7298

7399
# Velero image packing section
74100
FROM paketobuildpacks/run-jammy-tiny:latest
@@ -77,6 +103,8 @@ LABEL maintainer="Xun Jiang <jxun@vmware.com>"
77103

78104
COPY --from=velero-builder /output /
79105

106+
COPY --from=velero-builder-helper /output /
107+
80108
COPY --from=restic-builder /output /
81109

82110
USER cnb:cnb

hack/build-restic.sh

Lines changed: 0 additions & 56 deletions
This file was deleted.

0 commit comments

Comments
 (0)