#!/bin/bash # Bring in the variables from SOLUTION file, supporting # nested substitution . SOLUTION VARS=($(sed -nE "s,(^[^#][^=]*).*$,\1,pg" SOLUTION)) for var in ${VARS[@]}; do export ${var} done RELEASE_INFO=${RELEASE_INFO:-N/A} [[ "${RELEASE_INFO}" == "N/A" ]] && { TAG=${TAG:-test-build-${OS_DISTRO}-${PACKAGE_STREAM}-$(date +%Y%m%d)} } || { TAG=${TAG:-test-${OS_DISTRO}-${PACKAGE_STREAM}-${RELEASE_INFO}} } if ! docker tag ${CONTAINER}:${TAG} ${REGISTRY_URL}/${CONTAINER}:${TAG}; then fail "Unable to tag .../${CONTAINER}:${TAG}" fi iter=5 while (( iter )); do echo "Pushing as .../${CONTAINER}:${TAG}" if docker push ${REGISTRY_URL}/${CONTAINER}:${TAG}; then break fi echo "Unable to tag and push image to ${REGISTRY_URL}." iter=$((iter-1)) if (( ! iter )); then fail "No more tries." fi echo "Waiting 10s before trying again..." sleep 10 done [[ "${TAG}" =~ "test-*" ]] && { cat << EOM This image was pushed with the 'test-' tag prefix: ${REGISTRY_URL}/${CONTAINER}:${TAG} If the image looks good, you can promote this build: 1. Tag the tree it as ${TAG} git commit -s -a -m "Build of ${TAG/test-}" git tag -f ${TAG/test-} 2. Remove the 'test-' prefix from the tag: docker tag ${CONTAINER}:${TAG/test-} ${REGISTRY_URL}/${CONTAINER}:${TAG/test-} docker push ${REGISTRY_URL}/${CONTAINER}:${TAG/test-} 3. Roll this version to the 'latest': docker tag ${CONTAINER}:${TAG/test-} ${REGISTRY_URL}/${CONTAINER}:latest-${OS_DISTRO}-${PACKAGE_STREAM} docker push ${REGISTRY_URL}/${CONTAINER}:latest-${OS_DISTRO}-${PACKAGE_STREAM} EOM } || { cat << EOM This image was pushed: ${REGISTRY_URL}/${CONTAINER}:${TAG} EOM }