top of page

从 Git 标签到线上服务器:我们的发布流水线

作家相片: Marcel Dütscher
Marcel Dütscher
7月7日
讀畢需時 2 分鐘

如今发布一个 Blocks Beyond The Stars 版本,只需要一条命令:推送一个 git 标签。之后的一切都由机器完成。这篇文章里我会介绍我们的 CI/CD 流水线——以及为什么即使是业余项目,这份投入也值得。


发布工作流。只要像 v0.7.4 这样的标签一被推送,GitHub Actions 就会构建完整的包:Windows 安装程序(安装版、便携版、MSI)、Linux 版本、给浏览器用的 WebGL 版本,以及给服务器用的 Docker 镜像——一个标签,六份产物。版本号就来自标签本身;真相的来源只有一个。


部署工作流。第二个工作流负责把新版本送上服务器。我们看重的是一道生产闸门:只有明确批准之后,部署才会开始。再也不会有“糟了,那是生产环境”的意外。服务器自己会在一个配置文件里锁定游戏版本——之后每个新唤醒的世界都会自动用新版本启动,而正在运行的世界则不受打扰。


我们不得不学的一课:游戏客户端里的修复,只有通过真正的发布才能到达玩家手里。我们的客户端通过 Velopack 自我更新——已经安装了游戏的人,只有在我们发布新版本时才会收到更新。只要后面没有跟上标签,主分支上合并的错误修复就对谁都没用。听起来理所当然,但不止一次,我们纳闷为什么一个“修好了”的错误还在。


那浏览器呢?WebGL 版本以 ZIP 的形式放到服务器上,并通过切换目录来启用——旧目录会留着当后备。一个小小的 version.txt 会告诉你现在上线的是什么版本。


整套系统花了我们几个周末——而每发布一次,它就又回本一次。

最新文章

查看全部
为什么新版本叫 2026.7.19,而不是 0.9.2 🗓️

今天更新的人,会从 0.9.1 版本一下跳到 2026.7.19。这看起来像是笔误,其实是一个刻意的决定:我们改变了版本号方案,从“语义化”版本改成了基于日期的版本(年.月.序号)。原因如下。 旧方案回答的是没人问的问题。语义化版本(0.9.1、1.2.3 ……)来自软件库的世界。在那里它很棒:第一个数字承诺“不会破坏任何东西”,第二个承诺“只有新增”,第三个承诺“只有修复”。而游戏不对任何人做这

 
 
大扫除:我们终于把 GitHub 的缓存用对了 🧹

在上一篇技术文章里,我们测量了构建和检查流水线到底花了什么:不是钱,而是等待时间和存储空间。那篇文章的结尾是“清理工作已经计划好,但还没完成”。结果比预想的快:从今天中午起,它已经进入主分支了。下面是数字。 先看结果。我们仓库的缓存用量,从 63 个条目共 5.32 GB,降到了 13 个条目共 2.46 GB。以前每个拉取请求都要跑的 C# 安全分析,现在在那里只需要 4 秒,而不是 4 分半,

 
 
每月一千次构建,而且一次都不花钱 ⚙️

先更正一件事。这篇文章的第一版声称,我们的 GitHub 构建分钟数用完了,被迫升级到 Pro 账号。这是错的,而且只要看一眼文档就能弄清楚:对公开仓库来说,GitHub 的构建分钟数是免费的。产物和缓存也一样。我们的仓库从五月底起就是公开的,所以我们从来没有为任何一分钟付过钱,以后也不会。与其悄悄改掉文字,我们宁愿重写一遍,告诉你们测量到底显示了什么。结果比错误的版本有趣得多。 先猜测,后查看。

 
 

留言


這篇文章不開放留言。請連絡網站負責人了解更多。
bottom of page