init 0.1.0
This commit is contained in:
parent
72901d7978
commit
99c924f609
8 changed files with 584 additions and 279 deletions
188
build.sh
Executable file
188
build.sh
Executable file
|
@ -0,0 +1,188 @@
|
|||
#!/bin/sh
|
||||
|
||||
usage() {
|
||||
local exit_code="$1"
|
||||
echo "✏️ Использование: $0 -n <имя> -v <версия> -b <версия_базового_образа> [-o] [-R <репозитории>] [-r <адрес_registry>] [-p <порт>] [-h]"
|
||||
echo "🔧 Опции:"
|
||||
echo " -n, --name Имя собираемого образа (обязательно)"
|
||||
echo " -v, --version Версия собираемого образа в формате X.Y.Z (обязательно)"
|
||||
echo " -b, --base-image-version Версия базового образа Alpine Linux (обязательно)"
|
||||
echo " -o, --old Использовать метод сборки для устаревшей версии Docker"
|
||||
echo " -R, --repositories Список репозиториев для сборки (через точку с запятой)"
|
||||
echo " -r, --push-to-registry Адрес registry для отправки образов"
|
||||
echo " -p, --port Порт registry"
|
||||
echo " -h, --help Показать эту справку"
|
||||
exit "$exit_code"
|
||||
}
|
||||
|
||||
validate_version() {
|
||||
echo "$1" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+$' || {
|
||||
echo "❌ Ошибка: Версия должна быть в формате X.Y.Z (например, 2.5.7)"
|
||||
usage 1
|
||||
}
|
||||
}
|
||||
|
||||
validate_address() {
|
||||
if [ -z "$1" ]; then
|
||||
echo "❌ Ошибка: Адрес registry не может быть пустым"
|
||||
usage 1
|
||||
fi
|
||||
}
|
||||
|
||||
validate_port() {
|
||||
if [ -n "$1" ]; then
|
||||
echo "$1" | grep -Eq '^[0-9]+$' || {
|
||||
echo "❌ Ошибка: Порт должен быть числом"
|
||||
usage 1
|
||||
}
|
||||
fi
|
||||
}
|
||||
|
||||
check_dockerfile() {
|
||||
if [ ! -f "$1" ]; then
|
||||
echo "❌ Ошибка: Файл $1 не найден в директории docker"
|
||||
usage 1
|
||||
fi
|
||||
}
|
||||
|
||||
push_to_registry=false
|
||||
name=""
|
||||
version=""
|
||||
base_image_version=""
|
||||
registry_address=""
|
||||
port=""
|
||||
use_old=false
|
||||
dockerfile="Dockerfile.27.3.1"
|
||||
repositories=""
|
||||
|
||||
if ! command -v getopt >/dev/null 2>&1; then
|
||||
echo "❌ Ошибка: утилита getopt не найдена"
|
||||
usage 1
|
||||
fi
|
||||
|
||||
opts=$(getopt -o n:v:b:oR:r:p:h -l name:,version:,base-image-version:,old,repositories:,push-to-registry:,port:,help -n "$0" -- "$@")
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "❌ Ошибка парсинга аргументов"
|
||||
usage 1
|
||||
fi
|
||||
|
||||
eval set -- "$opts"
|
||||
|
||||
while true; do
|
||||
case "$1" in
|
||||
-n|--name) name="$2"; shift 2 ;;
|
||||
-v|--version) version="$2"; shift 2 ;;
|
||||
-b|--base-image-version) base_image_version="$2"; shift 2 ;;
|
||||
-r|--push-to-registry) push_to_registry=true; registry_address="$2"; shift 2 ;;
|
||||
-p|--port) port="$2"; shift 2 ;;
|
||||
-o|--old) use_old=true; shift ;;
|
||||
-R|--repositories) repositories="$2"; shift 2 ;;
|
||||
-h|--help) usage 0 ;;
|
||||
--) shift; break ;;
|
||||
*) echo "❌ Неверный аргумент $1" >&2; usage 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ -z "$name" ] || [ -z "$version" ] || [ -z "$base_image_version" ]; then
|
||||
echo "❌ Ошибка: Не указаны обязательные аргументы (-n, -v и -b)"
|
||||
usage 1
|
||||
fi
|
||||
|
||||
validate_version "$version"
|
||||
|
||||
if [ "$push_to_registry" = true ]; then
|
||||
if [ -z "$registry_address" ]; then
|
||||
echo "❌ Ошибка: Для отправки в registry необходимо указать адрес с -r"
|
||||
usage 1
|
||||
fi
|
||||
|
||||
validate_address "$registry_address"
|
||||
validate_port "$port"
|
||||
fi
|
||||
|
||||
echo "📂 Переход в директорию docker..."
|
||||
cd docker || {
|
||||
echo "❌ Ошибка: Не удалось перейти в директорию docker"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if [ "$use_old" = true ]; then
|
||||
dockerfile="Dockerfile.20.10.20"
|
||||
fi
|
||||
|
||||
echo "🔍 Проверка наличия Dockerfile..."
|
||||
check_dockerfile "$dockerfile"
|
||||
|
||||
echo "🐳 Сборка образа $name:$version с использованием $dockerfile и базового образа версии $base_image_version..."
|
||||
if [ -n "$repositories" ]; then
|
||||
echo "📦 Используемые репозитории:"
|
||||
echo "$repositories" | tr ';' '\n' | while read -r repo; do
|
||||
echo -e " 🌐 $repo"
|
||||
done
|
||||
docker build . -f "$dockerfile" -t "${name}:${version}" --build-arg BASE_IMAGE_VERSION="$base_image_version" --build-arg REPOSITORIES="$repositories" || {
|
||||
echo "❌ Ошибка при сборке образа"
|
||||
exit 1
|
||||
}
|
||||
else
|
||||
docker build . -f "$dockerfile" -t "${name}:${version}" --build-arg BASE_IMAGE_VERSION="$base_image_version" || {
|
||||
echo "❌ Ошибка при сборке образа"
|
||||
exit 1
|
||||
}
|
||||
fi
|
||||
|
||||
if [ "$push_to_registry" = true ]; then
|
||||
if [ -z "$port" ]; then
|
||||
registry="$registry_address"
|
||||
else
|
||||
registry="$registry_address:$port"
|
||||
fi
|
||||
|
||||
echo "🏷 Создание тегов для registry..."
|
||||
|
||||
docker tag "${name}:${version}" "${registry}/${name}:latest" || {
|
||||
echo "❌ Ошибка при создании тега latest"
|
||||
exit 1
|
||||
}
|
||||
|
||||
major=$(echo "$version" | cut -d. -f1)
|
||||
minor=$(echo "$version" | cut -d. -f1-2)
|
||||
full="$version"
|
||||
|
||||
docker tag "${name}:${version}" "${registry}/${name}:$full" || {
|
||||
echo "❌ Ошибка при создании тега $full"
|
||||
exit 1
|
||||
}
|
||||
docker tag "${name}:${version}" "${registry}/${name}:$minor" || {
|
||||
echo "❌ Ошибка при создании тега $minor"
|
||||
exit 1
|
||||
}
|
||||
docker tag "${name}:${version}" "${registry}/${name}:$major" || {
|
||||
echo "❌ Ошибка при создании тега $major"
|
||||
exit 1
|
||||
}
|
||||
|
||||
echo " ✅ Созданы теги: latest, $full, $minor, $major"
|
||||
|
||||
echo "🚀 Отправка образов в registry..."
|
||||
docker push "${registry}/${name}:latest" || {
|
||||
echo "❌ Ошибка при отправке тега latest"
|
||||
exit 1
|
||||
}
|
||||
docker push "${registry}/${name}:$full" || {
|
||||
echo "❌ Ошибка при отправке тега $full"
|
||||
exit 1
|
||||
}
|
||||
docker push "${registry}/${name}:$minor" || {
|
||||
echo "❌ Ошибка при отправке тега $minor"
|
||||
exit 1
|
||||
}
|
||||
docker push "${registry}/${name}:$major" || {
|
||||
echo "❌ Ошибка при отправке тега $major"
|
||||
exit 1
|
||||
}
|
||||
fi
|
||||
|
||||
echo "🎉 Готово! Образ ${name}:${version} успешно:"
|
||||
echo " ✅ Собран"
|
||||
[ "$push_to_registry" = true ] && echo " ✅ Размечен"
|
||||
[ "$push_to_registry" = true ] && echo " ✅ Отправлен в registry"
|
Loading…
Add table
Add a link
Reference in a new issue