#!/bin/bash # Скрипт для сборки Podman образа и опционального экспорта в tar.gz # Использование: ./build-n-export.sh [export] # Пример: ./build-n-export.sh registry.altlinux.org/alt/base:p10 kuznetcovay go-speech v1.0.4 true # ./build-n-export.sh registry.altlinux.org/alt/base:p10 kuznetcovay go-speech v1.0.4 false (только сборка) set -e # Остановка при ошибке # Проверка аргументов if [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ] || [ -z "$4" ]; then echo "Ошибка: Недостаточно аргументов" echo "Использование: $0 [export]" echo " base_image - базовый образ для второго этапа сборки (например: registry.altlinux.org/alt/base:p10)" echo " registry - реестр для образа" echo " image_name - имя образа" echo " version - версия образа" echo " export - true/yes/1 - экспортировать образ (по умолчанию: false)" echo "" echo "Пример: $0 registry.altlinux.org/alt/base:p10 kuznetcovay go-speech v1.0.4 true" echo " $0 registry.altlinux.org/alt/base:p10 kuznetcovay go-speech v1.0.4 false (только сборка)" exit 1 fi BASE_IMAGE="$1" REGISTRY="$2" IMAGE_NAME="$3" VERSION="$4" EXPORT="${5:-false}" # По умолчанию false, если не указано FULL_IMAGE_NAME="${REGISTRY}/${IMAGE_NAME}:${VERSION}" OUTPUT_FILE="go-speech-${VERSION}.tar.gz" # Сохранение версии в VERSION.txt echo "${VERSION}" > VERSION.txt echo "✓ Версия сохранена в VERSION.txt: ${VERSION}" # Нормализация значения export (приводим к нижнему регистру) EXPORT=$(echo "$EXPORT" | tr '[:upper:]' '[:lower:]') # Проверка значения export if [[ "$EXPORT" == "true" || "$EXPORT" == "yes" || "$EXPORT" == "1" ]]; then DO_EXPORT=true else DO_EXPORT=false fi echo "=== Сборка Podman образа ===" echo "Базовый образ: ${BASE_IMAGE}" echo "Образ: ${FULL_IMAGE_NAME}" echo "Экспорт: ${DO_EXPORT}" echo "" # Сборка образа с передачей базового образа через build arg podman build --build-arg BASE_IMAGE="${BASE_IMAGE}" -t "${FULL_IMAGE_NAME}" . if [ $? -ne 0 ]; then echo "Ошибка: Не удалось собрать образ" exit 1 fi echo "" echo "✓ Образ успешно собран" echo "" # Экспорт образа в tar.gz (только если указано) if [ "$DO_EXPORT" = true ]; then echo "=== Экспорт образа в tar.gz ===" echo "Файл: ${OUTPUT_FILE}" echo "" podman save "${FULL_IMAGE_NAME}" | gzip > "${OUTPUT_FILE}" if [ $? -ne 0 ]; then echo "Ошибка: Не удалось экспортировать образ" exit 1 fi # Проверка размера файла FILE_SIZE=$(du -h "${OUTPUT_FILE}" | cut -f1) echo "✓ Образ успешно экспортирован" echo "Размер файла: ${FILE_SIZE}" echo "" echo "Файл сохранен: ${OUTPUT_FILE}" else echo "Экспорт пропущен (параметр export = false)" fi