267 lines
6.6 KiB
Bash
Executable File
267 lines
6.6 KiB
Bash
Executable File
#!/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 "$@"
|