#!/bin/bash # 测试目录创建和复制逻辑 set -e echo "=== 测试目录创建和复制逻辑 ===" # 模拟变量 SELECTED_SERVICE_ARCH="dual" TARGET_PLATFORM="linux/arm64" MULTI_PLATFORM=false # 更新导出目录名称以包含平台信息 if [[ "$MULTI_PLATFORM" == "true" ]]; then EXPORT_DIR="dms-compliance-${SELECTED_SERVICE_ARCH}-multiplatform-$(date +%Y%m%d-%H%M%S)" else platform_suffix=$(echo "$TARGET_PLATFORM" | sed 's/linux\///g' | sed 's/\//-/g') EXPORT_DIR="dms-compliance-${SELECTED_SERVICE_ARCH}-${platform_suffix}-$(date +%Y%m%d-%H%M%S)" fi ARCHIVE_NAME="$EXPORT_DIR.tar.gz" echo "[信息] 最终输出目录: $EXPORT_DIR" # 创建最终导出目录 rm -rf "$EXPORT_DIR" mkdir -p "$EXPORT_DIR" echo "[步骤 1/4] 复制项目文件..." # 创建临时构建目录 TEMP_BUILD_DIR=$(mktemp -d) trap "rm -rf $TEMP_BUILD_DIR" EXIT # 复制核心目录(排除缓存和临时文件) echo "[信息] 复制核心目录..." mkdir -p "$TEMP_BUILD_DIR"/{ddms_compliance_suite,custom_stages,custom_testcases,templates,static,assets} # 创建测试文件 echo "# Test content" > "$TEMP_BUILD_DIR/requirements.txt" echo "# Test API server" > "$TEMP_BUILD_DIR/api_server.py" echo "# Test history viewer" > "$TEMP_BUILD_DIR/history_viewer.py" echo "# Test ddms suite" > "$TEMP_BUILD_DIR/ddms_compliance_suite/test.py" echo "[步骤 2/4] 创建 Dockerfile..." cd "$TEMP_BUILD_DIR" # 创建测试Dockerfile cat > "Dockerfile" << 'EOF' FROM python:3.11-alpine WORKDIR /app COPY . . EXPOSE 5050 5051 CMD ["echo", "Test dockerfile"] EOF # 创建supervisor配置 cat > "supervisord.conf" << 'EOF' [supervisord] nodaemon=true [program:api_server] command=python api_server.py [program:history_viewer] command=python history_viewer.py EOF cd .. echo "[步骤 3/4] 复制构建文件..." # 确保目标目录存在 mkdir -p "$EXPORT_DIR" cp -r "$TEMP_BUILD_DIR"/* "$EXPORT_DIR/" echo "[步骤 4/4] 创建配置文件..." # 创建Docker Compose文件 cat > "$EXPORT_DIR/docker-compose.yml" << EOF version: '3.8' services: dms-compliance: build: context: . dockerfile: Dockerfile platforms: - $TARGET_PLATFORM image: compliance-dms-multiplatform:latest container_name: dms-compliance-tool ports: - "5050:5050" # API服务器端口 - "5051:5051" # 历史查看器端口 environment: - PYTHONPATH=/app - TZ=Asia/Shanghai - FLASK_ENV=production - PYTHONUNBUFFERED=1 volumes: - ./uploads:/app/uploads - ./logs:/app/logs - ./test_reports:/app/test_reports - ./config:/app/config:ro restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:5050/"] interval: 30s timeout: 10s retries: 3 start_period: 40s networks: - dms-network networks: dms-network: driver: bridge volumes: uploads: logs: test_reports: config: EOF # 创建启动脚本 cat > "$EXPORT_DIR/start.sh" << 'EOF' #!/bin/bash echo "=== DMS合规性测试工具启动脚本 ===" echo "这是一个测试脚本" EOF chmod +x "$EXPORT_DIR/start.sh" # 创建README cat > "$EXPORT_DIR/README.md" << EOF # DMS合规性测试工具 - 测试部署包 ## 系统信息 - **架构**: 双服务架构 - API服务器(5050) + 历史查看器(5051) - **端口**: 5050,5051 - **目标平台**: ARM64 (aarch64) - Apple M1/M2, ARM 64位 - **构建时间**: $(date '+%Y-%m-%d %H:%M:%S') ## 测试成功 目录创建和文件复制逻辑正常工作。 EOF # 验证文件结构 echo "" echo "=== 验证文件结构 ===" echo "导出目录内容:" ls -la "$EXPORT_DIR" echo "" echo "核心文件检查:" for file in Dockerfile docker-compose.yml start.sh README.md requirements.txt api_server.py history_viewer.py supervisord.conf; do if [[ -f "$EXPORT_DIR/$file" ]]; then echo "✅ $file" else echo "❌ $file (缺失)" fi done # 创建压缩包 echo "" echo "[信息] 创建压缩包..." tar -czf "$ARCHIVE_NAME" "$EXPORT_DIR" # 清理临时目录 rm -rf "$EXPORT_DIR" # 显示结果 echo "" echo "=== 测试完成 ===" echo "[成功] 测试部署包已创建: $ARCHIVE_NAME" echo "[信息] 文件大小: $(du -h "$ARCHIVE_NAME" | cut -f1)" echo "" echo "目录创建和复制逻辑测试成功!"