From f6fce5cd43fdd04c65746feb6d1adb74de6504dc Mon Sep 17 00:00:00 2001 From: Filip Grzadkowski Date: Fri, 18 Dec 2015 15:16:31 +0100 Subject: [PATCH] Push docker images during the release. --- build/common.sh | 64 ++++++++++++++++++++++++++++++++++ build/push-official-release.sh | 4 +++ cluster/common.sh | 36 ++----------------- 3 files changed, 71 insertions(+), 33 deletions(-) diff --git a/build/common.sh b/build/common.sh index f9999dd86ac..4fcae251a32 100755 --- a/build/common.sh +++ b/build/common.sh @@ -1417,3 +1417,67 @@ function kube::release::gcs::publish() { return 1 fi } + +# --------------------------------------------------------------------------- +# Docker Release + +# Releases all docker images to a docker registry specified by KUBE_DOCKER_REGISTRY +# using tag KUBE_DOCKER_IMAGE_TAG. +# +# Globals: +# KUBE_DOCKER_REGISTRY +# KUBE_DOCKER_IMAGE_TAG +# RELEASE_DIR +# Returns: +# If new pushing docker images was successful. +function kube::release::docker::release() { + SERVER_BINARY_TAR="${RELEASE_DIR}/kubernetes-server-linux-amd64.tar.gz" + kube::release::docker::release_server_images +} + +# Releases kubernetes server docker images to a docker registry specified by +# KUBE_DOCKER_REGISTRY using tag KUBE_DOCKER_IMAGE_TAG. +# +# Globals: +# KUBE_DOCKER_REGISTRY +# KUBE_DOCKER_IMAGE_TAG +# SERVER_BINARY_TAR +# Returns: +# If new pushing docker images was successful. +function kube::release::docker::release_server_images() { + local docker_wrapped_binaries=( + "kube-apiserver" + "kube-controller-manager" + "kube-scheduler" + "kube-proxy" + ) + + local docker_cmd=("docker") + local docker_push_cmd=$docker_cmd + if [[ "${KUBE_DOCKER_REGISTRY}" == "gcr.io/"* ]]; then + docker_push_cmd=("gcloud" "docker") + fi + + local temp_dir="$(mktemp -d -t 'kube-server-XXXX')" + + tar xzfv "${SERVER_BINARY_TAR}" -C "${temp_dir}" &> /dev/null + + for binary in "${docker_wrapped_binaries[@]}"; do + local docker_tag="$(cat ${temp_dir}/kubernetes/server/bin/${binary}.docker_tag)" + local docker_target="${KUBE_DOCKER_REGISTRY}/${binary}:${KUBE_DOCKER_IMAGE_TAG}" + kube::log::status "Pushing ${binary} to ${docker_target}" + ( + "${docker_cmd[@]}" load -i "${temp_dir}/kubernetes/server/bin/${binary}.tar" + "${docker_cmd[@]}" tag -f "gcr.io/google_containers/${binary}:${docker_tag}" "${docker_target}" + "${docker_push_cmd[@]}" push "${docker_target}" + ) &> "${temp_dir}/${binary}-push.log" & + done + + kube::util::wait-for-jobs || { + kube::log::error "unable to push images. see ${temp_dir}/*.log for more info." + return 1 + } + + rm -rf "${temp_dir}" + return 0 +} diff --git a/build/push-official-release.sh b/build/push-official-release.sh index 592cd1e2160..47caa1c734a 100755 --- a/build/push-official-release.sh +++ b/build/push-official-release.sh @@ -34,6 +34,9 @@ KUBE_GCS_RELEASE_BUCKET='kubernetes-release' KUBE_GCS_RELEASE_PREFIX="release/${KUBE_RELEASE_VERSION}" KUBE_GCS_PUBLISH_VERSION="${KUBE_RELEASE_VERSION}" +KUBE_DOCKER_REGISTRY="gcr.io/google_containers" +KUBE_DOCKER_IMAGE_TAG="${KUBE_RELEASE_VERSION}" + KUBE_ROOT="$(dirname "${BASH_SOURCE}")/.." source "${KUBE_ROOT}/build/common.sh" @@ -44,4 +47,5 @@ fi kube::release::parse_and_validate_release_version "${KUBE_RELEASE_VERSION}" kube::release::gcs::release +kube::release::docker::release kube::release::gcs::publish_official 'latest' diff --git a/cluster/common.sh b/cluster/common.sh index 39a62965e07..ce887ee91e2 100755 --- a/cluster/common.sh +++ b/cluster/common.sh @@ -26,6 +26,7 @@ DEFAULT_KUBECONFIG="${HOME}/.kube/config" source "${KUBE_ROOT}/hack/lib/util.sh" source "${KUBE_ROOT}/hack/lib/logging.sh" +source "${KUBE_ROOT}/build/common.sh" # KUBE_RELEASE_VERSION_REGEX matches things like "v1.2.3" or "v1.2.3-alpha.4" # # NOTE This must match the version_regex in build/common.sh @@ -376,37 +377,6 @@ function stage-images() { KUBE_IMAGE_TAG="$(echo """${KUBE_GIT_VERSION}""" | sed 's/+/-/g')" - local docker_wrapped_binaries=( - "kube-apiserver" - "kube-controller-manager" - "kube-scheduler" - "kube-proxy" - ) - - local docker_cmd=("docker") - - if [[ "${KUBE_DOCKER_REGISTRY}" == "gcr.io/"* ]]; then - local docker_push_cmd=("gcloud" "docker") - fi - - local temp_dir="$(mktemp -d -t 'kube-server-XXXX')" - - tar xzfv "${SERVER_BINARY_TAR}" -C "${temp_dir}" &> /dev/null - - for binary in "${docker_wrapped_binaries[@]}"; do - local docker_tag="$(cat ${temp_dir}/kubernetes/server/bin/${binary}.docker_tag)" - ( - "${docker_cmd[@]}" load -i "${temp_dir}/kubernetes/server/bin/${binary}.tar" - "${docker_cmd[@]}" tag -f "gcr.io/google_containers/${binary}:${docker_tag}" "${KUBE_DOCKER_REGISTRY}/${binary}:${KUBE_IMAGE_TAG}" - "${docker_push_cmd[@]}" push "${KUBE_DOCKER_REGISTRY}/${binary}:${KUBE_IMAGE_TAG}" - ) &> "${temp_dir}/${binary}-push.log" & - done - - kube::util::wait-for-jobs || { - kube::log::error "unable to push images. see ${temp_dir}/*.log for more info." - return 1 - } - - rm -rf "${temp_dir}" - return 0 + # We are using the same mechanism as during a regular release. + kube::release::docker::release_server_images }