前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >使用 GitHub CI 云构建和自动部署

使用 GitHub CI 云构建和自动部署

作者头像
Innei
发布2021-12-28 10:41:46
发布2021-12-28 10:41:46
6250
举报
文章被收录于专栏:静之森静之森

最近这段时间把拖延已久的重构计划重新规划起来了。在经过一周多的努力终于把原先项目结构非常不堪的小站后端重构了一版。

原先的项目有以下几个痛点:

  • node_modules 过于庞大,动辄 1G+
  • 构建时间长,受限于服务器性能
  • 目录结构混乱

最后一个问题可以通过重构和学习他人项目架构解决。而第一个问题也可以使用 pnpm 管理减少依赖的体积。

问题是如何减少构建时间。解决方式:使用 GitHub 云构建,部署服务器复用云构建产物。

确定了目标之后,有以下几个需求需要解决:

  • 构建完自动部署
  • 部署服务器端摆脱 node_modules 的依赖

一般 node 应用构建使用 tsc、webpack 去打包,但是运行时依旧依赖 node_modules,能否像前端应用一样,打包之后摆脱 node_modules。答案是可以。@vercel/ncc 已经发布 0.31.0(截止文章发布前),在原有的基础上修正了很多打包不全,打包文件缺失的问题,经过测试,该版本已经完全符合需求。

需要注意的是,使用 ncc 打包之后,运行端和打包端运行的系统必须一致,比如 ncc 打包的系统是 Ubuntu,理论上运行构建产物的一方系统也必须是 Ubuntu。因为 ncc 会在打包过程中同时打包其他语言编译而成的二进制文件。

构建流程为:

flowchart TD 1([nest build]) -- dist/src/main.js --> 2([ncc build dist/src/main.js -o out])

经过验证,node_modules 原本为 350M,ncc 打包之后参数只有 30M+。经过 zip 压缩之后可以控制在 10M 以内。

在 GitHub CI 的流程为:

flowchart TD 1([手动打 tag 发布一个 release]) --> 2([CI 监视 release 的发布 开始构建和发布]) --> 3([云构建打包产物 zip 发布到 GitHub Release]) -- SSH 连接到服务器--> 4([执行部署脚本]) --> 5([下载构建产物解压]) --> 6([直接运行或使用 PM2 托管])

从而很好的摆脱了 node_modules 的依赖,和大大减少了构建时间。甚至在服务端无需构建。奈斯。

完整的 CI 流程可以参考:

https://github.com/mx-space/server-next/blob/master/.github/workflows/release.yml

以后 SSH 之后的部署脚本参考:

https://github.com/mx-space/server-next/blob/master/scripts/deploy.js

完整的 GitHub flow 可以查看:

https://github.com/mx-space/server-next/actions/runs/1223394127

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-09-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档