compliance/test-deployment.sh
gongwenxin 9bd3cb63f3 docker
2025-08-13 09:52:59 +08:00

267 lines
6.6 KiB
Bash
Executable File
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
# DMS合规性测试工具 - 部署包测试脚本
# 用于验证离线部署包的完整性和功能
set -e
PACKAGE_FILE=""
TEST_DIR="test_deployment_$(date +%Y%m%d_%H%M%S)"
echo "=== DMS合规性测试工具部署包测试脚本 ==="
# 查找最新的部署包
find_latest_package() {
PACKAGE_FILE=$(ls -t dms-compliance-complete-offline-*.tar.gz 2>/dev/null | head -n1)
if [ -z "$PACKAGE_FILE" ]; then
echo "[错误] 找不到部署包文件"
echo "请先运行 ./create-offline-package.sh 创建部署包"
exit 1
fi
echo "[信息] 找到部署包: $PACKAGE_FILE"
echo "[信息] 文件大小: $(du -h "$PACKAGE_FILE" | cut -f1)"
}
# 创建测试环境
setup_test_env() {
echo "[信息] 创建测试环境: $TEST_DIR"
mkdir -p "$TEST_DIR"
cd "$TEST_DIR"
# 解压部署包
echo "[信息] 解压部署包..."
tar -xzf "../$PACKAGE_FILE"
# 进入解压后的目录
EXTRACTED_DIR=$(ls -d dms-compliance-* | head -n1)
cd "$EXTRACTED_DIR"
echo "[信息] 当前目录: $(pwd)"
}
# 验证文件完整性
verify_files() {
echo "[信息] 验证文件完整性..."
local required_files=(
"README.md"
"VERSION"
"install.sh"
"deploy.sh"
"stop.sh"
"uninstall.sh"
"install-docker.sh"
"docker-compose.yml"
"dms-compliance-tool.tar"
"nginx-alpine.tar"
)
local missing_files=()
for file in "${required_files[@]}"; do
if [ ! -f "$file" ]; then
missing_files+=("$file")
else
echo "[✓] $file"
fi
done
if [ ${#missing_files[@]} -gt 0 ]; then
echo "[错误] 缺少以下文件:"
printf '%s\n' "${missing_files[@]}"
return 1
fi
echo "[成功] 所有必需文件都存在"
}
# 验证脚本权限
verify_permissions() {
echo "[信息] 验证脚本权限..."
local scripts=(
"install.sh"
"deploy.sh"
"stop.sh"
"uninstall.sh"
"install-docker.sh"
)
for script in "${scripts[@]}"; do
if [ -x "$script" ]; then
echo "[✓] $script 可执行"
else
echo "[警告] $script 不可执行,正在修复..."
chmod +x "$script"
fi
done
}
# 验证Docker镜像
verify_docker_images() {
echo "[信息] 验证Docker镜像文件..."
# 检查镜像文件大小
if [ -f "dms-compliance-tool.tar" ]; then
local size=$(du -h "dms-compliance-tool.tar" | cut -f1)
echo "[✓] DMS应用镜像: $size"
# 验证镜像文件不为空
if [ ! -s "dms-compliance-tool.tar" ]; then
echo "[错误] DMS应用镜像文件为空"
return 1
fi
fi
if [ -f "nginx-alpine.tar" ]; then
local size=$(du -h "nginx-alpine.tar" | cut -f1)
echo "[✓] Nginx镜像: $size"
if [ ! -s "nginx-alpine.tar" ]; then
echo "[错误] Nginx镜像文件为空"
return 1
fi
fi
}
# 验证配置文件
verify_config() {
echo "[信息] 验证配置文件..."
# 检查docker-compose.yml
if command -v docker-compose >/dev/null 2>&1; then
if docker-compose config >/dev/null 2>&1; then
echo "[✓] docker-compose.yml 语法正确"
else
echo "[警告] docker-compose.yml 语法可能有问题"
docker-compose config
fi
else
echo "[信息] docker-compose 未安装,跳过配置验证"
fi
# 检查数据目录结构
local data_dirs=(
"data"
"data/test_reports"
"data/uploads"
"data/logs"
)
for dir in "${data_dirs[@]}"; do
if [ -d "$dir" ]; then
echo "[✓] 目录存在: $dir"
else
echo "[警告] 目录不存在: $dir"
fi
done
}
# 模拟部署测试(不实际启动服务)
simulate_deployment() {
echo "[信息] 模拟部署测试..."
# 检查Docker是否可用
if command -v docker >/dev/null 2>&1; then
if docker info >/dev/null 2>&1; then
echo "[✓] Docker可用"
# 测试加载镜像(但不实际加载)
echo "[信息] 测试镜像加载命令..."
echo " docker load -i dms-compliance-tool.tar"
echo " docker load -i nginx-alpine.tar"
# 测试docker-compose命令
if command -v docker-compose >/dev/null 2>&1; then
echo "[✓] Docker Compose可用"
echo "[信息] 测试服务启动命令..."
echo " docker-compose up -d"
else
echo "[警告] Docker Compose不可用"
fi
else
echo "[警告] Docker未运行"
fi
else
echo "[信息] Docker未安装这在目标环境中是正常的"
fi
}
# 生成测试报告
generate_report() {
echo ""
echo "=== 测试报告 ==="
echo "测试时间: $(date)"
echo "部署包: $PACKAGE_FILE"
echo "测试目录: $TEST_DIR"
echo ""
# 文件清单
echo "文件清单:"
find . -type f -name "*.sh" -o -name "*.yml" -o -name "*.tar" -o -name "*.md" | sort
echo ""
# 目录结构
echo "目录结构:"
tree -L 3 2>/dev/null || find . -type d | head -20
echo ""
# 磁盘使用
echo "磁盘使用:"
du -sh . 2>/dev/null || echo "无法获取磁盘使用信息"
echo ""
echo "=== 测试完成 ==="
echo ""
echo "下一步操作:"
echo "1. 将部署包传输到目标服务器"
echo "2. 在目标服务器上解压并运行 ./install.sh"
echo "3. 访问 http://localhost:5050 和 http://localhost:5051 验证服务"
echo ""
echo "清理测试环境:"
echo "cd .. && rm -rf $TEST_DIR"
}
# 清理函数
cleanup() {
if [ -n "$TEST_DIR" ] && [ -d "../$TEST_DIR" ]; then
echo ""
echo "[信息] 清理测试环境..."
cd ..
rm -rf "$TEST_DIR"
echo "[信息] 测试环境已清理"
fi
}
# 错误处理
error_handler() {
echo ""
echo "[错误] 测试过程中发生错误"
cleanup
exit 1
}
# 主函数
main() {
# 设置错误处理
trap error_handler ERR
trap cleanup EXIT
# 执行测试步骤
find_latest_package
setup_test_env
verify_files
verify_permissions
verify_docker_images
verify_config
simulate_deployment
generate_report
echo "[成功] 部署包测试完成,所有检查都通过了!"
}
# 运行主函数
main "$@"