#! /bin/bash -e # This file is a wrapper around docker build with specific concerns around image # versions and registry deployment... It also attempts to detect any potential # missing dependencies and warns you about them. gecko_root="$( cd "$( dirname "${BASH_SOURCE[0]}" )/../.." && pwd )" usage() { echo "Build a docker image (and tag it)" echo echo "$0 " echo echo " Images are defined in testing/docker/." echo " For more see: $PWD/README.md" echo } usage_err() { echo $1 echo usage exit 1 } find_registry() { local reg="$1/REGISTRY" if [ -f $reg ]; then echo $folder return fi } build() { local image_name=$1 local folder="$gecko_root/testing/docker/$image_name" local folder_reg="$folder/REGISTRY" local folder_ver="$folder/VERSION" local could_deploy=false if [ "$image_name" == "" ]; then usage return fi test -d "$folder" || usage_err "Unknown image: $image_name" # Assume that if an image context directory does not contain a VERSION file then # it is not suitable for deploying. Default to using 'latest' as the tag and # warn the user at the end. if [ ! -f $folder_ver ]; then echo "This image does not container a VERSION file. Will use 'latest' as the image version" local tag="$image_name:latest" else local version=$(cat $folder_ver) test -n "$version" || usage_err "$folder_ver is empty aborting..." # Fallback to default registry if one is not in the folder... if [ ! -f "$folder_reg" ]; then folder_reg=$PWD/REGISTRY fi local registry=$(cat $folder_reg) test -n "$registry" || usage_err "$folder_reg is empty aborting..." local tag="$registry/$image_name:$version" local could_deploy=true fi if [ -f $folder/build.sh ]; then shift $folder/build.sh -t $tag $* || exit 1 else # use --no-cache so that we always get the latest updates from yum # and use the latest version of system-setup.sh ( cd $folder/.. && docker build --no-cache -t $tag $image_name ) || exit 1 fi echo "Success built $image_name and tagged with $tag" if [ "$could_deploy" = true ]; then echo "If deploying now you can run 'docker push $tag'" else echo "*****************************************************************" echo "WARNING: No VERSION file was found in the image directory." echo "Image has not been prepared for deploying at this time." echo "However, the image can be run locally. To prepare to " echo "push to a user account on a docker registry, tag the image " echo "by running 'docker tag $tag [REGISTRYHOST/][USERNAME/]NAME[:TAG]" echo "prior to running 'docker push'." echo "*****************************************************************" fi } if ! which docker > /dev/null; then echo "Docker must be installed read installation instructions at docker.com" echo usage exit 1 fi # TODO: In the future we should check minimum docker version it does matter. if ! docker version > /dev/null; then echo "Docker server is unresponsive run 'docker ps' and check that docker is" echo "running" echo usage exit 1 fi build $*