diff --git a/Dockerfile b/Dockerfile index 0208b970b..b3dfc3879 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,8 +15,9 @@ FROM golang:1.15.2 WORKDIR /go/src/sigs.k8s.io/descheduler COPY . . +ARG ARCH ARG VERSION -RUN VERSION=${VERSION} make +RUN VERSION=${VERSION} make build.$ARCH FROM scratch diff --git a/Makefile b/Makefile index f74f26c00..b05a62e9e 100644 --- a/Makefile +++ b/Makefile @@ -18,6 +18,7 @@ VERSION?=v$(shell date +%Y%m%d)-$(shell git describe --tags --match "v*") BUILD=$(shell date +%FT%T%z) LDFLAG_LOCATION=sigs.k8s.io/descheduler/cmd/descheduler/app +ARCHS = amd64 arm64 LDFLAGS=-ldflags "-X ${LDFLAG_LOCATION}.version=${VERSION} -X ${LDFLAG_LOCATION}.buildDate=${BUILD}" @@ -47,18 +48,40 @@ all: build build: CGO_ENABLED=0 go build ${LDFLAGS} -o _output/bin/descheduler sigs.k8s.io/descheduler/cmd/descheduler +build.amd64: + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build ${LDFLAGS} -o _output/bin/descheduler sigs.k8s.io/descheduler/cmd/descheduler + +build.arm64: + CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build ${LDFLAGS} -o _output/bin/descheduler sigs.k8s.io/descheduler/cmd/descheduler + dev-image: build docker build -f Dockerfile.dev -t $(IMAGE) . image: - docker build --build-arg VERSION="$(VERSION)" -t $(IMAGE) . + docker build --build-arg VERSION="$(VERSION)" --build-arg ARCH="amd64" -t $(IMAGE) . -push-container-to-gcloud: image +image.amd64: + docker build --build-arg VERSION="$(VERSION)" --build-arg ARCH="amd64" -t $(IMAGE)-amd64 . + +image.arm64: + docker build --build-arg VERSION="$(VERSION)" --build-arg ARCH="arm64" -t $(IMAGE)-arm64 . + +push: image gcloud auth configure-docker docker tag $(IMAGE) $(IMAGE_GCLOUD) docker push $(IMAGE_GCLOUD) -push: push-container-to-gcloud +push-all: image.amd64 image.arm64 + gcloud auth configure-docker + for arch in $(ARCHS); do \ + docker tag $(IMAGE)-$${arch} $(IMAGE_GCLOUD)-$${arch} ;\ + docker push $(IMAGE_GCLOUD)-$${arch} ;\ + done + DOCKER_CLI_EXPERIMENTAL=enabled docker manifest create $(IMAGE_GCLOUD) $(addprefix --amend $(IMAGE_GCLOUD)-, $(ARCHS)) + for arch in $(ARCHS); do \ + DOCKER_CLI_EXPERIMENTAL=enabled docker manifest annotate --arch $${arch} $(IMAGE_GCLOUD) $(IMAGE_GCLOUD)-$${arch} ;\ + done + DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push $(IMAGE_GCLOUD) ;\ clean: rm -rf _output diff --git a/cloudbuild.yaml b/cloudbuild.yaml index d9a9b5605..a80de306e 100644 --- a/cloudbuild.yaml +++ b/cloudbuild.yaml @@ -14,7 +14,7 @@ steps: - VERSION=$_GIT_TAG - BASE_REF=$_PULL_BASE_REF args: - - push + - push-all substitutions: # _GIT_TAG will be filled with a git-based tag for the image, of the form vYYYYMMDD-hash, and # can be used as a substitution