From 00d89aad5069e7fd9cb6cc0f247ff39b5703e273 Mon Sep 17 00:00:00 2001 From: Davanum Srinivas Date: Thu, 5 Aug 2021 19:26:09 -0400 Subject: [PATCH] Allow a custom kube-cross image + tag to be specified Signed-off-by: Davanum Srinivas --- build/README.md | 2 +- build/build-image/Dockerfile | 6 +++--- build/common.sh | 6 +++++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/build/README.md b/build/README.md index fed53444006..175f096cc78 100644 --- a/build/README.md +++ b/build/README.md @@ -35,7 +35,7 @@ The following scripts are found in the [`build/`](.) directory. Note that all sc ## Basic Flow -The scripts directly under [`build/`](.) are used to build and test. They will ensure that the `kube-build` Docker image is built (based on [`build/build-image/Dockerfile`](build-image/Dockerfile) and after base image's `KUBE_BUILD_IMAGE_CROSS_TAG` from Dockerfile is replaced with one of those actual tags of the base image, like `v1.13.9-2`) and then execute the appropriate command in that container. These scripts will both ensure that the right data is cached from run to run for incremental builds and will copy the results back out of the container. You can specify a different registry/name for `kube-cross` by setting `KUBE_BASE_IMAGE_REGISTRY` which defaults to `k8s.gcr.io/build-image`. +The scripts directly under [`build/`](.) are used to build and test. They will ensure that the `kube-build` Docker image is built (based on [`build/build-image/Dockerfile`](build-image/Dockerfile) and after base image's `KUBE_BUILD_IMAGE_CROSS_TAG` from Dockerfile is replaced with one of those actual tags of the base image, like `v1.13.9-2`) and then execute the appropriate command in that container. These scripts will both ensure that the right data is cached from run to run for incremental builds and will copy the results back out of the container. You can specify a different registry/name and version for `kube-cross` by setting `KUBE_CROSS_IMAGE` and `KUBE_CROSS_VERSION`, see [`build/common.sh`](build/common.sh) for more details. The `kube-build` container image is built by first creating a "context" directory in `_output/images/build-image`. It is done there instead of at the root of the Kubernetes repo to minimize the amount of data we need to package up when building the image. diff --git a/build/build-image/Dockerfile b/build/build-image/Dockerfile index 0f66049a3e9..4473935769b 100644 --- a/build/build-image/Dockerfile +++ b/build/build-image/Dockerfile @@ -13,10 +13,10 @@ # limitations under the License. # This file creates a standard build environment for building Kubernetes -ARG KUBE_BUILD_IMAGE_CROSS_TAG -ARG KUBE_BASE_IMAGE_REGISTRY +ARG KUBE_CROSS_IMAGE +ARG KUBE_CROSS_VERSION -FROM ${KUBE_BASE_IMAGE_REGISTRY}/kube-cross:${KUBE_BUILD_IMAGE_CROSS_TAG} +FROM ${KUBE_CROSS_IMAGE}:${KUBE_CROSS_VERSION} # Mark this as a kube-build container RUN touch /kube-build-image diff --git a/build/common.sh b/build/common.sh index 3c7f6afdd25..ffb45209800 100755 --- a/build/common.sh +++ b/build/common.sh @@ -52,6 +52,10 @@ readonly KUBE_BASE_IMAGE_REGISTRY="${KUBE_BASE_IMAGE_REGISTRY:-k8s.gcr.io/build- readonly KUBE_BUILD_IMAGE_VERSION_BASE="$(cat "${KUBE_ROOT}/build/build-image/VERSION")" readonly KUBE_BUILD_IMAGE_VERSION="${KUBE_BUILD_IMAGE_VERSION_BASE}-${KUBE_BUILD_IMAGE_CROSS_TAG}" +# Make it possible to override the `kube-cross` image, and tag independent of `KUBE_BASE_IMAGE_REGISTRY` +readonly KUBE_CROSS_IMAGE="${KUBE_CROSS_IMAGE:-"${KUBE_BASE_IMAGE_REGISTRY}/kube-cross"}" +readonly KUBE_CROSS_VERSION="${KUBE_CROSS_VERSION:-"${KUBE_BUILD_IMAGE_CROSS_TAG}"}" + # Here we map the output directories across both the local and remote _output # directories: # @@ -373,7 +377,7 @@ function kube::build::build_image() { dd if=/dev/urandom bs=512 count=1 2>/dev/null | LC_ALL=C tr -dc 'A-Za-z0-9' | dd bs=32 count=1 2>/dev/null > "${LOCAL_OUTPUT_BUILD_CONTEXT}/rsyncd.password" chmod go= "${LOCAL_OUTPUT_BUILD_CONTEXT}/rsyncd.password" - kube::build::docker_build "${KUBE_BUILD_IMAGE}" "${LOCAL_OUTPUT_BUILD_CONTEXT}" 'false' "--build-arg=KUBE_BUILD_IMAGE_CROSS_TAG=${KUBE_BUILD_IMAGE_CROSS_TAG} --build-arg=KUBE_BASE_IMAGE_REGISTRY=${KUBE_BASE_IMAGE_REGISTRY}" + kube::build::docker_build "${KUBE_BUILD_IMAGE}" "${LOCAL_OUTPUT_BUILD_CONTEXT}" 'false' "--build-arg=KUBE_CROSS_IMAGE=${KUBE_CROSS_IMAGE} --build-arg=KUBE_CROSS_VERSION=${KUBE_CROSS_VERSION}" # Clean up old versions of everything kube::build::docker_delete_old_containers "${KUBE_BUILD_CONTAINER_NAME_BASE}" "${KUBE_BUILD_CONTAINER_NAME}"