mirror of https://github.com/k3s-io/k3s
Refactor GCS parts of new release process
parent
233765967b
commit
ec8ede9354
139
build/common.sh
139
build/common.sh
|
@ -82,35 +82,6 @@ function kube::build::verify-prereqs() {
|
|||
fi
|
||||
}
|
||||
|
||||
# Verify things are set up for uploading to GCS
|
||||
function kube::build::verify-gcs-prereqs() {
|
||||
if [[ -z "$(which gsutil)" || -z "$(which gcloud)" ]]; then
|
||||
echo "Releasing Kubernetes requires gsutil and gcloud. Please download,"
|
||||
echo "install and authorize through the Google Cloud SDK: "
|
||||
echo
|
||||
echo " https://developers.google.com/cloud/sdk/"
|
||||
return 1
|
||||
fi
|
||||
|
||||
FIND_ACCOUNT="gcloud auth list 2>/dev/null | grep '(active)' | awk '{ print \$2 }'"
|
||||
GCLOUD_ACCOUNT=${GCLOUD_ACCOUNT-$(eval ${FIND_ACCOUNT})}
|
||||
if [[ -z "${GCLOUD_ACCOUNT}" ]]; then
|
||||
echo "No account authorized through gcloud. Please fix with:"
|
||||
echo
|
||||
echo " gcloud auth login"
|
||||
return 1
|
||||
fi
|
||||
|
||||
FIND_PROJECT="gcloud config list project | tail -n 1 | awk '{ print \$3 }'"
|
||||
GCLOUD_PROJECT=${GCLOUD_PROJECT-$(eval ${FIND_PROJECT})}
|
||||
if [[ -z "${GCLOUD_PROJECT}" ]]; then
|
||||
echo "No account authorized through gcloud. Please fix with:"
|
||||
echo
|
||||
echo " gcloud config set project <project id>"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Building
|
||||
|
||||
|
@ -229,17 +200,84 @@ function kube::build::copy-output() {
|
|||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Release
|
||||
# Build final release artifacts
|
||||
|
||||
# Package up all of the cross compiled clients
|
||||
function kube::build::package-tarballs() {
|
||||
mkdir -p "${RELEASE_DIR}"
|
||||
|
||||
# Find all of the built kubecfg binaries
|
||||
local platform
|
||||
for platform in _output/build/*/* ; do
|
||||
local PLATFORM_TAG=${platform}
|
||||
PLATFORM_TAG=${PLATFORM_TAG#*/*/} # remove the first two path components
|
||||
PLATFORM_TAG=${PLATFORM_TAG/\//-} # Replace a "/" for a "-"
|
||||
echo "+++ Building client package for $PLATFORM_TAG"
|
||||
|
||||
local CLIENT_RELEASE_STAGE="${KUBE_REPO_ROOT}/_output/release-stage/${PLATFORM_TAG}/kubernetes"
|
||||
mkdir -p "${CLIENT_RELEASE_STAGE}"
|
||||
mkdir -p "${CLIENT_RELEASE_STAGE}/bin"
|
||||
|
||||
cp "${platform}"/* "${CLIENT_RELEASE_STAGE}/bin"
|
||||
|
||||
local CLIENT_PACKAGE_NAME="${RELEASE_DIR}/kubernetes-${PLATFORM_TAG}.tar.gz"
|
||||
tar czf "${CLIENT_PACKAGE_NAME}" \
|
||||
-C "${CLIENT_RELEASE_STAGE}/.." \
|
||||
.
|
||||
done
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# GCS Release
|
||||
|
||||
function kube::release::gcs::release() {
|
||||
kube::release::gcs::verify-prereqs
|
||||
kube::release::gcs::ensure-release-bucket
|
||||
kube::release::gcs::push-images
|
||||
kube::release::gcs::copy-release-tarballs
|
||||
}
|
||||
|
||||
# Verify things are set up for uploading to GCS
|
||||
function kube::release::gcs::verify-prereqs() {
|
||||
if [[ -z "$(which gsutil)" || -z "$(which gcloud)" ]]; then
|
||||
echo "Releasing Kubernetes requires gsutil and gcloud. Please download,"
|
||||
echo "install and authorize through the Google Cloud SDK: "
|
||||
echo
|
||||
echo " https://developers.google.com/cloud/sdk/"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ -z "${GCLOUD_ACCOUNT-}" ]]; then
|
||||
GCLOUD_ACCOUNT=$(gcloud auth list 2>/dev/null | awk '/(active)/ { print $2 }')
|
||||
fi
|
||||
if [[ -z "${GCLOUD_ACCOUNT}" ]]; then
|
||||
echo "No account authorized through gcloud. Please fix with:"
|
||||
echo
|
||||
echo " gcloud auth login"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ -z "${GCLOUD_PROJECT-}" ]]; then
|
||||
GCLOUD_PROJECT=$(gcloud config list project | awk '{project = $3} END {print project}')
|
||||
fi
|
||||
if [[ -z "${GCLOUD_PROJECT}" ]]; then
|
||||
echo "No account authorized through gcloud. Please fix with:"
|
||||
echo
|
||||
echo " gcloud config set project <project id>"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Create a unique bucket name for releasing Kube and make sure it exists.
|
||||
function kube::build::ensure-gcs-release-bucket() {
|
||||
function kube::release::gcs::ensure-release-bucket() {
|
||||
local project_hash
|
||||
if which md5 > /dev/null 2>&1; then
|
||||
HASH=$(md5 -q -s "$GCLOUD_PROJECT")
|
||||
project_hash=$(md5 -q -s "$GCLOUD_PROJECT")
|
||||
else
|
||||
HASH=$(echo -n "$GCLOUD_PROJECT" | md5sum)
|
||||
project_hash=$(echo -n "$GCLOUD_PROJECT" | md5sum)
|
||||
fi
|
||||
HASH=${HASH:0:5}
|
||||
KUBE_RELEASE_BUCKET=${KUBE_RELEASE_BUCKET-kubernetes-releases-$HASH}
|
||||
project_hash=${project_hash:0:5}
|
||||
KUBE_RELEASE_BUCKET=${KUBE_RELEASE_BUCKET-kubernetes-releases-${project_hash}}
|
||||
KUBE_RELEASE_PREFIX=${KUBE_RELEASE_PREFIX-devel/}
|
||||
KUBE_DOCKER_REG_PREFIX=${KUBE_DOCKER_REG_PREFIX-docker-reg/}
|
||||
|
||||
|
@ -249,7 +287,7 @@ function kube::build::ensure-gcs-release-bucket() {
|
|||
fi
|
||||
}
|
||||
|
||||
function kube::build::ensure-gcs-docker-registry() {
|
||||
function kube::release::gcs::ensure-docker-registry() {
|
||||
local -r REG_CONTAINER_NAME="gcs-registry"
|
||||
|
||||
local -r RUNNING=$(docker inspect ${REG_CONTAINER_NAME} 2>/dev/null \
|
||||
|
@ -283,8 +321,8 @@ function kube::build::ensure-gcs-docker-registry() {
|
|||
sleep 5
|
||||
}
|
||||
|
||||
function kube::build::push-images-to-gcs() {
|
||||
kube::build::ensure-gcs-docker-registry
|
||||
function kube::release::gcs::push-images() {
|
||||
kube::release::gcs::ensure-docker-registry
|
||||
|
||||
# Tag each of our run binaries with the right registry and push
|
||||
for b in ${KUBE_RUN_BINARIES} ; do
|
||||
|
@ -295,30 +333,7 @@ function kube::build::push-images-to-gcs() {
|
|||
done
|
||||
}
|
||||
|
||||
# Package up all of the cross compiled clients
|
||||
function kube::build::package-tarballs() {
|
||||
mkdir -p "${RELEASE_DIR}"
|
||||
|
||||
# Find all of the built kubecfg binaries
|
||||
for platform in _output/build/*/* ; do
|
||||
echo $platform
|
||||
local PLATFORM_TAG=$(echo $platform | awk -F / '{ printf "%s-%s", $3, $4 }')
|
||||
echo "+++ Building client package for $PLATFORM_TAG"
|
||||
|
||||
local CLIENT_RELEASE_STAGE="${KUBE_REPO_ROOT}/_output/release-stage/${PLATFORM_TAG}/kubernetes"
|
||||
mkdir -p "${CLIENT_RELEASE_STAGE}"
|
||||
mkdir -p "${CLIENT_RELEASE_STAGE}/bin"
|
||||
|
||||
cp $platform/* "${CLIENT_RELEASE_STAGE}/bin"
|
||||
|
||||
local CLIENT_PACKAGE_NAME="${RELEASE_DIR}/kubernetes-${PLATFORM_TAG}.tar.gz"
|
||||
tar czf ${CLIENT_PACKAGE_NAME} \
|
||||
-C "${CLIENT_RELEASE_STAGE}/.." \
|
||||
.
|
||||
done
|
||||
}
|
||||
|
||||
function kube::build::copy-release-to-gcs() {
|
||||
function kube::release::gcs::copy-release-tarballs() {
|
||||
# TODO: This isn't atomic. There will be points in time where there will be
|
||||
# no active release. Also, if something fails, the release could be half-
|
||||
# copied. The real way to do this would perhaps to have some sort of release
|
||||
|
|
|
@ -23,8 +23,6 @@ set -e
|
|||
source $(dirname $0)/common.sh
|
||||
|
||||
kube::build::verify-prereqs
|
||||
kube::build::verify-gcs-prereqs
|
||||
kube::build::ensure-gcs-release-bucket
|
||||
kube::build::build-image
|
||||
kube::build::run-build-command build/build-image/make-binaries.sh
|
||||
kube::build::run-build-command build/build-image/make-cross.sh
|
||||
|
@ -33,5 +31,4 @@ kube::build::run-build-command build/build-image/run-integration.sh
|
|||
kube::build::copy-output
|
||||
kube::build::run-image
|
||||
kube::build::package-tarballs
|
||||
kube::build::push-images-to-gcs
|
||||
kube::build::copy-release-to-gcs
|
||||
kube::release::gcs::release
|
||||
|
|
Loading…
Reference in New Issue