Files
controller-v2/scripts/deploy.sh
T

107 lines
2.9 KiB
Bash
Raw Normal View History

#!/bin/bash
# ============================================================
# 部署脚本 - 支持 test 环境与 images 目录排除
#
# 用法:
# ./scripts/deploy.sh 上传至正式环境 (v2)
# ./scripts/deploy.sh -test 上传至测试环境 (test)
# ./scripts/deploy.sh -eximg 排除 images 目录,上传至正式环境
# ./scripts/deploy.sh -eximg -test 排除 images 目录,上传至测试环境
# -reload 参数:上传完成后刷新 CloudFront 缓存
# ./scripts/deploy.sh -reload 上传正式环境并刷新缓存
# ./scripts/deploy.sh -eximg -test -reload 排除 images,上传测试环境并刷新缓存
# ============================================================
set -e
# 自动识别项目名称 (x8 / x9),依据脚本所在的项目根目录名
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(basename "$(dirname "$SCRIPT_DIR")")"
PROJECT_NAME="$(echo "$PROJECT_ROOT" | grep -oE '^(x8|x9)')"
if [ -z "$PROJECT_NAME" ]; then
echo "错误: 无法从路径 '$PROJECT_ROOT' 识别项目名称 (x8/x9)"
exit 1
fi
# 解析参数
TARGET_ENV="prod" # 默认正式环境
EXCLUDE_IMAGES=false # 默认不排除 images
RELOAD=false # 默认不刷新 CloudFront 缓存
for arg in "$@"; do
case "$arg" in
-test)
TARGET_ENV="test"
;;
-eximg)
EXCLUDE_IMAGES=true
;;
-reload)
RELOAD=true
;;
*)
echo "未知参数: $arg"
echo "用法: ./scripts/deploy.sh [-test] [-eximg] [-reload]"
exit 1
;;
esac
done
# 确定 S3 目标路径与 CloudFront 刷新路径
if [ "$TARGET_ENV" = "test" ]; then
S3_PATH="s3://luxsin-app-bucket/${PROJECT_NAME}/test/"
CF_PATH="/${PROJECT_NAME}/test/*"
else
S3_PATH="s3://luxsin-app-bucket/${PROJECT_NAME}/v2/"
CF_PATH="/${PROJECT_NAME}/v2/*"
fi
# CloudFront 分配 ID
DISTRIBUTION_ID="EUS4XQ8Y0W2ZV"
# 构建 aws s3 sync 命令参数(使用数组,避免引号转义问题)
CMD_ARGS=("aws" "s3" "sync" "./dist" "$S3_PATH" "--delete")
if [ "$EXCLUDE_IMAGES" = true ]; then
CMD_ARGS+=("--exclude" "*images/*")
fi
# 输出部署信息
echo "=========================================="
echo "项目: ${PROJECT_NAME}"
echo "环境: ${TARGET_ENV}"
echo "目标: ${S3_PATH}"
[ "$EXCLUDE_IMAGES" = true ] && echo "排除: *images/*"
echo "刷新: ${RELOAD}"
echo "命令: ${CMD_ARGS[*]}"
echo "=========================================="
echo ""
2026-06-26 12:03:31 +08:00
read -r -p "确认执行部署? 输入 y 继续: " confirm
if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
echo "已取消部署。"
exit 0
fi
echo ""
# 执行同步
"${CMD_ARGS[@]}"
echo ""
# 刷新 CloudFront 缓存
if [ "$RELOAD" = true ]; then
echo "刷新 CloudFront 缓存..."
echo "路径: ${CF_PATH}"
aws cloudfront create-invalidation \
--distribution-id "$DISTRIBUTION_ID" \
--paths "$CF_PATH"
echo ""
echo "CloudFront 缓存刷新完成!"
fi
echo "部署完成!"