X-Git-Url: https://gerrit.akraino.org/r/gitweb?a=blobdiff_plain;f=src%2Ffoundation%2Fapi%2FMakefile;fp=src%2Ffoundation%2Fapi%2FMakefile;h=6fa5c984465bf92ad78f33777d907ed35356d69e;hb=754bbb90fbbc06ef896673b7346c3086d481dca6;hp=0000000000000000000000000000000000000000;hpb=6ebd8c9c9a1e8cc534b6428c12d0cf6f4bfd9e04;p=iec.git diff --git a/src/foundation/api/Makefile b/src/foundation/api/Makefile new file mode 100644 index 0000000..6fa5c98 --- /dev/null +++ b/src/foundation/api/Makefile @@ -0,0 +1,143 @@ +# build image for apiserver + +# This image is built from files in this directory and pushed to +# a docker registry that is accesseble on each node. +# +# + +# For a user created registry, the registry must be setup ahead of time. +# This Makefile supports both amd64 and arm64 + +EMPTY := +SPACE := $(EMPTY) $(EMPTY) +COMMA := $(EMPTY),$(EMPTY) + +DOCKER ?= docker +LINUX_ARCH := amd64 arm64 +ARCHES = amd64 arm64 +DOCKERFILE := +REGISTRY ?= iecedge +PLATFORMS := $(subst $(SPACE),$(COMMA),$(foreach arch,$(LINUX_ARCH),linux/$(arch))) + +# SECRET is used when pushing the manifest. docker-credential-gcr may not be +# available locally (except in Jenkins) so delay the evaluation unless the secret +# is needed. +SECRET = $(shell echo "https://gcr.io" | docker-credential-gcr get | jq '.Secret') + +BUILD_ARCH ?= $(shell [ $$(uname -m) = "aarch64" ] && echo "arm64" || echo "amd64") +IMAGE_BASE ?= $(REGISTRY)/iec-apiserver-base-$(BUILD_ARCH) + +TAG ?= latest +GIT_VERSION ?= $(shell git describe --always --dirty --tags) +IMAGE_VERSION ?= $(GIT_VERSION) +IMAGE_TAG := $(shell echo $(IMAGE_VERSION) | cut -d. -f1,2) +IMAGE_BRANCH ?= $(shell git rev-parse --abbrev-ref HEAD | tr -d '/') + +#Currently, we choose golang-alpine based image as the default image base due to its +#small size +base: + @IMAGE_NAME="$(REGISTRY)/iec-apiserver-base"; \ + docker build -t $$IMAGE_NAME-$(BUILD_ARCH) \ + -t $$IMAGE_NAME-$(BUILD_ARCH):$(IMAGE_VERSION) \ + -t $$IMAGE_NAME-$(BUILD_ARCH):$(IMAGE_TAG) \ + -t $$IMAGE_NAME-$(BUILD_ARCH):$(IMAGE_BRANCH) \ + -f docker/Dockerfile.base \ + . + +#Use native golang based image as the base of apiserver, the reason to keep it here +#is that it is easier to extend if we need to add extra functions into it. +#It's kept here as a backup. +base-golang: + @IMAGE_NAME="$(REGISTRY)/iec-apiserver-base"; \ + docker build -t $$IMAGE_NAME-$(BUILD_ARCH)-golang \ + -t $$IMAGE_NAME-$(BUILD_ARCH)-golang:$(IMAGE_VERSION) \ + -t $$IMAGE_NAME-$(BUILD_ARCH)-golang:$(IMAGE_TAG) \ + -t $$IMAGE_NAME-$(BUILD_ARCH)-golang:$(IMAGE_BRANCH) \ + -f docker/Dockerfile.base.golang \ + . + +.PHONY: apiserver +apiserver: + @IMAGE_NAME="$(REGISTRY)/iec-apiserver"; \ + docker build -t $$IMAGE_NAME-$(BUILD_ARCH) \ + -t $$IMAGE_NAME-$(BUILD_ARCH):$(IMAGE_VERSION) \ + -t $$IMAGE_NAME-$(BUILD_ARCH):$(IMAGE_TAG) \ + -t $$IMAGE_NAME-$(BUILD_ARCH):$(IMAGE_BRANCH) \ + --build-arg IMAGEBASE="${IMAGE_BASE}" \ + -f docker/Dockerfile \ + . + +#Use golang image as the base, but only used as a backup now +.PHONY: apiserver-golang +apiserver-golang: + @IMAGE_NAME="$(REGISTRY)/iec-apiserver"; \ + docker build -t $$IMAGE_NAME-$(BUILD_ARCH)-golang \ + -t $$IMAGE_NAME-$(BUILD_ARCH)-golang:$(IMAGE_VERSION) \ + -t $$IMAGE_NAME-$(BUILD_ARCH)-golang:$(IMAGE_TAG) \ + -t $$IMAGE_NAME-$(BUILD_ARCH)-golang:$(IMAGE_BRANCH) \ + --build-arg IMAGEBASE="${IMAGE_BASE}"-golang \ + -f docker/Dockerfile.golang \ + . + + +all: base apiserver + +#Before push images or push fat-manifest, please use 'docker login -u your_repo_account' to login to dockerhub first +#For docker login, it may need to install package 'jq', like "sudo apt-get install -y jq" for Debian based system + +push_images: + @IMAGE_NAME="$(REGISTRY)/iec-apiserver-base"; \ + docker push $$IMAGE_NAME-$(BUILD_ARCH):$(IMAGE_VERSION); \ + docker push $$IMAGE_NAME-$(BUILD_ARCH):$(IMAGE_TAG); \ + docker push $$IMAGE_NAME-$(BUILD_ARCH):$(IMAGE_BRANCH); \ + docker push $$IMAGE_NAME-$(BUILD_ARCH):$(TAG) + + @IMAGE_NAME="$(REGISTRY)/iec-apiserver"; \ + docker push $$IMAGE_NAME-$(BUILD_ARCH):$(IMAGE_VERSION); \ + docker push $$IMAGE_NAME-$(BUILD_ARCH):$(IMAGE_TAG); \ + docker push $$IMAGE_NAME-$(BUILD_ARCH):$(IMAGE_BRANCH); \ + docker push $$IMAGE_NAME-$(BUILD_ARCH):$(TAG); + +.PHONY: pre_manifest +pre_manifest: + if [ ! -f "./manifest-tool" ]; then \ + wget https://github.com/estesp/manifest-tool/releases/download/v0.9.0/manifest-tool-linux-$(BUILD_ARCH) \ + -O manifest-tool && \ + chmod +x ./manifest-tool; \ + fi + +.push_manifest: pre_manifest + ./manifest-tool push from-args --platforms $(PLATFORMS) --template $(REGISTRY)/$(TARGET)-ARCH:$(VERSION) --target $(REGISTRY)/$(TARGET):$(VERSION) + + +#Note: Currently, just multi-arch the latest version of the images to avoid the possible version +#mismatch between amd64 and arm64 in docker hub. In case we need them, we can just remove the comment tags below +#Just multi-arch the iec-apiserver image currently + +multi_arch: + #$(MAKE) .push_manifest VERSION=$(TAG) TARGET="iec-apiserver-base" + $(MAKE) .push_manifest VERSION=$(TAG) TARGET="iec-apiserver" + +push: pre_manifest push_images multi_arch + #$(MAKE) .push_manifest VERSION=$(IMAGE_VERSION) TARGET="iec-apiserver-base" + #$(MAKE) .push_manifest VERSION=$(IMAGE_TAG) TARGET="iec-apiserver-base" + #$(MAKE) .push_manifest VERSION=$(IMAGE_VERSION) TARGET="iec-apiserver" + #$(MAKE) .push_manifest VERSION=$(IMAGE_TAG) TARGET="iec-apiserver" + +#For cleaning images, it seems more stable when we remove it by their names, not just by their ids. +clean_image: + #$(DOCKER) rmi -f `$(DOCKER) images $(REGISTRY)/$(TARGET) -a -q` || true + $(DOCKER) rmi -f $(REGISTRY)/$(TARGET):$(VERSION) || true + +#Normally, we don't remove the base image to keep a stable Revel version for use +clean: + docker rmi $(docker images --filter "dangling=true" -q --no-trunc) || true + #$(MAKE) clean_image TARGET=iec-apiserver-base-$(BUILD_ARCH) VERSION=$(IMAGE_VERSION) + #$(MAKE) clean_image TARGET=iec-apiserver-base-$(BUILD_ARCH) VERSION=$(IMAGE_TAG) + #$(MAKE) clean_image TARGET=iec-apiserver-base-$(BUILD_ARCH) VERSION=$(IMAGE_BRANCH) + #$(MAKE) clean_image TARGET=iec-apiserver-base-$(BUILD_ARCH) VERSION=$(TAG) + + $(MAKE) clean_image TARGET=iec-apiserver-$(BUILD_ARCH) VERSION=$(IMAGE_VERSION) + $(MAKE) clean_image TARGET=iec-apiserver-$(BUILD_ARCH) VERSION=$(IMAGE_TAG) + $(MAKE) clean_image TARGET=iec-apiserver-$(BUILD_ARCH) VERSION=$(IMAGE_BRANCH) + $(MAKE) clean_image TARGET=iec-apiserver-$(BUILD_ARCH) VERSION=$(TAG)