全部案例研究
    我们自己的工作室案例研究 · Ayelet Studio

    将 Son of Thanjai 发布到 PS5、Xbox Series X|S 和 PC

    Ayelet Studio 正是打造 SpeedrunCI 的团队,所以这是我们自己的故事。我们是一家位于 Chennai、约 30 人的工作室,正在用 Unreal Engine 5 制作 Son of Thanjai,一款以 11 世纪南印度为背景的动作冒险游戏。SpeedrunCI 最初是解决我们构建问题的内部工具。如今我们每天仍在用它构建这款游戏。

    声明:SpeedrunCI 由 Ayelet Studio 打造。以下数据均为我们自己的测量结果。

    工作室
    Ayelet Studio,印度 Chennai
    团队
    约 30 人
    游戏
    Son of Thanjai,动作冒险
    引擎
    Unreal Engine 5
    平台
    PS5、Xbox Series X|S、PC
    之前
    Jenkins 和一台构建机
    相同项目,相同硬件,相同仓库
    Jenkins
    3 小时 32 分钟
    SpeedrunCI
    27 分钟

    Son of Thanjai 的一次完整构建,在同一台机器上测量。首次 SpeedrunCI 构建会在缓存预热期间较慢。

    架构
    01触发
    Unreal Editor 插件从工具栏发起构建
    托管 Lore 仓库每次构建的源码来源
    02编排
    SpeedrunCI 流水线每个平台一条,基于同一提交
    游戏感知缓存代码、烘焙后的资源、派生数据
    凭据保险库主机签名密钥,AES-256-GCM
    03并行构建
    Win64专用运行器
    PS5专用运行器
    Xbox Series X|S专用运行器
    04交付
    构建产物存储会过期的签名下载链接
    工作室仪表板为制作人和 QA 提供实时状态
    团队聊天Slack 和 Discord 提醒
    一次提交会分发到每个平台各自的流水线。每条流水线在自己的运行器上并行构建,游戏感知缓存和凭据保险库为每次运行提供支持,完成的构建会进入构建产物存储,并显示在仪表板上。
    之前

    我们一半的精力都花在维持 Jenkins 运转上

    和大多数工作室一样,我们从 Jenkins 起步。没过几周,我们就在用 shell 命令调用 BuildGraph,通过环境变量和共享文件夹传递状态,还不断添加参数来绕过一些我们并不完全理解的失败。

    一次完整构建要三个多小时。三个平台在我们唯一的构建机上依次运行,因此发布全部三个平台要花三倍的时间。一处纹理改动就可能触发完整重建;一旦出错,日志只会告诉你,在一个 200 步的流程中某处出了问题。

    只有一个人能调试这条流水线。美术晚上推送工作,第二天早上才知道是否顺利通过。三位工程师每次提交前都会先跑本地构建,只为保险起见:每天多达九小时的算力,花在了甚至无法预测 CI 结果的构建上。

    “作为制作人,我的全部工作就是掌握构建进展、知道谁被卡住了。过去光是弄清楚这些就要 3.5 小时,一次构建失败就要耗掉我们一整天。现在有了 SpeedrunCI,整个团队每天都在构建,每个构建一运行我就能看到,里程碑也不再因为构建问题而延误。”
    Mohan Raj,Ayelet Studio 工作室制作人
    我们如何使用 SpeedrunCI

    逐项功能

    01

    每个平台一条流水线,并行运行

    Win64、PS5 和 Xbox Series X|S 各有自己的流水线,从同一提交启动。它们分布在多个运行器上同时运行,而不是在一台机器上依次排队,过去三小时的等待大多就耗在这里。

    02

    游戏感知缓存

    SpeedrunCI 会在多次运行之间缓存编译后的代码、烘焙后的资源,以及着色器和派生数据,只重新构建改动涉及的部分。这正是同一硬件上 3 小时 32 分钟与 27 分钟之间的差别:我们不再运行那些不需要运行的步骤。

    03

    直指问题的失败信息

    构建失败时,会明确失败在哪一步,并附上该步骤的日志和触发它的提交。SpeedrunCI 会读取日志并给出修复建议,指出需要查看的文件和行号。修复一个失败的构建只需几分钟,而不是一上午。

    04

    在 Unreal Editor 内发起构建

    我们的美术和策划通过编辑器工具栏中的 SpeedrunCI 插件发起构建,该插件在 Fab 上免费提供。他们在编辑器里就能看到实时状态,再也不用去找那个唯一知道命令的人。

    05

    全团队都能获取的构建产物

    一个约 20 GB 的完整主机构建,可直接从生成它的那次运行中下载。没有 Google Drive 链接,也不用再问哪个是最新构建。

    06

    人人可见的构建状态

    制作人和 QA 在每个构建运行时即可看到它,在仪表板上,也在团队聊天中。站会上再也没人问流水线的事。

    07

    托管 Lore 仓库

    Ayelet Studio 是首个使用 SpeedrunCI 托管 Lore 仓库的工作室,已在生产环境中运行。

    改变了什么

    构建不再需要反复沟通

    • 美术开始每天提交两次,而不是一次。没人要求他们这么做;他们只是不再害怕夜间构建了。
    • 工程师不再“为保险起见”跑本地构建,因为 CI 成了他们信任的构建。
    • 我们没有专职构建工程师。缓存、并行运行和编排都由 SpeedrunCI 负责。
    • 制作人无需询问任何人就能看到每个构建的进展,因此里程碑不再因构建问题而延误。

    更多案例即将推出

    更多试点正在进行中,他们的案例将陆续发布。希望下一个是你?试点会在你的一个真实 Unreal 项目上运行。