#!/bin/bash TOPDIR=$(git rev-parse --show-toplevel) IMGDIR="$(cd "$(dirname "$0")" && pwd)" . $TOPDIR/tools/validate-docker-execute RELEASE_NAMESPACE=kollaglue NAMESPACE=kollaglue PREFIX=centos-rdo- TAG=$(git rev-parse --short HEAD) RELEASE_TAG=latest MAX_TRIES=1 usage () { cat <<EOF Usage: $0 [options] Options: --prefix <image_prefix> --private-registry, -r <registry_address[:port]> --namespace, -n <namespace> --tag, -t <tag> --push, -p --force-rm, -f --no-cache, -N --pull, -u --release --no-use-released-parent --retry <number_of_retries> EOF } [ -f $TOPDIR/.buildconf ] && . $TOPDIR/.buildconf [ -f $IMGDIR/.buildinfo ] && . $IMGDIR/.buildinfo [ -f $IMGDIR/.buildconf ] && . $IMGDIR/.buildconf ARGS=$(getopt -o hr:n:t:pfuN -l help,prefix:,namespace:,push,pull,private-registry:,release,tag:,force-rm,no-cache,no-use-released-parent,retry: -- "$@") || { usage >&2; exit 2; } eval set -- "$ARGS" while :; do case "$1" in (--help|-h) usage exit 0 ;; (--prefix) shift FORCE_PREFIX="$1" ;; (--release) MODE=release NAMESPACE=$RELEASE_NAMESPACE TAG=$RELEASE_TAG ;; (--tag|-t) shift TAG="$1" ;; (--push|-p) PUSH=1 ;; (--pull|-u) BUILDFLAGS="${BUILDFLAGS} --pull=true" ;; (--force-rm|-f) BUILDFLAGS="${BUILDFLAGS} --force-rm=true" ;; (--no-cache|-N) BUILDFLAGS="${BUILDFLAGS} --no-cache" ;; (--private-registry|-r) shift REGISTRY="$1" ;; (--namespace|-n) shift NAMESPACE="$1" ;; (--no-use-released-parent) USE_CURRENT_TAG=1 ;; (--retry) shift MAX_TRIES=$((MAX_TRIES + $1)) ;; (--) break ;; esac shift done if [[ $USE_CURRENT_TAG = 1 ]]; then PARENT_TAG=$TAG else PARENT_TAG=$RELEASE_TAG fi if [ "$NAMESPACE" = "$RELEASE_NAMESPACE" ] \ && [ "$TAG" = "$RELEASE_TAG" ] \ && ! [ "$MODE" = "release" ]; then echo "ERROR: use --release to build a release image" >&2 exit 1 fi if [[ -n "${PREFIX}" && -n "${FORCE_PREFIX}" ]]; then PREFIX="${FORCE_PREFIX}" fi if [[ -n $REGISTRY ]]; then NAMESPACE="${REGISTRY}/${NAMESPACE}" fi IMAGE="${PREFIX}${IMGDIR##*/}" FULLIMAGE="${NAMESPACE}/${IMAGE}${TAG:+:${TAG}}" cat <<EOF ====================================================================== $FULLIMAGE ====================================================================== EOF if [ "$MODE" = "release" ]; then echo "*** YOU ARE BUILDING A RELEASE IMAGE ***" echo fi TMPDIR=$(mktemp -d /tmp/kolla-build.XXXXXXXXXX) cp -aL $IMGDIR/* $TMPDIR # Use an extension for in-place editing for portability, as GNU and BSD # versions of sed behave differently otherwise sed -i.bak "s|%%KOLLA_NAMESPACE%%|${NAMESPACE}|g" $TMPDIR/Dockerfile sed -i.bak "s|%%KOLLA_PREFIX%%|${PREFIX}|g" $TMPDIR/Dockerfile sed -i.bak "s|%%KOLLA_TAG%%|${PARENT_TAG}|g" $TMPDIR/Dockerfile if [[ "${SOURCE_INSTALL_AVAILABLE}" == "1" ]]; then . ${TOPDIR}/tools/gen-source-tar.sh fi TRY=0 while [ $((MAX_TRIES - 1)) -gt $TRY ]; do if docker build ${BUILDFLAGS} -t "$FULLIMAGE" $TMPDIR; then break else echo "WARNING: failed to build $FULLIMAGE, retrying..." TRY=$((TRY + 1)) fi done if ! docker build ${BUILDFLAGS} -t "$FULLIMAGE" $TMPDIR; then echo "ERROR: failed to build $FULLIMAGE" exit 1 fi rm -rf $TMPDIR echo "Built: $FULLIMAGE" if [ "$PUSH" = 1 ]; then if ! docker push "$FULLIMAGE"; then echo "ERROR: failed to push $FULLIMAGE" exit 1 fi echo "Pushed: $FULLIMAGE" fi