最早发版本的时候我用 SCP。
把代码打个包传服务器,登上去解压,重启服务,看一眼日志,搞定。一开始一周一次还行;等到改 bug 多了一天发两次,这套手动流程就变得很烦。
后来我接了 GitHub Actions 自动 release。
push 到 main 触发流水线、读 static/version.txt、生成 update_files.json、创建 release。听起来很顺。
写起来才发现真正难的不是构建,是清单。
哪些文件该进热更包?哪些不该进?我第一版定规则的时候很乐观——所有 .py、.html、.js 都进。
跑了第二天就出事了。
global_config.yml 一起更新过去,覆盖了用户的本地配置。data/ 目录里的运行时数据也带了进去。node_modules 装进了热更包。问题一大堆,全是我没想清楚”哪些文件是开发态的、哪些是运行态的”。
现在这份排除清单我审了不下十遍:用户配置、运行时目录、Docker 文件、CI 文件、文档、数据库、日志、缓存、备份目录——一律不进热更。
后来还支持了 deleted_files 列表清理旧文件。这个能力又踩了一个坑——清理之前必须先备份原文件,不然万一要回滚,发现东西已经被删了。
干这件事让我相信一句话——
自动化的难点几乎从来不是”自动什么”。是想清楚”绝对不能自动什么”。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 咕咚的小站!
评论