X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/19ae770973482257117fe8ded5619c3018c4b60f..d6e43568d82b1d3adaf7a120b9178ba75cf989e7:/build/run-build-docker-jobs-image.sh diff --git a/build/run-build-docker-jobs-image.sh b/build/run-build-docker-jobs-image.sh new file mode 100755 index 0000000000..fcf849bc4d --- /dev/null +++ b/build/run-build-docker-jobs-image.sh @@ -0,0 +1,164 @@ +#!/bin/bash + +function usage { + echo >&2 + echo >&2 "usage: $0 [options]" + echo >&2 + echo >&2 "$0 options:" + echo >&2 " -t, --tags [csv_tags] comma separated tags" + echo >&2 " -u, --upload Upload the images (docker push)" + echo >&2 " -h, --help Display this help and exit" + echo >&2 + echo >&2 " If no options are given, just builds the images." +} + +upload=false + +# NOTE: This requires GNU getopt (part of the util-linux package on Debian-based distros). +TEMP=`getopt -o hut: \ + --long help,upload,tags: \ + -n "$0" -- "$@"` + +if [ $? != 0 ] ; then echo "Use -h for help"; exit 1 ; fi +# Note the quotes around `$TEMP': they are essential! +eval set -- "$TEMP" + +while [ $# -ge 1 ] +do + case $1 in + -u | --upload) + upload=true + shift + ;; + -t | --tags) + case "$2" in + "") + echo "ERROR: --tags needs a parameter"; + usage; + exit 1 + ;; + *) + tags=$2; + shift 2 + ;; + esac + ;; + --) + shift + break + ;; + *) + usage + exit 1 + ;; + esac +done + + +EXITCODE=0 + +COLUMNS=80 + +title () { + printf "\n%*s\n\n" $(((${#title}+$COLUMNS)/2)) "********** $1 **********" +} + +docker_push () { + if [[ ! -z "$tags" ]] + then + for tag in $( echo $tags|tr "," " " ) + do + $DOCKER tag -f $1 $1:$tag + done + fi + + # Sometimes docker push fails; retry it a few times if necessary. + for i in `seq 1 5`; do + $DOCKER push $* + ECODE=$? + if [[ "$ECODE" == "0" ]]; then + break + fi + done + + if [[ "$ECODE" != "0" ]]; then + title "!!!!!! docker push $* failed !!!!!!" + EXITCODE=$(($EXITCODE + $ECODE)) + fi +} + +timer_reset() { + t0=$SECONDS +} + +timer() { + echo -n "$(($SECONDS - $t0))s" +} + +# Sanity check +if ! [[ -n "$WORKSPACE" ]]; then + echo >&2 + echo >&2 "Error: WORKSPACE environment variable not set" + echo >&2 + exit 1 +fi + +echo $WORKSPACE + +# find the docker binary +DOCKER=`which docker.io` + +if [[ "$DOCKER" == "" ]]; then + DOCKER=`which docker` +fi + +if [[ "$DOCKER" == "" ]]; then + title "Error: you need to have docker installed. Could not find the docker executable." + exit 1 +fi + +# DOCKER +title "Starting docker build" + +timer_reset + +# clean up the docker build environment +cd "$WORKSPACE" +cd docker +rm -f jobs-image +rm -f config.yml + +# Get test config.yml file +cp $HOME/docker/config.yml . + +./build.sh jobs-image + +ECODE=$? + +if [[ "$ECODE" != "0" ]]; then + title "!!!!!! docker BUILD FAILED !!!!!!" + EXITCODE=$(($EXITCODE + $ECODE)) +fi + +title "docker build complete (`timer`)" + +title "uploading images" + +timer_reset + +if [[ "$ECODE" != "0" ]]; then + title "upload arvados images SKIPPED because build failed" +else + if [[ $upload == true ]]; then + ## 20150526 nico -- *sometimes* dockerhub needs re-login + ## even though credentials are already in .dockercfg + docker login -u arvados + + docker_push arvados/jobs + title "upload arvados images complete (`timer`)" + else + title "upload arvados images SKIPPED because no --upload option set" + fi +fi + +exit $EXITCODE