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
83 lines
2.6 KiB
Bash
83 lines
2.6 KiB
Bash
#!/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
|