修改消息后台的启动和停止文件并整理文档

This commit is contained in:
not-like-juvenile
2026-03-11 16:42:33 +08:00
parent e67016a6f4
commit 9cc6dcc2a6
19 changed files with 327 additions and 375 deletions

View File

@@ -0,0 +1,80 @@
**部署工作流(打包 → 上传/发布 → smoketest**
- **目的**: 描述如何把本地 `uniCloud` 云函数项目自动化打包、上传并发布为可供后端调用的云函数;说明两种上传方式(直接调用上传 API / 使用 `unicloud` CLI与 smoketest 验证流程;给出 CI 集成与常见故障排查建议。
- **目录结构(示例)**:
- `uniCloud-alipay/cloudfunctions/<funcName>/` - 云函数源码目录(含 `index.js``package.json` 等)
- `server/tools/deploy-cloudfunc.js` - 打包并上传/发布的脚本
- `server/dist/` - 输出的 zip 文件目录
1) 打包
- 使用脚本 `server/tools/deploy-cloudfunc.js` 的默认行为:把指定云函数目录压缩为 zip例如 `dist/testUnipush2.zip`)。
- 本地快速命令:
```bash
# 只打包(不上传)
node server/tools/deploy-cloudfunc.js --dir path/to/your/cloudfunctions/func
```
2) 上传 / 发布(两种方式,任选其一)
- A. 使用提供商“上传/发布”HTTP API推荐用于无 CLI 的环境)
- 要求:提供上传 URLCLOUD_UPLOAD_URL 或 `--upload`)、必要的 tokenCLOUD_UPLOAD_TOKEN和可能的额外表单字段例如 appId
- 流程:脚本把 zip 作为 `multipart/form-data` POST 到上传端点;若上传端点返回仅是“已接收”而非“已发布”,还需调用发布/部署 APICLOUD_DEPLOY_API 或 `--deployApi`)。
- 注意:不要把 zip 发到函数的 invoke调用URL例如 `/test`)。如果你把文件 POST 到 invoke URL平台会把请求当作函数执行并返回业务错误例如 `{"errCode":400,"errMsg":"push_clientid required"}`)。脚本内已添加检测,当响应看起来像 invoke 返回会立即报错并提示。
- B. 使用 `unicloud` CLI简单且与 HBuilder 官方流程一致)
- 前提:机器/CI 能安装并执行 `unicloud`,并已登录或有可用凭证。常用命令示例:
```bash
unicloud upload -p <SPACE_ID> -f <FUNCTION_NAME> ./uniCloud-alipay/cloudfunctions/<FUNCTION_NAME>
```
- 优点:不需要逆向抓包,等同于控制台发布,适合 CI。缺点需在 CI 中安装 CLI 并处理登录。
- 建议:在脚本中添加 CLI fallback当未提供 `--upload` 时尝试调用 `unicloud upload`(脚本可接收 `--spaceId` 或环境变量 `CLOUD_UNICLOUD_SPACEID`)。
3) smoketest发布后验证
- 在上传/发布成功后,应通过函数的 invoke URL 做一次简单调用,验证函数行为(例如发送测试推送或返回 expected response。脚本支持传入 `--invokeUrl` / `--funcInvokeUrl` 与 `--testCid` 做自动验证。
- 若 smoketest 失败:检查是否为 invoke URL 被误用为 upload URL、是否发布尚未完成、或权限/鉴权token问题。
4) CI 集成GitHub Actions 示例思路)
- 步骤:
1. Checkout 代码
2. 安装依赖(若使用脚本中的 archiver/form-data/node-fetch
3. 若使用 CLI安装 `unicloud` 并通过 secrets 登录(或在 runner 上提前配置 service account
4. 运行 `node server/tools/deploy-cloudfunc.js --upload ${{ secrets.CLOUD_UPLOAD_URL }} --invokeUrl ${{ secrets.CLOUD_FUNC_URL }} --testCid ${{ secrets.TEST_DEVICE_CID }}` 或运行 CLI fallback
5. 检查返回码并在失败时标记 Job 失败
5) 必要环境变量与参数
- CLOUD_UPLOAD_URL / --upload : 上传 API URL非函数 invoke URL
- CLOUD_UPLOAD_TOKEN : 上传时使用的 Bearer token或其它鉴权
- CLOUD_DEPLOY_API / --deployApi : 若上传后需单独调用发布 API可传入
- CLOUD_FUNC_URL / --invokeUrl : 发布后的函数调用 URL用来做 smoketest
- TEST_DEVICE_CID / --testCid : 用于 push smoketest 的测试设备 CID
- CLOUD_UNICLOUD_SPACEID / --spaceId : 若使用 `unicloud` CLI 上传则为服务空间 ID
6) 常见问题与排查步骤
- 问:脚本返回 `Only absolute URLs are supported` 或 fetch 报错
- 答:通常因为 `--upload` 使用但没有提供值;请改为 `--upload <URL>` 或设置 `CLOUD_UPLOAD_URL`。
- 问:上传后看到 `{"errCode":400,"errMsg":"push_clientid required"}`
- 答:说明你把 zip POST 到了函数的 invoke URL它把请求当作函数调用处理。请提供正确的上传/发布 API 或使用 `unicloud upload` CLI 来发布。
- 排查建议:
- 在 HBuilderX 的发布流程中打开 Network 面板,执行一次发布并抓取对应请求(记录 URL、method、form 字段、headers把它贴到脚本配置中或发给维护者。
- 在 PowerShell 或 Linux 上用 `curl -v` 验证上传端点返回内容,注意响应结构是否像“发布成功”而非函数执行结果。
7) 安全建议
- 把上传/发布的 token、spaceId、testCid 等放在 CI secrets 或受保护的环境变量中,避免写入代码库。
- 脚本中的自动部署入口应加鉴权(例如 `DEPLOY_BEARER`),不要在公网上暴露未经保护的上传接口。
8) 下一步(可选)
- 我可以把 `deploy-cloudfunc.js` 增加 `unicloud` CLI fallback检测 `--spaceId` 或 `CLOUD_UNICLOUD_SPACEID` 并在没有 `--upload` 时调用 CLI也可直接把你抓到的 HBuilder 上传请求模式接入脚本以实现完全自动化。请告知你偏好哪个方案。
-----------------
文件位置server/DEPLOY_WORKFLOW.md