86 lines
3.4 KiB
Bash
86 lines
3.4 KiB
Bash
#!/bin/bash
|
||
|
||
# Скрипт для сборки Podman образа и опционального экспорта в tar.gz
|
||
# Использование: ./build-n-export.sh <base_image> <registry> <image_name> <version> [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 <base_image> <registry> <image_name> <version> [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 |