diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..2b0d43ffa --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +** +!trident_orchestrator +!tridentctl +!chwrap.tar diff --git a/Makefile b/Makefile index 46872d586..d754afecb 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ GOARCH ?= amd64 GOGC ?= "" GOPROXY ?= https://proxy.golang.org -GO_IMAGE = golang:1.17 +GO_IMAGE ?= golang:1.17 HELM_IMAGE = alpine/helm:3.6.1 GOLANGCI-LINT_VERSION ?= v1.31.0 TRIDENT_VOLUME = trident_build @@ -14,6 +14,7 @@ OPERATOR_CONFIG_PKG = github.com/netapp/trident/operator/config TRIDENT_KUBERNETES_PKG = github.com/netapp/trident/persistent_store/crd VERSION_FILE = github.com/netapp/trident/hack/VERSION K8S_CODE_GENERATOR = code-generator-kubernetes-1.18.2 +BUILD_CONTAINER_NAME ?= trident-build ## build flags variables GITHASH ?= `git describe --match=NeVeRmAtCh --always --abbrev=40 --dirty || echo unknown` @@ -34,8 +35,13 @@ CLI_PKG ?= github.com/netapp/trident/cli K8S ?= "" BUILD = build VERSION ?= $(shell cat ${ROOT}/hack/VERSION) +VOLUME_ARG = -v ${TRIDENT_VOLUME}:/go +ifdef CREATE_BASE_IMAGE + VOLUME_ARG = +endif -DR_LINUX = docker run --rm \ +DR_LINUX = docker run \ + --name=${BUILD_CONTAINER_NAME} \ --net=host \ -e CGO_ENABLED=0 \ -e GOOS=linux \ @@ -43,19 +49,20 @@ DR_LINUX = docker run --rm \ -e GOGC=$(GOGC) \ -e GOPROXY=$(GOPROXY) \ -e XDG_CACHE_HOME=/go/cache \ - -v $(TRIDENT_VOLUME):/go \ + ${VOLUME_ARG} \ -v "${ROOT}":"${TRIDENT_VOLUME_PATH}" \ -w $(TRIDENT_VOLUME_PATH) \ $(GO_IMAGE) -DR_MACOS = docker run --rm \ +DR_MACOS = docker run \ + --name=${BUILD_CONTAINER_NAME} \ --net=host \ -e GOOS=darwin \ -e GOARCH=$(GOARCH) \ -e GOGC=$(GOGC) \ -e GOPROXY=$(GOPROXY) \ -e XDG_CACHE_HOME=/go/cache \ - -v $(TRIDENT_VOLUME):/go \ + ${VOLUME_ARG} \ -v "${ROOT}":"${TRIDENT_VOLUME_PATH}" \ -w $(TRIDENT_VOLUME_PATH) \ $(GO_IMAGE) @@ -105,8 +112,20 @@ trident_build: @mkdir -p ${BIN_DIR} @chmod 777 ${BIN_DIR} @${GO_LINUX} ${BUILD} -ldflags $(BUILD_FLAGS) -o ${TRIDENT_VOLUME_PATH}/bin/${BIN} +ifdef CREATE_BASE_IMAGE + @docker commit ${BUILD_CONTAINER_NAME} ${CREATE_BASE_IMAGE} +endif + @docker rm ${BUILD_CONTAINER_NAME} @${GO_LINUX} ${BUILD} -ldflags $(BUILD_FLAGS) -o ${TRIDENT_VOLUME_PATH}/bin/${CLI_BIN} ${CLI_PKG} +ifdef CREATE_BASE_IMAGE + @docker commit ${BUILD_CONTAINER_NAME} ${CREATE_BASE_IMAGE} +endif + @docker rm ${BUILD_CONTAINER_NAME} @${GO_LINUX} ${BUILD} -ldflags $(BUILD_FLAGS) -o ${TRIDENT_VOLUME_PATH}/bin/chwrap chwrap/chwrap.go +ifdef CREATE_BASE_IMAGE + @docker commit ${BUILD_CONTAINER_NAME} ${CREATE_BASE_IMAGE} +endif + @docker rm ${BUILD_CONTAINER_NAME} cp ${BIN_DIR}/${BIN} ${BIN_DIR}/${CLI_BIN} . chwrap/make-tarball.sh ${BIN_DIR}/chwrap chwrap.tar docker build --build-arg PORT=${PORT} --build-arg BIN=${BIN} --build-arg CLI_BIN=${CLI_BIN} --build-arg K8S=${K8S} -t ${TRIDENT_TAG} --rm . @@ -119,6 +138,10 @@ tridentctl_build: @mkdir -p ${BIN_DIR} @chmod 777 ${BIN_DIR} @${GO_LINUX} ${BUILD} -ldflags $(BUILD_FLAGS) -o ${TRIDENT_VOLUME_PATH}/bin/${CLI_BIN} ${CLI_PKG} +ifdef CREATE_BASE_IMAGE + @docker commit ${BUILD_CONTAINER_NAME} ${CREATE_BASE_IMAGE} +endif + @docker rm ${BUILD_CONTAINER_NAME} cp ${BIN_DIR}/${CLI_BIN} . # docker build --build-arg PORT=${PORT} --build-arg CLI_BIN=${CLI_BIN} --build-arg K8S=${K8S} -t ${TRIDENT_TAG} --rm . rm ${CLI_BIN} @@ -127,6 +150,10 @@ tridentctl_macos_build: @mkdir -p ${MACOS_BIN_DIR} @chmod 777 ${MACOS_BIN_DIR} @${GO_MACOS} ${BUILD} -ldflags $(BUILD_FLAGS) -o ${TRIDENT_VOLUME_PATH}/bin/macos/${CLI_BIN} ${CLI_PKG} +ifdef CREATE_BASE_IMAGE + @docker commit ${BUILD_CONTAINER_NAME} ${CREATE_BASE_IMAGE} +endif + @docker rm ${BUILD_CONTAINER_NAME} tridentctl_images: ${BIN_DIR}/${CLI_BIN} images -o markdown > trident-required-images.md @@ -240,4 +267,3 @@ lint-precommit: .git/hooks install-lint lint-prepush: .git/hooks install-lint .git/hooks/pre-push cp hooks/golangci-lint.sh .git/hooks/pre-push - diff --git a/operator/.dockerignore b/operator/.dockerignore new file mode 100644 index 000000000..e085f7a5a --- /dev/null +++ b/operator/.dockerignore @@ -0,0 +1,2 @@ +** +!trident-operator diff --git a/operator/Makefile b/operator/Makefile index 637cd78cd..b507a97ec 100644 --- a/operator/Makefile +++ b/operator/Makefile @@ -3,7 +3,7 @@ GOARCH ?= amd64 GOGC ?= "" GOPROXY ?= https://proxy.golang.org -GO_IMAGE = golang:1.17 +GO_IMAGE ?= golang:1.17 OPERATOR_VOLUME = operator_build TRIDENT_VOLUME_PATH = /go/src/github.com/netapp/trident OPERATOR_VOLUME_PATH = /go/src/github.com/netapp/trident/operator @@ -12,6 +12,7 @@ OPERATOR_INSTALLER_CONFIG_PKG = github.com/netapp/trident/operator/controllers/o TRIDENT_ORCHESTRATOR_PKG = github.com/netapp/trident/operator/controllers/orchestrator VERSION_FILE = github.com/netapp/trident/hack/VERSION K8S_CODE_GENERATOR = ./../code-generator-kubernetes-1.18.2 +BUILD_CONTAINER_NAME ?= operator-build ## build flags variables GITHASH ?= `git rev-parse HEAD || echo unknown` @@ -28,8 +29,13 @@ TARBALL_BIN ?= trident-operator K8S ?= "" BUILD = build VERSION ?= $(shell cat ${ROOT}/hack/VERSION) +VOLUME_ARG = -v ${OPERATOR_VOLUME}:/go +ifdef CREATE_BASE_IMAGE + VOLUME_ARG = +endif -DR_LINUX = docker run --rm \ +DR_LINUX = docker run \ + --name=${BUILD_CONTAINER_NAME} \ --net=host \ -e CGO_ENABLED=0 \ -e GOOS=linux \ @@ -37,7 +43,7 @@ DR_LINUX = docker run --rm \ -e GOGC=$(GOGC) \ -e GOPROXY=$(GOPROXY) \ -e XDG_CACHE_HOME=/go/cache \ - -v $(OPERATOR_VOLUME):/go \ + ${VOLUME_ARG} \ -v "${ROOT}":"${TRIDENT_VOLUME_PATH}" \ -w $(OPERATOR_VOLUME_PATH) \ $(GO_IMAGE) @@ -85,6 +91,10 @@ build: @mkdir -p ${BIN_DIR} @chmod 777 ${BIN_DIR} @${GO_LINUX} ${BUILD} -ldflags $(BUILD_FLAGS) -o ${TRIDENT_VOLUME_PATH}/bin/${BIN} +ifdef CREATE_BASE_IMAGE + @docker commit ${BUILD_CONTAINER_NAME} ${CREATE_BASE_IMAGE} +endif + @docker rm ${BUILD_CONTAINER_NAME} cp ${BIN_DIR}/${BIN} . docker build --build-arg BIN=${BIN} --build-arg K8S=${K8S} -t ${OPERATOR_TAG} --rm . ifdef REGISTRY_ADDR