Closed Jiang-Xuan closed 4 years ago
阿里云子账号已经申请:
用户登录名称 | 登录密码 | AccessKey ID | AccessKeySecret |
---|---|---|---|
tuchuang.space@1803941249062137.onaliyun.com |
qIn#I%Oo9Ov4Z\|!cWGaRLsuq8Zs3GuaA |
**** |
***** |
[x] 文件超出数量
[x] 文件尺寸过大
[x] 文件格式不支持
[x] 支持 .jpeg, .webp, .png, .jpg, .gif, .svg
[x] 请求频率(ip 限制): 每(可配置)秒钟最多 10 张图片
[x] 请求频率(ip 限制): 每(可配置)小时最多 1000 张图片
[x] 丢弃: 可以使用小时进行限制, 没必要特殊的 24 小时限制 请求频率(ip 限制): 每 (可配置)24 小时最多 5000 张图片
POST /api/1.0.0/images 接口的 e2e 测试会和 阿里 oss 通讯来测试存储功能是否正常, 现在的 github actions 会同步执行3个任务, Node 8.x, 10.x, 12.x, 都是和同一个 oss 进行通讯, 会导致同名的 oss 文件被删除, 有可能导致其他任务的失败, 需要一个解决方案来处理这个问题
想法1: 每一个任务都一个 id, 把这个 id 加到每一个上传的文件名之上 ~想法2: 每一个任务都新建一个 OSS~ 不太靠谱, oss 限制每一个账号最多拥有30 个 oss Bucket, 有可能达到上限 ~想法3: 在每一次的是之前都操作一下所有的图片~ 文件 hash 会变化, 需要在测试用例里面动态计算文件的 md5, 提升测试用例的复杂度, 不可取
采用想法1
给 config.js 加上是否有文件后缀的配置, 默认为空字符串 目前只给 e2e 测试使用, example:
// 文件名
const fileName = `${fileMd5}-${suffix}${fileExt}`
github action 的 浏览器 e2e 测试抛错误 https://github.com/Jiang-Xuan/tuchuang.space/runs/249370024#step:4:104
api/1.0.0/image
接口发起 POST 请求, 且请求的 content-type 为 multiple/form-data
. Note: 为什么不校验请求的参数这里的接口都指的是 mock 接口, 并不会真正的向后端服务发起请求, 因为这里只是前端的 e2e 测试, 不受后端服务的状态影响, 非 mock 接口的测试称之为集成测试
[x] 探索自动部署的可行性以及如何实施
GITHUB ACTIONS SECRETS:
PROD_DEPLOY_SSH_PRIVATE_KEY
ssh public key pm2 的部署需要连接服务器, 采用 ssh key 的方式进行登录, 而不是使用密码 github secret 之中的换行尚不知道是如何处理的, 所以目前手动处理了, 将换行用 \n 替代, 然后用 sed 处理, 说起 sed, mac 的 sed 和 linux 的sed 有所不一致, 见 https://github.com/allenGKC/Blog/issues/5PROD_DEPLOY_USER
deploy user 部署使用的用户名PROD_DEPLOY_HOST
deploy host 部署使用的主机地址PROD_DEPLOY_PATH
deploy path 部署使用的文件目录地址PROD_HOST_KEY
主机的 ssh key, 写入 known_hosts 的数据部署流程, github actions workflow deploy to prod 在 tag 被 push 的时候执行
pm2 deploy ecosystem.config.js prod setup
, pm2 deploy ecosystem production
GITHUB ACTIONS SECRETS:
BETA_DEPLOY_SSH_PRIVATE_KEY
ssh public key pm2 的部署需要连接服务器, 采用 ssh key 的方式进行登录, 而不是使用密码 github secret 之中的换行尚不知道是如何处理的, 所以目前手动处理了, 将换行用 \n 替代, 然后用 sed 处理, 说起 sed, mac 的 sed 和 linux 的sed 有所不一致, 见 https://github.com/allenGKC/Blog/issues/5BETA_DEPLOY_USER
deploy user 部署使用的用户名BETA_DEPLOY_HOST
deploy host 部署使用的主机地址BETA_DEPLOY_PATH
deploy path 部署使用的文件目录地址BETA_HOST_KEY
主机的 ssh key, 写入 known_hosts 的数据部署流程, github action workflow deploy-to-beta 至在 master push 时候执行:
pm2 deploy ecosystem.config.js beta setup
, pm2 deploy ecosystem.config.js beta
pm2 deploy 问题1: https://github.com/Jiang-Xuan/tuchuang.space/runs/260033133#step:4:63
github actions 重构 https://github.com/Jiang-Xuan/tuchuang.space/issues/1#issuecomment-542601291
该文件部署在服务器之上
在 github action 上新增一个 deploy-to-beta
pm2 deploy ecosystem.config.js beta
打包, 上传资源至 cdn, 然后发布 index.html 文件后端的接口发布必须保持接口的兼容性, 否则就应该是新接口, 或者是升级接口版本
新版本的发布必须遵循该顺序: 后端接口发布 -> 前端静态资源 cdn 发布 -> 前端 index.html 文件发布
因为发布策略必须遵循顺序 backend -> frondend -> index.html 发布顺序, 所以导致发布流程不能拆分在多个 workflow 中, 必须在同一个 workflow 中:
所以将 backend deploy-to-beta
, deploy-to-prod
两个 job 拆分到不同的 workflow 中, 老的方案为 https://github.com/Jiang-Xuan/tuchuang.space/blob/fec64c83b62f3c6236f78b3cd06ce3977973ef63/.github/workflows/nodejs.yml#L29 https://github.com/Jiang-Xuan/tuchuang.space/blob/fec64c83b62f3c6236f78b3cd06ce3977973ef63/.github/workflows/nodejs.yml#L55
deploy-to-beta workflow
on: push: branches:
install test 如果 test 成功, deploy to beta
on: push: tags:
install test 如果 test 成功, deploy to prod
将只运行于 非 tag 和 master 的分支
将
on: [push]
改为:
on:
push:
branchs-ignore:
- master
tags-ignore:
- *
采用 pm2 deploy 发布, 在 post-deploy 中执行以下步骤:
tuchuang.space/[^api]/**/*
路由交给 frondend 处理, tuchuang.space/api/**/*
交给 backend 处理, 这里说一下对于未来的期望 可以采用 api.tuchuang.space 来做 api 层, 用二级域名区分 frondend 和 backend[x] 移除代码中的敏感信息
[x] 目前初版已经完成, 画一张项目的架构图, 来方便移除敏感信息进入配置文件中进行配置
linode 提供的文档是非常棒的 https://www.linode.com/docs/web-servers/nginx/use-nginx-reverse-proxy/
该配置是为了解决这个问题 https://github.com/Jiang-Xuan/tuchuang.space/issues/1#issuecomment-538709220 实际部署的时候不会使用, 但是目前上传完毕的图片会出现 bug
现在测试用例的测试方法为, webpack 打包出资源, puppeteer 访问 file://foo/bar/index.html
来进行测试,
接入 react-router 并且使用 browserRouter
测试点击 api 是否跳转进了 /api
路由
页面无法正常加载, react-router 路由失效
react-router 使用 pathname 匹配路由. file://foo/bar/index.html
的 pathname 为 /foo/bar/index.html
所以无法正确的匹配路由
使用一个静态服务器托管 dist 目录
遇到的问题, close 会 grace shutdown, 会减缓测试的执行速度:
https://github.com/nodejs/node/issues/2642
afterAll(async () => {
await new Promise((resolve, reject) => {
testServer.close(error => error ? reject(error) : resolve())
})
})
请求格式 DELETE /api/1.0.0/images HTTP/1.1
Body:
content-type: application/json
{ key: <移除图片的 key> }
// arrange 上传一张图片至 ali oss const deleteKey = '' // deleteKey 文件:key = 1:1
// act request(app).delete('/api/1.0.0/images').send({ key: deleteKey })
// assert 该图片已经不存在于 ali oss 中
请求格式 DELETE /api/1.0.0/images HTTP/1.1
Body:
content-type: application/json
{ key: <不正确的移除图片的 key> }
// arrange const deleteKey = 'abcdefghijklmnopq'
// act request(app).delete('/api/1.0.0/images').send({ key: deleteKey })
// assert 响应 404
一期页面功能需求点
一期技术需求点