Files
homework_8/compose/scripts/build_and_push_images.sh

54 lines
1.5 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
REGISTRY="${1:-localhost:5005}"
TAG="${2:-1.0.0}"
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
RETRIES="${RETRIES:-6}"
RETRY_DELAY_SEC="${RETRY_DELAY_SEC:-15}"
retry_cmd() {
local attempt=1
local max_attempts="$1"
shift
until "$@"; do
if [ "${attempt}" -ge "${max_attempts}" ]; then
echo "Command failed after ${attempt} attempts: $*"
return 1
fi
echo "Attempt ${attempt}/${max_attempts} failed: $*"
attempt=$((attempt + 1))
sleep "${RETRY_DELAY_SEC}"
done
}
prepull_base_images() {
local images=(
"eclipse-temurin:21-jre"
"maven:3.9.11-eclipse-temurin-21"
"python:3.12-slim"
)
for image in "${images[@]}"; do
echo "Pulling base image ${image}"
retry_cmd "${RETRIES}" docker pull "${image}"
done
}
build_and_push() {
local image_name="$1"
local context_dir="$2"
local full_image="${REGISTRY}/${image_name}:${TAG}"
echo "Building ${full_image}"
retry_cmd "${RETRIES}" docker build -t "${full_image}" "${context_dir}"
echo "Pushing ${full_image}"
retry_cmd "${RETRIES}" docker push "${full_image}"
}
prepull_base_images
build_and_push "otus/slave-maven" "${ROOT_DIR}/images/slave-maven"
build_and_push "otus/slave-jjb" "${ROOT_DIR}/images/slave-jjb"
build_and_push "otus/test-selenium" "${ROOT_DIR}/images/test-selenium"
build_and_push "otus/test-api" "${ROOT_DIR}/images/test-api"
build_and_push "otus/test-mobile" "${ROOT_DIR}/images/test-mobile"