| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #!/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.90.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
- }
|