#!/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"