From 2f653b1c99728d95de4d040def322c553f3ef67c Mon Sep 17 00:00:00 2001 From: Mikkel Oscar Lyderik Larsen Date: Tue, 28 Jun 2022 18:40:29 +0200 Subject: [PATCH] Build multi-arch container image (#517) Signed-off-by: Mikkel Oscar Lyderik Larsen --- Dockerfile | 7 +++++-- Makefile | 15 +++++++++------ delivery.yaml | 22 ++++++++++++++++++---- 3 files changed, 32 insertions(+), 12 deletions(-) diff --git a/Dockerfile b/Dockerfile index 98a5acff..3acd8d56 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,9 @@ -FROM registry.opensource.zalan.do/library/alpine-3.12:latest +ARG BASE_IMAGE=registry.opensource.zalan.do/library/alpine-3.13:latest +FROM ${BASE_IMAGE} LABEL maintainer="Team Teapot @ Zalando SE " -ADD build/linux/kube-ingress-aws-controller / +ARG TARGETARCH + +ADD build/linux/${TARGETARCH}/kube-ingress-aws-controller / ENTRYPOINT ["/kube-ingress-aws-controller"] diff --git a/Makefile b/Makefile index 7dec89a3..1d2408e1 100644 --- a/Makefile +++ b/Makefile @@ -33,11 +33,11 @@ fmt: ## build.local: builds a local binary in build directory build.local: build/$(BINARY) -## build.local: builds a binary for linux/amd64 in build directory +## build.linux: builds a binary for linux/amd64 in build directory build.linux: build/linux/$(BINARY) -## build.osx: builds a binary for osx/amd64 in build directory -build.osx: build/osx/$(BINARY) +build.linux.amd64: build/linux/amd64/$(BINARY) +build.linux.arm64: build/linux/arm64/$(BINARY) build/$(BINARY): $(SOURCES) CGO_ENABLED=0 go build -o build/$(BINARY) $(BUILD_FLAGS) -ldflags "$(LDFLAGS)" . @@ -45,12 +45,15 @@ build/$(BINARY): $(SOURCES) build/linux/$(BINARY): $(SOURCES) GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build $(BUILD_FLAGS) -o build/linux/$(BINARY) -ldflags "$(LDFLAGS)" . -build/osx/$(BINARY): $(SOURCES) - GOOS=darwin GOARCH=amd64 CGO_ENABLED=0 go build $(BUILD_FLAGS) -o build/osx/$(BINARY) -ldflags "$(LDFLAGS)" . +build/linux/amd64/$(BINARY): go.mod $(SOURCES) + GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build $(BUILD_FLAGS) -o build/linux/amd64/$(BINARY) -ldflags "$(LDFLAGS)" . + +build/linux/arm64/$(BINARY): go.mod $(SOURCES) + GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build $(BUILD_FLAGS) -o build/linux/arm64/$(BINARY) -ldflags "$(LDFLAGS)" . ## build.docker: builds docker image build.docker: build.linux - docker build --rm -t "$(IMAGE):$(TAG)" -f $(DOCKERFILE) . + docker build --rm -t "$(IMAGE):$(TAG)" -f $(DOCKERFILE) --build-arg TARGETARCH= . ## build.push: pushes docker image to registry build.push: build.docker diff --git a/delivery.yaml b/delivery.yaml index 47c64740..2af41c7a 100644 --- a/delivery.yaml +++ b/delivery.yaml @@ -19,14 +19,20 @@ pipeline: git diff --exit-code || exit 1 - desc: Push docker image cmd: | - if [[ $CDP_TARGET_BRANCH == master && ! $CDP_PULL_REQUEST_NUMBER ]]; then - IMAGE=registry-write.opensource.zalan.do/teapot/kube-ingress-aws-controller - VERSION=$(git describe --tags --always --dirty) - else + if [[ $CDP_TARGET_BRANCH != master && $CDP_PULL_REQUEST_NUMBER ]]; then IMAGE=registry-write.opensource.zalan.do/teapot/kube-ingress-aws-controller-test VERSION=$CDP_BUILD_VERSION IMAGE=$IMAGE VERSION=$VERSION make build.push + + # multi-arch image + IMAGE=container-registry-test.zalando.net/teapot/kube-ingress-aws-controller + + make build.linux.amd64 build.linux.arm64 + + docker buildx create --config /etc/cdp-buildkitd.toml --driver-opt network=host --bootstrap --use + docker buildx build --rm --build-arg BASE_IMAGE=container-registry.zalando.net/library/alpine-3.13:latest -t "${IMAGE}:${CDP_BUILD_VERSION}" --platform linux/amd64,linux/arm64 --push . fi + - id: buildprod when: branch: master @@ -55,6 +61,14 @@ pipeline: IMAGE=$IMAGE VERSION=$VERSION make build.docker git diff --stat --exit-code IMAGE=$IMAGE VERSION=$VERSION make build.push + + # multi-arch image (Zalando private) + make build.linux.amd64 build.linux.arm64 + IMAGE=container-registry-test.zalando.net/teapot/kube-ingress-aws-controller + docker buildx create --config /etc/cdp-buildkitd.toml --driver-opt network=host --bootstrap --use + docker buildx build --rm --build-arg BASE_IMAGE=container-registry.zalando.net/library/alpine-3.13:latest -t "${IMAGE}:${VERSION}" --platform linux/amd64,linux/arm64 --push . + cdp-promote-image "${IMAGE}:${VERSION}" + echo "create release page" tf=$(mktemp) echo -e "### Changes\n" >$tf