| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #!/bin/bash
- # Cloudflare Pages 部署模块
- # 提供 Cloudflare Pages 部署功能
- # 部署到 Cloudflare Pages 的函数
- deploy_to_cloudflare() {
- local cloudflare_project_name="$1"
- local build_branch="$2"
- local dist_dir="${3:-dist}"
- # 验证凭证是否存在(不记录敏感值)
- if [ -z "${CLOUDFLARE_API_TOKEN}" ]; then
- log_message "❌ 错误: CLOUDFLARE_API_TOKEN 未设置"
- return 1
- fi
- log_message "✅ Cloudflare 凭证验证通过"
- log_message "========================================="
- log_message "开始部署到 Cloudflare Pages"
- log_message "========================================="
- log_message "项目名称: ${cloudflare_project_name}"
- log_message "构建目录: ${dist_dir}"
- log_message "分支: ${build_branch}"
- # 检查构建目录是否存在
- if [ ! -d "${dist_dir}" ]; then
- log_message "❌ 错误: 构建目录 ${dist_dir} 不存在"
- log_message "当前目录内容:"
- ls -la
- return 1
- fi
- log_message "✅ 构建目录检查通过"
- log_message "构建产物大小: $(du -sh ${dist_dir} | cut -f1)"
- log_message "文件数量: $(find ${dist_dir} -type f | wc -l)"
- # 部署到 Cloudflare Pages
- log_message "🚀 开始部署到 Cloudflare Pages..."
- DEPLOY_START=$(date +%s)
- # 使用 wrangler pages deploy 命令 (推荐方式)
- # --project-name: Pages 项目名称
- # --branch: 部署分支,用于预览环境
- # --commit-dirty: 允许未提交的更改
- # 执行部署命令并捕获输出和退出状态
- set +e # 临时禁用错误退出
- npx wrangler@3.99.0 pages deploy ${dist_dir} \
- --project-name="${cloudflare_project_name}" \
- --branch="${build_branch}" \
- --commit-dirty=true \
- 2>&1 | tee -a "$BUILD_LOG_FILE"
- DEPLOY_EXIT_CODE=${PIPESTATUS[0]}
- set -e # 重新启用错误退出
- DEPLOY_END=$(date +%s)
- DEPLOY_DURATION=$((DEPLOY_END - DEPLOY_START))
- # 检查部署是否成功
- if [ ${DEPLOY_EXIT_CODE} -eq 0 ]; then
- log_message "========================================="
- log_message "✅ Cloudflare Pages 部署成功!"
- log_message "========================================="
- log_message "部署耗时: ${DEPLOY_DURATION}秒"
- # 根据分支判断访问地址
- if [ "${build_branch}" = "main" ] || [ "${build_branch}" = "master" ]; then
- log_message "📡 生产环境地址: https://${cloudflare_project_name}.pages.dev"
- else
- log_message "📡 预览环境地址: https://${build_branch}.${cloudflare_project_name}.pages.dev"
- fi
- return 0
- else
- log_message "========================================="
- log_message "❌ Cloudflare Pages 部署失败 (退出码: ${DEPLOY_EXIT_CODE})"
- log_message "========================================="
- log_message "部署耗时: ${DEPLOY_DURATION}秒"
- log_message ""
- log_message "请检查以下事项:"
- log_message "1. Cloudflare API Token 是否有效且具有 Pages 编辑权限"
- log_message "2. Cloudflare Account ID 是否正确"
- log_message "3. Pages 项目 '${cloudflare_project_name}' 是否已在 Dashboard 中创建"
- log_message "4. 访问 https://dash.cloudflare.com/profile/api-tokens 检查 Token 权限"
- log_message ""
- log_message "如果项目不存在,请先在 Cloudflare Dashboard 创建:"
- log_message " Workers & Pages → Create → Pages → 项目名: ${cloudflare_project_name}"
- return 1
- fi
- }
|