#!/bin/bash usage() { echo -n "Usage: ${0} " echo exit 1 } # --- Settings RootDir=${1} if [ -z "${RootDir}" ] ; then usage fi RegistryService=cloud21.cvtt.vpn:5500 RegistryProtocol=http ConfigUrl=http://cloud23.cvtt.vpn:6789/admin/docker_images ReleaseHost="cloud21.cvtt.vpn" ReleasePort="22" ReleaseUser="cvttdist" ReleaseDir="/home/cvttdist/software/cvtt2" DIMAGES_CONFIG=$(curl -s ${ConfigUrl} | ${HOME}/bin/hjson -j) # RootDir=/home/oleg/prod SetVersionScript=/home/oleg/prod/ops/scripts/set_version.sh # --------------- D E B U G mkdir -p ${RootDir} build_docker_image() { title=${1} image_name=${2} docker_dev=${3} project=${4} echo "Building ${title}..." echo "ImageName=${image_name}" echo "DockerDev=${docker_dev}" echo "BasedOnDist=${project}" # Get Latest DIST version echo "Checking for latest version of ${project} on ${ReleaseUser}@${ReleaseHost}:${ReleaseDir}" image_version=$(get_latest_dist_version ${project}) if [ -z "${image_version}" ]; then echo "No latest version found for ${project}" exit 1 fi echo "Latest version is ${image_version}" if image_exists "${image_name}" "${image_version}"; then echo "Image $image_name:$image_version exists in the registry. Building is not required." return fi echo "Image $image_name:$image_version does not exist in the registry." echo "getting lastest version of ${project} on ${ReleaseUser}@${ReleaseHost}:${ReleaseDir}" ${SetVersionScript} ${project} ${image_version} } image_exists() { image_name=${1} version=${2} response=$(curl -s -o /dev/null -w "%{http_code}" "${RegistryProtocol}://${RegistryService}/v2/${image_name}/manifests/${version}" -H "Accept: application/vnd.docker.distribution.manifest.v2+json") if [ "$response" -eq 200 ]; then return 0 else return 1 fi } get_latest_dist_version() { project=${1} Version=$(ssh -q -p ${ReleasePort} ${ReleaseUser}@${ReleaseHost} "ls -tr ${ReleaseDir}/${project} | tail -1" ) echo "${Version}" } echo RootDir=${RootDir} cd ${RootDir} echo "Getting latest version of docker_dev" Cmd="${SetVersionScript} docker_dev latest" echo ${Cmd} eval ${Cmd} echo "${DIMAGES_CONFIG}" | jq -c 'to_entries[]' | while IFS= read -r item; do # Extract key (name) and values title=$(echo "$item" | jq -r '.key') image_name=$(echo "$item" | jq -r '.value.image_name') docker_dev=$(echo "$item" | jq -r '.value.docker_dev') project=$(echo "$item" | jq -r '.value.based_on_dist') build_docker_image "$title" "$image_name" "$docker_dev" "$project" done exit #=============================================================================== #=============================================================================== DockerDir=$(realpath $(dirname ${0})/${AppPath}) AppName=$(basename ${AppPath}) ImageName=${AppName} ImageDir=${HOME}/docker_images mkdir -p ${ImageDir} Version=$(cat ${RootDir}/cvttpy/release_version.txt | awk -F, '{print $1}') cd ${RootDir} Cmd="docker build -t ${ImageName} -t ${ImageName}:latest -t ${ImageName}:${Version} -f ${DockerDir}/Dockerfile ." echo ${Cmd} eval ${Cmd} || exit Cmd="docker tag ${ImageName}:latest ${RegistryService}/${ImageName}:latest" echo ${Cmd} eval ${Cmd} || exit Cmd="docker tag ${ImageName}:${Version} ${RegistryService}/${ImageName}:${Version}" echo ${Cmd} eval ${Cmd} || exit Cmd="docker push ${RegistryService}/${ImageName}:latest" echo ${Cmd} eval ${Cmd} || exit Cmd="docker push ${RegistryService}/${ImageName}:${Version}" echo ${Cmd} eval ${Cmd} || exit