54 lines
1.5 KiB
Bash
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"
|