build-stx-images.sh: new parameter --os-label

New parameter --os-label allows one to tag & push images with the
specified label in place of the (default) OS id, eg:

  --os=distroless : look for "distroless" build recipes and tag
  them as "distroless"

  --os=distroless --os-label=debian : look for "distroless" build
  recipes, but tag them as "debian"

We need this in order to support both CentOS and Debian daily builds
generating and pushing distroless images to the same namespace in
Docker Hub, so that:

* CentOS jobs create distroless images with tags similar to
  master-distroless-stable-20220823T021745Z.0
* Debian jobs create distroless images with tags similar to
  master-debian-stable-20220823T021745Z.0

Story: 2010226
Task: 46138

Signed-off-by: Davlet Panech <davlet.panech@windriver.com>
Change-Id: Idf99651e61e729eaf687e6edd2c2b9f473a8684f
This commit is contained in:
Davlet Panech 2022-08-25 22:36:34 -04:00
parent 0a5dda2d60
commit 0b16615328

View File

@ -21,6 +21,7 @@ source ${MY_REPO}/build-tools/git-utils.sh
SUPPORTED_OS_ARGS=('centos' 'debian' 'distroless') SUPPORTED_OS_ARGS=('centos' 'debian' 'distroless')
OS= OS=
OS_LABEL=
BUILD_STREAM=stable BUILD_STREAM=stable
IMAGE_VERSION=$(date --utc '+%Y.%m.%d.%H.%M') # Default version, using timestamp IMAGE_VERSION=$(date --utc '+%Y.%m.%d.%H.%M') # Default version, using timestamp
PREFIX=dev PREFIX=dev
@ -52,6 +53,10 @@ $(basename $0)
Options: Options:
--os: Specify base OS (valid options: ${SUPPORTED_OS_ARGS[@]}) --os: Specify base OS (valid options: ${SUPPORTED_OS_ARGS[@]})
--os-label: Use this string as part of image tags, log file names and
image record file names, in place of OS, eg:
"--os distroless --os-label debian" would look for
"distroless" build recipes, but tag them as "debian"
--version: Specify version for output image --version: Specify version for output image
--stream: Build stream, stable or dev (default: stable) --stream: Build stream, stable or dev (default: stable)
--base: Specify base docker image (required option) --base: Specify base docker image (required option)
@ -353,9 +358,9 @@ function post_build {
if [ "${OS}" = "centos" ]; then if [ "${OS}" = "centos" ]; then
# Record python modules and packages # Record python modules and packages
docker run --entrypoint /bin/bash --rm ${build_image_name} -c 'rpm -qa | sort' \ docker run --entrypoint /bin/bash --rm ${build_image_name} -c 'rpm -qa | sort' \
> ${WORKDIR}/${LABEL}-${OS}-${BUILD_STREAM}.rpmlst > ${WORKDIR}/${LABEL}-${OS_LABEL}-${BUILD_STREAM}.rpmlst
docker run --entrypoint /bin/bash --rm ${build_image_name} -c 'pip freeze 2>/dev/null | sort' \ docker run --entrypoint /bin/bash --rm ${build_image_name} -c 'pip freeze 2>/dev/null | sort' \
> ${WORKDIR}/${LABEL}-${OS}-${BUILD_STREAM}.piplst > ${WORKDIR}/${LABEL}-${OS_LABEL}-${BUILD_STREAM}.piplst
fi fi
RESULTS_BUILT+=(${build_image_name}) RESULTS_BUILT+=(${build_image_name})
@ -555,7 +560,7 @@ function build_image_loci {
with_retries ${MAX_ATTEMPTS} docker build ${WORKDIR}/loci \ with_retries ${MAX_ATTEMPTS} docker build ${WORKDIR}/loci \
"${BUILD_ARGS[@]}" \ "${BUILD_ARGS[@]}" \
--tag ${build_image_name} 2>&1 | tee ${WORKDIR}/docker-${LABEL}-${OS}-${BUILD_STREAM}.log --tag ${build_image_name} 2>&1 | tee ${WORKDIR}/docker-${LABEL}-${OS_LABEL}-${BUILD_STREAM}.log
if [ ${PIPESTATUS[0]} -ne 0 ]; then if [ ${PIPESTATUS[0]} -ne 0 ]; then
echo "Failed to build ${LABEL}... Aborting" echo "Failed to build ${LABEL}... Aborting"
RESULTS_FAILED+=(${LABEL}) RESULTS_FAILED+=(${LABEL})
@ -686,7 +691,7 @@ function build_image_docker {
fi fi
BASE_BUILD_ARGS+=(--tag ${build_image_name}) BASE_BUILD_ARGS+=(--tag ${build_image_name})
with_retries ${MAX_ATTEMPTS} docker build ${BASE_BUILD_ARGS[@]} 2>&1 | tee ${WORKDIR}/docker-${LABEL}-${OS}-${BUILD_STREAM}.log with_retries ${MAX_ATTEMPTS} docker build ${BASE_BUILD_ARGS[@]} 2>&1 | tee ${WORKDIR}/docker-${LABEL}-${OS_LABEL}-${BUILD_STREAM}.log
if [ ${PIPESTATUS[0]} -ne 0 ]; then if [ ${PIPESTATUS[0]} -ne 0 ]; then
echo "Failed to build ${LABEL}... Aborting" echo "Failed to build ${LABEL}... Aborting"
@ -757,7 +762,7 @@ function build_image_script {
cp $(dirname ${image_build_file})/${SCRIPT} ${SCRIPT} cp $(dirname ${image_build_file})/${SCRIPT} ${SCRIPT}
local build_image_name="${USER}/${LABEL}:${IMAGE_TAG_BUILD}" local build_image_name="${USER}/${LABEL}:${IMAGE_TAG_BUILD}"
with_retries ${MAX_ATTEMPTS} ${COMMAND} ${SCRIPT} ${ARGS} ${build_image_name} $HTTP_PROXY $HTTPS_PROXY $NO_PROXY 2>&1 | tee ${WORKDIR}/docker-${LABEL}-${OS}-${BUILD_STREAM}.log with_retries ${MAX_ATTEMPTS} ${COMMAND} ${SCRIPT} ${ARGS} ${build_image_name} $HTTP_PROXY $HTTPS_PROXY $NO_PROXY 2>&1 | tee ${WORKDIR}/docker-${LABEL}-${OS_LABEL}-${BUILD_STREAM}.log
if [ ${PIPESTATUS[0]} -ne 0 ]; then if [ ${PIPESTATUS[0]} -ne 0 ]; then
echo "Failed to build ${LABEL}... Aborting" echo "Failed to build ${LABEL}... Aborting"
@ -799,7 +804,7 @@ function build_image {
esac esac
} }
OPTS=$(getopt -o hN -l help,os:,version:,release:,stream:,push,http_proxy:,https_proxy:,no_proxy:,user:,registry:,base:,wheels:,wheels-alternate:,wheels-py2:,only:,skip:,prefix:,latest,latest-prefix:,clean,cache,attempts:,no-pull-base -- "$@") OPTS=$(getopt -o hN -l help,os:,os-label:,version:,release:,stream:,push,http_proxy:,https_proxy:,no_proxy:,user:,registry:,base:,wheels:,wheels-alternate:,wheels-py2:,only:,skip:,prefix:,latest,latest-prefix:,clean,cache,attempts:,no-pull-base -- "$@")
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
usage usage
exit 1 exit 1
@ -822,6 +827,10 @@ while true; do
OS=$2 OS=$2
shift 2 shift 2
;; ;;
--os-label)
OS_LABEL=$2
shift 2
;;
--wheels) --wheels)
WHEELS=$2 WHEELS=$2
shift 2 shift 2
@ -937,6 +946,10 @@ if [ ${VALID_OS} -ne 0 ]; then
exit 1 exit 1
fi fi
if [[ -z "$OS_LABEL" ]] ; then
OS_LABEL="$OS"
fi
if [ -z "${BASE}" ]; then if [ -z "${BASE}" ]; then
echo "Base image must be specified with --base option." >&2 echo "Base image must be specified with --base option." >&2
exit 1 exit 1
@ -1030,7 +1043,7 @@ function find_image_build_files {
} }
find_image_build_files find_image_build_files
IMAGE_TAG="${OS}-${BUILD_STREAM}" IMAGE_TAG="${OS_LABEL}-${BUILD_STREAM}"
IMAGE_TAG_LATEST="${IMAGE_TAG}-latest" IMAGE_TAG_LATEST="${IMAGE_TAG}-latest"
if [ -n "${LATEST_PREFIX}" ]; then if [ -n "${LATEST_PREFIX}" ]; then
@ -1056,8 +1069,8 @@ if [ $? -ne 0 ]; then
exit 1 exit 1
fi fi
TAG_LIST_FILE=${WORKDIR}/images-${OS}-${BUILD_STREAM}-versioned.lst TAG_LIST_FILE=${WORKDIR}/images-${OS_LABEL}-${BUILD_STREAM}-versioned.lst
TAG_LIST_LATEST_FILE=${WORKDIR}/images-${OS}-${BUILD_STREAM}-latest.lst TAG_LIST_LATEST_FILE=${WORKDIR}/images-${OS_LABEL}-${BUILD_STREAM}-latest.lst
if [ "${PUSH}" = "yes" ]; then if [ "${PUSH}" = "yes" ]; then
if is_empty ${ONLY[@]} && is_empty ${SKIP[@]}; then if is_empty ${ONLY[@]} && is_empty ${SKIP[@]}; then
# Reset image record files, since we're building everything # Reset image record files, since we're building everything