用 GitHub Actions 把发布流程自动化后,我每天省下两小时
技术笔记 2 次阅读

用 GitHub Actions 把发布流程自动化后,我每天省下两小时

用 GitHub Actions 把发布流程自动化后,我每天省下两小时

先说背景:我以前是怎么发版的

说出来有点丢人,我负责的那个小项目,发版流程一直是手动来的。本地 build 完,scp 传到服务器,ssh 上去 kill 进程、重启、看日志,运气好十分钟搞定,运气不好(比如忘了带某个环境变量)能在服务器前耗半个钟头。最气人的是有一次周五下午发版,手一抖把生产配置覆盖了,整个周末都在救火。

后来同事推荐我用 GitHub Actions,我拖了一个月才动手。真用起来才发现,这东西比我想象中简单太多,也香太多。

一个 workflow 文件解决的事

说白了就是在仓库里放一个 .github/workflows/deploy.yml,我大概写了三十行:监听 main 分支的 push,跑一遍测试,build 出 dist 目录,然后用 rsync 同步到服务器,最后 ssh 执行一条 pm2 restart。就这么点事,把我之前手动做的六步全包了。

有几个细节值得说一下。一是 secrets,服务器密码、SSH 私钥这些千万别写进文件里,在仓库 Settings → Secrets 里配好,workflow 里用 ${{ secrets.XXX }} 引用就行。二是缓存,node_modules 那玩意儿每次重新装要一两分钟,加个 actions/cache 之后,整个流程从五分钟压到了三分钟以内。三是并发,Actions 默认同一个分支的多个 push 会排队跑,我加了 concurrency 配置,连续提交也不会打架。

踩过的两个坑

第一个坑是权限。runner 默认用的用户和我平时登录的用户不一样,导致 rsync 过去文件属主不对,pm2 起不来。折腾了半天,最后在 workflow 里加了一步 chown 才消停。第二个坑是环境变量。本地 .env 文件我习惯直接放着,但 Actions 的 runner 是全新的环境,啥都没有,第一次部署完页面白屏,查了半天才发现是少了 API 地址的变量。后来我把所有环境相关的都挪到了 secrets 里,一步到位。

效果怎么样

这么说吧,以前发一次版,从开始到结束大概二十分钟,全程提心吊胆。现在 push 完代码,喝口水的功夫,Actions 自己就把测试、构建、部署全干完了,我在手机上都能看到进度。平均下来每天至少省两小时,更重要的是,再也没出现过"人肉部署"搞出来的低级事故。

GitHub Actions 免费额度对个人项目完全够用,公开仓库甚至不限额。如果你还在手动发版,真的,花半小时配一个 workflow,这波不亏。

分享

评论 (0)

评论通过后显示

暂无评论,来写第一条吧 ✍️