BUH_bot/build-image.sh
Игорь Надеин b7853637bc feat: Add CI/CD pipeline and deployment automation
GitHub Actions Workflow:
- Automatic build on push to main/develop
- Build on tags (v*.*.*)
- Multi-platform support (linux/amd64)
- Publish to ghcr.io registry
- Docker layer caching
- Metadata extraction for tags

Build Scripts (Linux + Windows):
- build-image.sh/bat: Build and publish to registry
- Registry authentication check
- Image testing before push
- Configurable registry (default: ghcr.io)

Deployment Scripts (Linux + Windows):
- deploy-prod.sh/bat: Production deployment automation
- Pre-deployment checks (.env.prod validation)
- Automatic backup before deploy
- Image pull and stack deployment
- Health check verification
- Rollback support
2025-11-03 14:21:19 +03:00

83 lines
2.6 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Скрипт для сборки и публикации Docker образа
set -e
# Цвета для вывода
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Конфигурация
REGISTRY="${DOCKER_REGISTRY:-ghcr.io}"
USERNAME="${DOCKER_USERNAME:-username}"
IMAGE_NAME="buh_bot"
VERSION="${BOT_VERSION:-latest}"
echo -e "${GREEN}🔨 Сборка Docker образа для BUH Bot${NC}"
echo "Registry: $REGISTRY"
echo "Username: $USERNAME"
echo "Version: $VERSION"
echo ""
# Проверка авторизации
echo -e "${YELLOW}Проверка авторизации в registry...${NC}"
if ! docker info | grep -q "Username"; then
echo -e "${RED}❌ Не авторизован в Docker registry${NC}"
echo "Выполните: docker login $REGISTRY"
exit 1
fi
# Сборка образа
echo -e "${YELLOW}📦 Сборка образа...${NC}"
docker build \
--tag "${REGISTRY}/${USERNAME}/${IMAGE_NAME}:${VERSION}" \
--tag "${REGISTRY}/${USERNAME}/${IMAGE_NAME}:latest" \
--build-arg BUILD_DATE="$(date -u +'%Y-%m-%dT%H:%M:%SZ')" \
--build-arg VCS_REF="$(git rev-parse --short HEAD)" \
.
if [ $? -eq 0 ]; then
echo -e "${GREEN}✅ Образ успешно собран${NC}"
else
echo -e "${RED}❌ Ошибка сборки образа${NC}"
exit 1
fi
# Тестирование образа
echo -e "${YELLOW}🧪 Тестирование образа...${NC}"
docker run --rm "${REGISTRY}/${USERNAME}/${IMAGE_NAME}:${VERSION}" python -c "
import sys
from modules.moysklad_client import MoySkladClient
from modules.validator import OrderValidator
from modules.user_manager import UserManager
print('✅ Все модули импортированы успешно')
"
if [ $? -eq 0 ]; then
echo -e "${GREEN}✅ Тестирование пройдено${NC}"
else
echo -e "${RED}❌ Ошибка тестирования${NC}"
exit 1
fi
# Публикация образа
echo -e "${YELLOW}📤 Публикация образа в registry...${NC}"
docker push "${REGISTRY}/${USERNAME}/${IMAGE_NAME}:${VERSION}"
docker push "${REGISTRY}/${USERNAME}/${IMAGE_NAME}:latest"
if [ $? -eq 0 ]; then
echo -e "${GREEN}✅ Образ успешно опубликован${NC}"
echo ""
echo "📦 Образы доступны:"
echo " ${REGISTRY}/${USERNAME}/${IMAGE_NAME}:${VERSION}"
echo " ${REGISTRY}/${USERNAME}/${IMAGE_NAME}:latest"
echo ""
echo "🚀 Для деплоя используйте:"
echo " ./deploy-prod.sh"
else
echo -e "${RED}❌ Ошибка публикации образа${NC}"
exit 1
fi