cloudflare_sync.sh 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #!/bin/bash
  2. # Cloudflare Pages 部署模块
  3. # 提供 Cloudflare Pages 部署功能
  4. # 部署到 Cloudflare Pages 的函数
  5. deploy_to_cloudflare() {
  6. local cloudflare_project_name="$1"
  7. local build_branch="$2"
  8. local dist_dir="${3:-dist}"
  9. # 验证凭证是否存在(不记录敏感值)
  10. if [ -z "${CLOUDFLARE_API_TOKEN}" ]; then
  11. log_message "❌ 错误: CLOUDFLARE_API_TOKEN 未设置"
  12. return 1
  13. fi
  14. log_message "✅ Cloudflare 凭证验证通过"
  15. log_message "========================================="
  16. log_message "开始部署到 Cloudflare Pages"
  17. log_message "========================================="
  18. log_message "项目名称: ${cloudflare_project_name}"
  19. log_message "构建目录: ${dist_dir}"
  20. log_message "分支: ${build_branch}"
  21. # 检查构建目录是否存在
  22. if [ ! -d "${dist_dir}" ]; then
  23. log_message "❌ 错误: 构建目录 ${dist_dir} 不存在"
  24. log_message "当前目录内容:"
  25. ls -la
  26. return 1
  27. fi
  28. log_message "✅ 构建目录检查通过"
  29. log_message "构建产物大小: $(du -sh ${dist_dir} | cut -f1)"
  30. log_message "文件数量: $(find ${dist_dir} -type f | wc -l)"
  31. # 部署到 Cloudflare Pages
  32. log_message "🚀 开始部署到 Cloudflare Pages..."
  33. DEPLOY_START=$(date +%s)
  34. # 使用 wrangler pages deploy 命令 (推荐方式)
  35. # --project-name: Pages 项目名称
  36. # --branch: 部署分支,用于预览环境
  37. # --commit-dirty: 允许未提交的更改
  38. # 执行部署命令并捕获输出和退出状态
  39. set +e # 临时禁用错误退出
  40. npx wrangler@3.90.0 pages deploy ${dist_dir} \
  41. --project-name="${cloudflare_project_name}" \
  42. --branch="${build_branch}" \
  43. --commit-dirty=true \
  44. 2>&1 | tee -a "$BUILD_LOG_FILE"
  45. DEPLOY_EXIT_CODE=${PIPESTATUS[0]}
  46. set -e # 重新启用错误退出
  47. DEPLOY_END=$(date +%s)
  48. DEPLOY_DURATION=$((DEPLOY_END - DEPLOY_START))
  49. # 检查部署是否成功
  50. if [ ${DEPLOY_EXIT_CODE} -eq 0 ]; then
  51. log_message "========================================="
  52. log_message "✅ Cloudflare Pages 部署成功!"
  53. log_message "========================================="
  54. log_message "部署耗时: ${DEPLOY_DURATION}秒"
  55. # 根据分支判断访问地址
  56. if [ "${build_branch}" = "main" ] || [ "${build_branch}" = "master" ]; then
  57. log_message "📡 生产环境地址: https://${cloudflare_project_name}.pages.dev"
  58. else
  59. log_message "📡 预览环境地址: https://${build_branch}.${cloudflare_project_name}.pages.dev"
  60. fi
  61. return 0
  62. else
  63. log_message "========================================="
  64. log_message "❌ Cloudflare Pages 部署失败 (退出码: ${DEPLOY_EXIT_CODE})"
  65. log_message "========================================="
  66. log_message "部署耗时: ${DEPLOY_DURATION}秒"
  67. log_message ""
  68. log_message "请检查以下事项:"
  69. log_message "1. Cloudflare API Token 是否有效且具有 Pages 编辑权限"
  70. log_message "2. Cloudflare Account ID 是否正确"
  71. log_message "3. Pages 项目 '${cloudflare_project_name}' 是否已在 Dashboard 中创建"
  72. log_message "4. 访问 https://dash.cloudflare.com/profile/api-tokens 检查 Token 权限"
  73. log_message ""
  74. log_message "如果项目不存在,请先在 Cloudflare Dashboard 创建:"
  75. log_message " Workers & Pages → Create → Pages → 项目名: ${cloudflare_project_name}"
  76. return 1
  77. fi
  78. }