#!/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 "" # 执行同步 "${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 "部署完成!"