QAUP_Management/deploy/docker/verify-versions.sh

120 lines
3.8 KiB
Bash

#!/bin/bash
# QAUP Docker 镜像版本验证脚本
# 验证配置文件中的版本与实际使用的版本是否一致
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
print_message() {
local color=$1
local message=$2
echo -e "${color}${message}${NC}"
}
print_message $BLUE "========================================="
print_message $BLUE "QAUP Docker 镜像版本验证"
print_message $BLUE "========================================="
echo ""
# 加载配置文件
if [ -f "$SCRIPT_DIR/image-versions.env" ]; then
source "$SCRIPT_DIR/image-versions.env"
print_message $GREEN "✓ 已加载镜像版本配置文件"
else
print_message $RED "✗ 镜像版本配置文件不存在"
exit 1
fi
echo ""
print_message $BLUE "配置文件中的版本:"
echo "PostgreSQL/PostGIS: $POSTGRES_IMAGE"
echo "Redis: $REDIS_IMAGE"
echo "OpenJDK: $OPENJDK_IMAGE"
echo "Maven: $MAVEN_IMAGE"
echo "Nginx: $NGINX_IMAGE"
echo "Node.js: $NODE_IMAGE"
echo ""
# 检查 docker-compose.yml 中的版本
print_message $BLUE "docker-compose.yml 中的版本:"
if [ -f "$PROJECT_ROOT/docker-compose.yml" ]; then
compose_postgres=$(grep -A 1 "qaup-postgres:" "$PROJECT_ROOT/docker-compose.yml" | grep "image:" | awk '{print $2}')
compose_redis=$(grep -A 1 "qaup-redis:" "$PROJECT_ROOT/docker-compose.yml" | grep "image:" | awk '{print $2}')
echo "PostgreSQL/PostGIS: $compose_postgres"
echo "Redis: $compose_redis"
# 验证一致性
if [ "$compose_postgres" = "$POSTGRES_IMAGE" ]; then
print_message $GREEN "✓ PostgreSQL 版本一致"
else
print_message $RED "✗ PostgreSQL 版本不一致"
echo " 配置文件: $POSTGRES_IMAGE"
echo " docker-compose.yml: $compose_postgres"
fi
if [ "$compose_redis" = "$REDIS_IMAGE" ]; then
print_message $GREEN "✓ Redis 版本一致"
else
print_message $RED "✗ Redis 版本不一致"
echo " 配置文件: $REDIS_IMAGE"
echo " docker-compose.yml: $compose_redis"
fi
else
print_message $YELLOW "警告: docker-compose.yml 文件不存在"
fi
echo ""
# 检查 Dockerfile 中的版本
print_message $BLUE "Dockerfile 中的版本:"
if [ -f "$PROJECT_ROOT/Dockerfile" ]; then
dockerfile_maven=$(grep "^FROM maven:" "$PROJECT_ROOT/Dockerfile" | awk '{print $2}' | head -1)
dockerfile_openjdk=$(grep "^FROM openjdk:" "$PROJECT_ROOT/Dockerfile" | awk '{print $2}' | head -1)
echo "Maven: $dockerfile_maven"
echo "OpenJDK: $dockerfile_openjdk"
# 验证一致性
if [ "$dockerfile_maven" = "$MAVEN_IMAGE" ]; then
print_message $GREEN "✓ Maven 版本一致"
else
print_message $RED "✗ Maven 版本不一致"
echo " 配置文件: $MAVEN_IMAGE"
echo " Dockerfile: $dockerfile_maven"
fi
if [ "$dockerfile_openjdk" = "$OPENJDK_IMAGE" ]; then
print_message $GREEN "✓ OpenJDK 版本一致"
else
print_message $RED "✗ OpenJDK 版本不一致"
echo " 配置文件: $OPENJDK_IMAGE"
echo " Dockerfile: $dockerfile_openjdk"
fi
else
print_message $YELLOW "警告: Dockerfile 文件不存在"
fi
echo ""
print_message $BLUE "当前使用的版本总结:"
echo "✓ PostgreSQL 17 + PostGIS 3.5 (最新稳定版)"
echo "✓ Redis 8.0 (最新版本)"
echo "✓ OpenJDK 17 (LTS 版本)"
echo "✓ Maven 3.9.11 (最新稳定版)"
echo ""
print_message $YELLOW "升级注意事项:"
echo "1. PostgreSQL 17 包含性能改进和新特性"
echo "2. Redis 8.0 引入了新的数据结构和命令"
echo "3. 升级前请备份数据并在测试环境验证"
echo "4. 检查应用程序与新版本的兼容性"