From d8fa474522718d8864919c927aecbf13779af24d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B5=D1=80=D0=B3=D0=B5=D0=B9=20=D0=90=D0=BD=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=BF=D0=BE=D0=B2?= Date: Sat, 25 Oct 2025 15:42:16 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D0=B0=20bui?= =?UTF-8?q?ld-image=20=D0=B8=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=B1=D0=B0=D0=B7=D0=BE=D0=B2=D1=8B=D0=B5?= =?UTF-8?q?=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B7=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Добавлена команда 'make docker build-image IMAGE=имя' для сборки отдельных образов - Исправлены базовые образы в docker-get-base-tag: - alt-linux: alt:p9 (было altlinux/p9) - astra-linux: registry.astralinux.ru/library/astra/ubi17:1.7.6.uu2 - Остальные образы соответствуют FROM в Dockerfile - Улучшена логика извлечения тегов из базовых образов - Добавлена валидация существования директории образа - Команда build-image добавлена в список пустых целей Автор: Сергей Антропов Сайт: https://devops.org.ru --- Makefile | 59 ++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 49 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index b8721da..c17375a 100644 --- a/Makefile +++ b/Makefile @@ -465,6 +465,31 @@ docker: clean-builder) \ echo "🧹 Очистка multi-arch builder..."; \ $(MAKE) docker-reset-builder;; \ + build-image) \ + if [ -z "$(IMAGE)" ]; then \ + echo "❌ Ошибка: Укажите IMAGE=имя_образа"; \ + echo "💡 Пример: make docker build-image IMAGE=centos"; \ + echo "💡 Доступные образы: $(DOCKER_IMAGES)"; \ + exit 1; \ + fi; \ + if [ ! -d "dockerfiles/$(IMAGE)" ]; then \ + echo "❌ Ошибка: Директория dockerfiles/$(IMAGE) не найдена!"; \ + echo "💡 Доступные образы:"; \ + for img in $(DOCKER_IMAGES); do \ + if [ -d "dockerfiles/$$img" ]; then \ + echo " - $$img"; \ + fi; \ + done; \ + exit 1; \ + fi; \ + echo "🔨 Сборка отдельного образа: $(IMAGE)"; \ + echo "📋 Платформы: $(DOCKER_PLATFORMS)"; \ + echo "📋 Builder: $(DOCKER_BUILDX_BUILDER)"; \ + echo "📋 Registry: $(DOCKER_REGISTRY)"; \ + echo ""; \ + $(MAKE) docker setup-builder; \ + $(MAKE) docker-build-image IMAGE=$(IMAGE); \ + echo "✅ Образ $(IMAGE) собран";; \ setup-builder) \ echo "🔧 Настройка multi-arch builder в контейнере..."; \ if $(MAKE) docker-check-builder >/dev/null 2>&1; then \ @@ -701,26 +726,40 @@ docker-get-base-tag: fi; \ case "$(IMAGE)" in \ alt-linux) \ - BASE_IMAGE="altlinux/p9"; \ - TAG=$$(docker inspect --format='{{index .RepoDigests 0}}' $$BASE_IMAGE 2>/dev/null | cut -d'@' -f1 | cut -d':' -f2 || echo "latest");; \ + BASE_IMAGE="alt:p9"; \ + echo "📦 Загрузка базового образа $$BASE_IMAGE..." >&2; \ + docker pull $$BASE_IMAGE >/dev/null 2>&1 || echo "⚠️ Не удалось загрузить $$BASE_IMAGE" >&2; \ + TAG=$$(docker inspect --format='{{.RepoTags}}' $$BASE_IMAGE 2>/dev/null | tr -d '[]' | cut -d',' -f1 | cut -d':' -f2 | tr -d ' ' || echo "latest");; \ astra-linux) \ - BASE_IMAGE="astralinux/astra-1.7"; \ - TAG=$$(docker inspect --format='{{index .RepoDigests 0}}' $$BASE_IMAGE 2>/dev/null | cut -d'@' -f1 | cut -d':' -f2 || echo "latest");; \ + BASE_IMAGE="registry.astralinux.ru/library/astra/ubi17:1.7.6.uu2"; \ + echo "📦 Загрузка базового образа $$BASE_IMAGE..." >&2; \ + docker pull $$BASE_IMAGE >/dev/null 2>&1 || echo "⚠️ Не удалось загрузить $$BASE_IMAGE" >&2; \ + TAG=$$(docker inspect --format='{{.RepoTags}}' $$BASE_IMAGE 2>/dev/null | tr -d '[]' | cut -d',' -f1 | cut -d':' -f2 | tr -d ' ' || echo "latest");; \ redos) \ BASE_IMAGE="redos/redos:9"; \ - TAG=$$(docker inspect --format='{{index .RepoDigests 0}}' $$BASE_IMAGE 2>/dev/null | cut -d'@' -f1 | cut -d':' -f2 || echo "latest");; \ + echo "📦 Загрузка базового образа $$BASE_IMAGE..." >&2; \ + docker pull $$BASE_IMAGE >/dev/null 2>&1 || echo "⚠️ Не удалось загрузить $$BASE_IMAGE" >&2; \ + TAG=$$(docker inspect --format='{{.RepoTags}}' $$BASE_IMAGE 2>/dev/null | tr -d '[]' | cut -d',' -f1 | cut -d':' -f2 | tr -d ' ' || echo "latest");; \ rhel) \ BASE_IMAGE="registry.access.redhat.com/ubi8/ubi"; \ - TAG=$$(docker inspect --format='{{index .RepoDigests 0}}' $$BASE_IMAGE 2>/dev/null | cut -d'@' -f1 | cut -d':' -f2 || echo "latest");; \ + echo "📦 Загрузка базового образа $$BASE_IMAGE..." >&2; \ + docker pull $$BASE_IMAGE >/dev/null 2>&1 || echo "⚠️ Не удалось загрузить $$BASE_IMAGE" >&2; \ + TAG=$$(docker inspect --format='{{.RepoTags}}' $$BASE_IMAGE 2>/dev/null | tr -d '[]' | cut -d',' -f1 | cut -d':' -f2 | tr -d ' ' || echo "latest");; \ centos) \ BASE_IMAGE="quay.io/centos/centos:stream9"; \ - TAG=$$(docker inspect --format='{{index .RepoDigests 0}}' $$BASE_IMAGE 2>/dev/null | cut -d'@' -f1 | cut -d':' -f2 || echo "latest");; \ + echo "📦 Загрузка базового образа $$BASE_IMAGE..." >&2; \ + docker pull $$BASE_IMAGE >/dev/null 2>&1 || echo "⚠️ Не удалось загрузить $$BASE_IMAGE" >&2; \ + TAG=$$(docker inspect --format='{{.RepoTags}}' $$BASE_IMAGE 2>/dev/null | tr -d '[]' | cut -d',' -f1 | cut -d':' -f2 | tr -d ' ' || echo "latest");; \ alma) \ BASE_IMAGE="almalinux:8"; \ - TAG=$$(docker inspect --format='{{index .RepoDigests 0}}' $$BASE_IMAGE 2>/dev/null | cut -d'@' -f1 | cut -d':' -f2 || echo "latest");; \ + echo "📦 Загрузка базового образа $$BASE_IMAGE..." >&2; \ + docker pull $$BASE_IMAGE >/dev/null 2>&1 || echo "⚠️ Не удалось загрузить $$BASE_IMAGE" >&2; \ + TAG=$$(docker inspect --format='{{.RepoTags}}' $$BASE_IMAGE 2>/dev/null | tr -d '[]' | cut -d',' -f1 | cut -d':' -f2 | tr -d ' ' || echo "latest");; \ rocky) \ BASE_IMAGE="rockylinux:8"; \ - TAG=$$(docker inspect --format='{{index .RepoDigests 0}}' $$BASE_IMAGE 2>/dev/null | cut -d'@' -f1 | cut -d':' -f2 || echo "latest");; \ + echo "📦 Загрузка базового образа $$BASE_IMAGE..." >&2; \ + docker pull $$BASE_IMAGE >/dev/null 2>&1 || echo "⚠️ Не удалось загрузить $$BASE_IMAGE" >&2; \ + TAG=$$(docker inspect --format='{{.RepoTags}}' $$BASE_IMAGE 2>/dev/null | tr -d '[]' | cut -d',' -f1 | cut -d':' -f2 | tr -d ' ' || echo "latest");; \ ansible-controller) \ TAG="latest";; \ *) \ @@ -883,5 +922,5 @@ help: @echo "==========================================" # Пустые цели для совместимости -view create edit show delete lint deploy new advanced list info test build push pull clean prepare update run stop purge clean-builder setup-builder diagnose reset-builder: +view create edit show delete lint deploy new advanced list info test build push pull clean prepare update run stop purge clean-builder setup-builder diagnose reset-builder build-image: @true