Обновление справки. Скрипт сборки (необходимо доделать, скорректировать под сборку)

This commit is contained in:
Alexander Zhirov 2025-04-27 13:55:48 +03:00
parent 1c6fa0002f
commit ab7a65969e
4 changed files with 140 additions and 7 deletions

View file

@ -10,7 +10,8 @@ usage() {
echo " -r <приватный_ключ> Содержимое файла приватного ключа (опционально)"
echo " -u <публичный_ключ> Содержимое файла публичного ключа (опционально)"
echo " -d <путь_к_репозиторию> Путь к директории репозитория в ~/packages (опционально)"
echo "Пример: $0 -p /package -s 192.168.1.100 -n /nfs/share -r \"<содержимое_ключа.rsa>\" -u \"<содержимое_ключа.rsa.pub>\" -d /repo"
echo " -k <наименование_ключа> Наименование файла ключа (опционально)"
echo "Пример: $0 -p /package -s 192.168.1.100 -n /nfs/share -r \"<содержимое_ключа.rsa>\" -u \"<содержимое_ключа.rsa.pub>\" -d /repo -k \"mykey\""
echo "Флаги -s и -n включают монтирование NFS, должны использоваться вместе."
echo "Флаги -r и -u содержат текст приватного и публичного ключей для abuild."
echo "Флаг -d задаёт директорию для сохранения пакетов."
@ -71,6 +72,11 @@ if [ ! -f "$PACKAGE_DIR/APKBUILD" ]; then
exit 1
fi
if [ -z "$NAME_KEY" ]; then
echo "🚫 Ошибка: Необходимо указать наименование ключа подписи"
exit 1
fi
# Проверка и настройка ключей abuild
if [ -n "$PRIVATE_KEY" ] || [ -n "$PUBLIC_KEY" ]; then
echo "🔑 Настраиваю переданные ключи abuild..."

139
build.sh Executable file → Normal file
View file

@ -1,10 +1,137 @@
#!/bin/sh
CUR_SCRIPT="$0"
CUR_DIR="$(dirname "$CUR_SCRIPT")"
usage() {
echo "✏️ Использование: $0 -n <имя> -v <версия> [-a <адрес>] [-p <порт>] [-r]"
echo "🔧 Опции:"
echo " -n, --name Имя образа (обязательно)"
echo " -v, --version Версия образа в формате X.Y.Z (обязательно)"
echo " -a, --address Адрес registry (требуется с -r)"
echo " -p, --port Порт registry (опционально)"
echo " -r, --push-to-registry Создать теги и отправить образы в registry"
echo ""
echo "📌 Примеры:"
echo " Только сборка: $0 -n myapp -v 2.5.7"
echo " Сборка и отправка: $0 -n myapp -v 2.5.7 -a registry.example.com -p 5000 -r"
exit 1
}
APK_BUILD_SCRIPT="$CUR_DIR/apk-build"
validate_version() {
echo "$1" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+$' || {
echo "❌ Ошибка: Версия должна быть в формате X.Y.Z (например, 2.5.7)"
exit 1
}
}
cp "$APK_BUILD_SCRIPT" "$CUR_DIR/v3.21"
cd "$CUR_DIR/v3.21"
docker build . -t apk-builder:3.21-r1
validate_address() {
if [ -z "$1" ]; then
echo "❌ Ошибка: Адрес не может быть пустым"
exit 1
fi
}
validate_port() {
if [ -n "$1" ]; then
echo "$1" | grep -Eq '^[0-9]+$' || {
echo "❌ Ошибка: Порт должен быть числом"
exit 1
}
fi
}
push_to_registry=false
name=""
version=""
address=""
port=""
while getopts ":n:v:a:p:r" opt; do
case $opt in
n) name="$OPTARG" ;;
v) version="$OPTARG" ;;
a) address="$OPTARG" ;;
p) port="$OPTARG" ;;
r) push_to_registry=true ;;
\?) echo "❌ Неверный аргумент -$OPTARG" >&2; usage ;;
:) echo "❌ Опция -$OPTARG требует аргумент" >&2; usage ;;
esac
done
if [ -z "$name" ] || [ -z "$version" ]; then
echo "❌ Ошибка: Не указаны обязательные аргументы (-n и -v)"
usage
fi
validate_version "$version"
if [ "$push_to_registry" = true ]; then
if [ -z "$address" ]; then
echo "❌ Ошибка: Для отправки в registry необходимо указать адрес (-a)"
usage
fi
validate_address "$address"
validate_port "$port"
fi
echo "🐳 Сборка образа $name:$version..."
docker build . -t "${name}:${version}" || {
echo "❌ Ошибка при сборке образа"
exit 1
}
if [ "$push_to_registry" = true ]; then
if [ -z "$port" ]; then
registry="$address"
else
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"