254 lines
7.1 KiB
Bash
Executable File
254 lines
7.1 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# 测试多平台脚本的基本功能(不构建Docker)
|
||
|
||
set -e
|
||
|
||
# 配置变量
|
||
EXPORT_DIR="dms-compliance-multiplatform-test-$(date +%Y%m%d-%H%M%S)"
|
||
IMAGE_NAME="compliance-dms-multiplatform"
|
||
ARCHIVE_NAME="$EXPORT_DIR.tar.gz"
|
||
|
||
# 支持的平台列表 - 使用函数替代关联数组以兼容旧版bash
|
||
get_platform() {
|
||
case "$1" in
|
||
1) echo "linux/amd64" ;;
|
||
2) echo "linux/arm64" ;;
|
||
3) echo "linux/arm/v7" ;;
|
||
4) echo "linux/arm/v6" ;;
|
||
5) echo "linux/386" ;;
|
||
6) echo "linux/ppc64le" ;;
|
||
7) echo "linux/s390x" ;;
|
||
8) echo "linux/riscv64" ;;
|
||
*) echo "" ;;
|
||
esac
|
||
}
|
||
|
||
get_platform_name() {
|
||
case "$1" in
|
||
"linux/amd64") echo "AMD64 (x86_64) - Intel/AMD 64位" ;;
|
||
"linux/arm64") echo "ARM64 (aarch64) - Apple M1/M2, ARM 64位" ;;
|
||
"linux/arm/v7") echo "ARMv7 - 树莓派 3/4, ARM 32位" ;;
|
||
"linux/arm/v6") echo "ARMv6 - 树莓派 1/Zero, ARM 32位" ;;
|
||
"linux/386") echo "i386 - Intel/AMD 32位" ;;
|
||
"linux/ppc64le") echo "PowerPC 64位小端" ;;
|
||
"linux/s390x") echo "IBM System z" ;;
|
||
"linux/riscv64") echo "RISC-V 64位" ;;
|
||
*) echo "未知平台" ;;
|
||
esac
|
||
}
|
||
|
||
# 服务架构选择
|
||
get_service_arch() {
|
||
case "$1" in
|
||
1) echo "dual" ;;
|
||
2) echo "fastapi" ;;
|
||
3) echo "flask" ;;
|
||
*) echo "" ;;
|
||
esac
|
||
}
|
||
|
||
get_service_arch_name() {
|
||
case "$1" in
|
||
"dual") echo "双服务架构 - API服务器(5050) + 历史查看器(5051)" ;;
|
||
"fastapi") echo "FastAPI单服务 - 现代异步框架,自动生成API文档(5051)" ;;
|
||
"flask") echo "Flask单服务 - 轻量级传统框架(5050)" ;;
|
||
*) echo "未知架构" ;;
|
||
esac
|
||
}
|
||
|
||
get_service_ports() {
|
||
case "$1" in
|
||
"dual") echo "5050,5051" ;;
|
||
"fastapi") echo "5051" ;;
|
||
"flask") echo "5050" ;;
|
||
*) echo "5050" ;;
|
||
esac
|
||
}
|
||
|
||
echo "=== DMS合规性测试工具 跨平台脚本测试 ==="
|
||
echo ""
|
||
|
||
# 检测当前平台
|
||
CURRENT_ARCH=$(uname -m)
|
||
case "$CURRENT_ARCH" in
|
||
x86_64|amd64) CURRENT_PLATFORM="linux/amd64" ;;
|
||
aarch64|arm64) CURRENT_PLATFORM="linux/arm64" ;;
|
||
armv7l) CURRENT_PLATFORM="linux/arm/v7" ;;
|
||
armv6l) CURRENT_PLATFORM="linux/arm/v6" ;;
|
||
i386|i686) CURRENT_PLATFORM="linux/386" ;;
|
||
*) CURRENT_PLATFORM="linux/amd64" ;;
|
||
esac
|
||
|
||
echo "[信息] 当前平台: $(get_platform_name "$CURRENT_PLATFORM")"
|
||
echo ""
|
||
|
||
# 选择服务架构
|
||
echo "请选择服务架构:"
|
||
echo " 1) $(get_service_arch_name "dual")"
|
||
echo " 2) $(get_service_arch_name "fastapi")"
|
||
echo " 3) $(get_service_arch_name "flask")"
|
||
echo ""
|
||
read -p "请输入选择 (1-3) [默认: 1]: " service_choice
|
||
service_choice=${service_choice:-1}
|
||
|
||
SELECTED_SERVICE_ARCH=$(get_service_arch "$service_choice")
|
||
if [[ -z "$SELECTED_SERVICE_ARCH" ]]; then
|
||
echo "[错误] 无效的服务架构选择"
|
||
exit 1
|
||
fi
|
||
|
||
SELECTED_PORTS=$(get_service_ports "$SELECTED_SERVICE_ARCH")
|
||
|
||
echo "[信息] 选择的架构: $(get_service_arch_name "$SELECTED_SERVICE_ARCH")"
|
||
echo "[信息] 服务端口: $SELECTED_PORTS"
|
||
echo ""
|
||
|
||
# 选择目标平台
|
||
echo "请选择目标平台架构:"
|
||
for key in 1 2 3 4 5 6 7 8; do
|
||
platform=$(get_platform "$key")
|
||
name=$(get_platform_name "$platform")
|
||
if [[ "$platform" == "$CURRENT_PLATFORM" ]]; then
|
||
echo " $key) $name [当前平台]"
|
||
else
|
||
echo " $key) $name"
|
||
fi
|
||
done
|
||
echo " 9) 多平台构建 (同时构建多个平台)"
|
||
echo " 0) 自动检测当前平台"
|
||
echo ""
|
||
read -p "请输入选择 (0-9) [默认: 0]: " platform_choice
|
||
platform_choice=${platform_choice:-0}
|
||
|
||
if [[ "$platform_choice" == "0" ]]; then
|
||
TARGET_PLATFORM="$CURRENT_PLATFORM"
|
||
TARGET_PLATFORM_NAME="$(get_platform_name "$CURRENT_PLATFORM") [自动检测]"
|
||
MULTI_PLATFORM=false
|
||
elif [[ "$platform_choice" == "9" ]]; then
|
||
TARGET_PLATFORM="linux/amd64,linux/arm64"
|
||
TARGET_PLATFORM_NAME="常用平台 (AMD64 + ARM64)"
|
||
MULTI_PLATFORM=true
|
||
else
|
||
TARGET_PLATFORM=$(get_platform "$platform_choice")
|
||
if [[ -z "$TARGET_PLATFORM" ]]; then
|
||
echo "[错误] 无效的平台选择"
|
||
exit 1
|
||
fi
|
||
TARGET_PLATFORM_NAME=$(get_platform_name "$TARGET_PLATFORM")
|
||
MULTI_PLATFORM=false
|
||
fi
|
||
|
||
echo "[信息] 目标平台: $TARGET_PLATFORM_NAME"
|
||
echo "[信息] 多平台构建: $MULTI_PLATFORM"
|
||
echo ""
|
||
|
||
# 确认构建
|
||
echo "构建配置确认:"
|
||
echo " 架构: $(get_service_arch_name "$SELECTED_SERVICE_ARCH")"
|
||
echo " 端口: $SELECTED_PORTS"
|
||
echo " 平台: $TARGET_PLATFORM_NAME"
|
||
echo ""
|
||
read -p "确认开始测试? (y/N): " confirm
|
||
if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
|
||
echo "[信息] 测试已取消"
|
||
exit 0
|
||
fi
|
||
|
||
# 更新导出目录名称以包含平台信息
|
||
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 ""
|
||
echo "[步骤 1/3] 创建测试文件..."
|
||
|
||
# 创建临时构建目录
|
||
TEMP_BUILD_DIR=$(mktemp -d)
|
||
trap "rm -rf $TEMP_BUILD_DIR" EXIT
|
||
|
||
# 创建测试文件
|
||
mkdir -p "$TEMP_BUILD_DIR"/{ddms_compliance_suite,custom_stages,templates,static}
|
||
echo "# Test requirements" > "$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 "[步骤 2/3] 创建配置文件..."
|
||
|
||
# 创建测试Dockerfile
|
||
if [[ "$SELECTED_SERVICE_ARCH" == "dual" ]]; then
|
||
cat > "$TEMP_BUILD_DIR/Dockerfile" << 'EOF'
|
||
FROM python:3.11-alpine
|
||
WORKDIR /app
|
||
COPY . .
|
||
EXPOSE 5050 5051
|
||
CMD ["echo", "Dual service architecture"]
|
||
EOF
|
||
|
||
cat > "$TEMP_BUILD_DIR/supervisord.conf" << 'EOF'
|
||
[supervisord]
|
||
nodaemon=true
|
||
|
||
[program:api_server]
|
||
command=python api_server.py
|
||
|
||
[program:history_viewer]
|
||
command=python history_viewer.py
|
||
EOF
|
||
|
||
else
|
||
cat > "$TEMP_BUILD_DIR/Dockerfile" << 'EOF'
|
||
FROM python:3.11-alpine
|
||
WORKDIR /app
|
||
COPY . .
|
||
EXPOSE 5050
|
||
CMD ["echo", "Single service architecture"]
|
||
EOF
|
||
fi
|
||
|
||
echo "[步骤 3/3] 复制文件到最终目录..."
|
||
|
||
# 复制构建文件到最终目录
|
||
cp -r "$TEMP_BUILD_DIR"/* "$EXPORT_DIR/"
|
||
|
||
# 创建README
|
||
cat > "$EXPORT_DIR/README.md" << EOF
|
||
# DMS合规性测试工具 - 测试部署包
|
||
|
||
## 配置信息
|
||
|
||
- **架构**: $(get_service_arch_name "$SELECTED_SERVICE_ARCH")
|
||
- **端口**: $SELECTED_PORTS
|
||
- **目标平台**: $TARGET_PLATFORM_NAME
|
||
- **构建时间**: $(date '+%Y-%m-%d %H:%M:%S')
|
||
|
||
## 测试成功
|
||
|
||
这是一个测试部署包,验证了脚本的基本功能。
|
||
EOF
|
||
|
||
# 创建压缩包
|
||
echo "[信息] 创建压缩包..."
|
||
tar -czf "$ARCHIVE_NAME" "$EXPORT_DIR"
|
||
|
||
# 显示结果
|
||
echo ""
|
||
echo "=== 测试完成 ==="
|
||
echo "[成功] 测试部署包已创建: $ARCHIVE_NAME"
|
||
echo "[信息] 架构: $(get_service_arch_name "$SELECTED_SERVICE_ARCH")"
|
||
echo "[信息] 端口: $SELECTED_PORTS"
|
||
echo "[信息] 平台: $TARGET_PLATFORM_NAME"
|
||
echo "[信息] 文件大小: $(du -h "$ARCHIVE_NAME" | cut -f1)"
|
||
echo ""
|
||
echo "测试成功!脚本功能正常。"
|