别针社区自从今年五月开启内测以来,期间发布了大大小小百余个功能更新与修复,在如此高强度的发布场景下,便需要一套优雅的发布机制来处理这一切

代码管理

社区代码全部通过 Git 进行版本管理,为保证国内连接速度和开发体验,搭建了 Sparrow Git 基础服务作为 Github 的镜像与备份,所有 CI/CD 流程均基于此镜像 Git 进行。

由于社区代码更新频率较高,镜像速度难以跟上源码更新速度,于是对社区部分源码分离处理。即在 Github 和镜像站上分别维护一份独立且一致的代码。

后端的 CI/CD

持续集成部署采用了 Drone 平台。接入 Gitea 后可自动接收仓库 Push 事件并进行编译。

后端在平台上点击部署后即可一键部署到生产环境。生产环境能保证热更新过程中的无缝衔接,提供用户无感更新体验。

前端

前端这里单独拿出来讲是因为 我懒 近几日才实现了前端的蓝绿发布流程。这里要感谢 CCW 的 HCN 为我提供了这么一个思路,使这方面的热更新得以实现。

由于前端使用 SSR 技术,所以无法编译出单页文件,需要服务器端请求后端接口渲染后发回用户。更新期间需要停服维护。这就导致很长一段时间内 经常能在网站上看到一个绿色茶杯( 需要手忙脚乱快速更新保证服务 SLA (就一破社区有什么*8SLA 保证的)

这一切在前两天有了转机。现在的方案是通过 Nginx 配置一台备份服务器,当生产服务器服务不可用(即停机维护)时自动将流量转发至备用服务器。此时便可在生产服务器上进行更新。上线稳定运行后,则在备份服务器上进行更新,既能保证发布更新的流畅,又能保证平时服务的高可用性(好像不是很高)

需要优化的点

显而易见,没有测试环境,本地测试后就推送源码进行部署了,容易出锅。

还有不测就发的,我不说是谁