Files
sless/examples/push-sample/build_and_push.sh
T

54 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
# 2026-03-11 10:02
# Скрипт: собирает минимальный образ и, при разрешении, пушит в реестр PearlHarbor
# Требования: `docker` в PATH. Скрипт НЕ будет пушить без DO_PUSH=true.
set -euo pipefail
# Получаем значения из файла секретов
SECRETS_FILE="secrets/pearlharbor_registry.txt"
if [ ! -f "$SECRETS_FILE" ]; then
echo "Файл с секретами не найден: $SECRETS_FILE"
exit 1
fi
connection_url=$(grep -E '^connection_url=' "$SECRETS_FILE" | cut -d'=' -f2-)
admin_pass=$(grep -E '^admin_pass=' "$SECRETS_FILE" | cut -d'=' -f2-)
if [ -z "$connection_url" ]; then
echo "Не найден connection_url в $SECRETS_FILE"
exit 1
fi
# Убираем протокол и возможный слеш на конце
registry_host=$(echo "$connection_url" | sed -E 's~https?://~~' | sed -E 's~/$~~')
image_name="$registry_host/sless-sample:latest"
echo "Registry host: $registry_host"
echo "Image name: $image_name"
echo "Собираю образ локально..."
docker build -t sless-sample:local -f Dockerfile .. || {
echo "Сборка не удалась"; exit 1
}
echo "Готово. Образ: sless-sample:local"
if [ "${DO_PUSH:-}" != "true" ]; then
echo "DO_PUSH != true — пуш не будет выполнен. Чтобы запушить: DO_PUSH=true ./build_and_push.sh"
exit 0
fi
# Если дошли до сюда — выполняем login/push
registry_user=${REGISTRY_USER:-admin}
echo "Выполняю docker login к $registry_host как '$registry_user'"
echo "$admin_pass" | docker login "$registry_host" -u "$registry_user" --password-stdin
echo "Тегирую и пушу образ: $image_name"
docker tag sless-sample:local "$image_name"
docker push "$image_name"
echo "Пуш завершён. Проверьте реестр для образа: $image_name"