测试环境下,基于push dev 分支触发部署,这样简单方便,也不需要回滚。 线上环境,有上线,就要有回滚,否则无法闭环。

购买和配置云服务器

  • 测试环境要求配置灵活,集成性高、一键部署,数据安全性要求不高,适合用Docker
  • 线上环境要求稳定、高效、数据安全性高、适合用独立的数据库服务
  • 线上环境必须由Nginx来统一配置流量,记录日志。

所以线上和测试环境要分开,需要购买的服务:

name: deploy production

on: push: tags:

  1. - 'v*.*.*'

jobs: deploy: runs-on: ubuntu-latest

  1. steps:
  2. - uses: actions/checkout@v2
  3. - name: Use Node.js
  4. uses: actions/setup-node@v1
  5. with:
  6. node-version: 12 # 尽量和线上机 node 版本保持一直
  7. - name: lint and test # 测试
  8. run: |
  9. npm i
  10. npm run lint
  11. npm run test:remote
  12. - name: set ssh key # 临时设置 ssh key
  13. run: |
  14. mkdir -p ~/.ssh/
  15. echo "${{secrets.WFP_ID_RSA}}" > ~/.ssh/id_rsa # secret 在这里配置 https://github.com/imooc-lego/biz-editor-server/settings/secrets
  16. chmod 600 ~/.ssh/id_rsa
  17. ssh-keyscan "${{secrets.IP165}}" >> ~/.ssh/known_hosts
  18. - name: deploy # 部署
  19. run: ssh work@${{secrets.IP165}} "bash -s" < bin/deploy.sh ${{secrets.WFP_PASSWORD}} ${{github.ref}}
  20. - name: delete ssh key # 删除 ssh key
  21. run: rm -rf ~/.ssh/id_rsa
  1. <a name="FoOXI"></a>
  2. # 一键生成tag
  3. 手动操作容易失误,必须被切换到master, 再push tag,所以要整合成一个命令,一键执行。<br />如下:`[npm version patch/minor/patch](https://docs.npmjs.com/cli/v8/commands/npm-version)`会自动帮我们进行版本升级还有推送tag<br />`.bak`后缀就是备份的意思,不用的代码,又不想删掉,就加这个后缀。
  4. ```shell
  5. #!/bin/bash
  6. # 【说明】,手写 shell 升级版本提交 tag ,后来被 release-it 代替 - 2020.11.16
  7. # 切换到 master 分支
  8. git checkout master
  9. # 获取最新的 master 分支代码
  10. git pull origin master
  11. # npm version xxx 最后的类型,patch|minor|major 三选一
  12. version_type="patch" ## 默认为 patch
  13. # 执行命令传入了参数(参数数量 >= 1),如 `sh ./build/up-version.sh patch`
  14. if [ $# -eq 1 -o $# -gt 1 ]
  15. then
  16. ## 参数值必须 patch|minor|major 三选一
  17. if [ $1 != "patch" -a $1 != "minor" -a $1 != "major" ]
  18. then
  19. echo "参数值错误,必须 patch|minor|major 三选一"
  20. exit 1
  21. fi
  22. version_type=$1
  23. ## 对 major 和 minor 进行再次确认
  24. if [ $version_type = 'minor' -o $version_type = 'major' ]
  25. then
  26. read -r -p "你确定要执行 npm version $version_type ? [Y/n] " input
  27. case $input in
  28. [yY][eE][sS]|[yY])
  29. echo "确认,继续执行"
  30. ;;
  31. [nN][oO]|[nN])
  32. echo "取消执行"
  33. exit 1
  34. ;;
  35. *)
  36. echo "非法输出,取消执行"
  37. exit 1
  38. ;;
  39. esac
  40. fi
  41. fi
  42. echo "version_type: $version_type"
  43. # 升级 npm 版本并自动生成 git tag
  44. npm version $version_type
  45. # push tags ,以触发 github actions 发布到 npm
  46. git push origin --tags

回滚

重新执行对应relase版本的github actionss
截屏2022-10-01 16.49.49.png

用release-it 改造

截屏2022-10-01 16.52.16.png

查看发布是否成功