#!/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 "$@"