内容提要
文章介绍了作者将Hexo+NexT博客从旧版本推倒重建的过程。新版本采用PNPM管理主题、asdf-vm管理Node.js版本、Renovate自动更新依赖,并使用Github Actions进行持续集成,通过Coding制品库加速部署和CDN缓存刷新。改进后,博客维护更便捷,依赖更新自动化,解决了旧版难以升级的问题。
延伸解读
推倒重建的代价与收益
作者因长期未升级导致依赖过旧、无法平滑升级,最终选择推倒重建。这提醒我们,对博客或软件项目进行侵入式魔改虽能短期满足需求,但会积累技术债,使后续升级困难。重建虽耗时,但换来的是更易维护的架构和自动化的依赖更新,长期看是值得的。
主题管理的现代化实践
将NexT主题以NPM包形式安装,并通过Data Files和Injector进行非侵入式自定义,是本文的一大亮点。这种方式让主题升级不再与自定义修改冲突,降低了维护成本。对于使用Hexo等静态站点生成器的用户,这种模式值得借鉴,可避免主题文件被覆盖或升级困难的问题。
CI/CD的优化思路
作者利用Coding制品库作为中转,解决了Github Actions海外Runner传输慢的问题,并将CDN缓存刷新集成到构建流程中。这展示了在跨国网络环境下优化CI/CD的实用技巧:通过中间存储加速制品分发,并自动化运维操作。同时,作者对比了Coding Jenkins与Github Actions,指出后者在权限控制和易用性上的优势,为类似场景提供了参考。
Q&A
为什么作者决定推倒重建Hexo+NexT博客?
因为作者之前对NexT主题和插件做了很多侵入式魔改,导致无法平滑升级,在一次插件失效后决定重建。
新版本中如何管理NexT主题?
使用PNPM作为包管理工具,将NexT主题以NPM包的形式安装,并通过Data Files和Injector特性进行非侵入式自定义。
新版本如何管理Node.js版本?
使用asdf-vm来管理Node.js版本,类似于管理Terraform多版本的方式。
Renovate在博客维护中起什么作用?
Renovate作为Github App自动监控依赖更新,当有更新时自动提交PR,作者只需review即可。
为什么新版本使用Github Actions而不是Coding Jenkins?
因为Coding镜像私有仓库需要Full Access权限,且Jenkins构建节点组件版本低,构建自定义环境耗时;而Github Actions简化了pipeline编写,社区action丰富。
新版本如何解决Github Actions传输慢的问题?
通过先传输到Coding制品库,再由Web服务器从制品库拉取,将发布时间降低到秒级。
新版本在CDN缓存刷新上有什么改进?
在Github Actions构建过程中刷新CDN缓存,相比之前的定时刷新更合理。