跳转至

Ludo Atlas · 管线 · 构建与发布管线

管线与工作流。定位:把「代码冻结」到「渠道收包」之间的工程侧事务做成一条可复现、可追溯、可回滚的通道,版本对得上、渠道分得清、出问题退得回。 配套:《技术实现手册》·《制作管理手册》·《全平台上架手册》·《避坑大全》。 与《全平台上架手册》的分工:《全平台上架手册》 讲商店提审、资质与合规的流程;本页讲工程侧的构建、打包、签名、归档与回滚,范围到「包交到渠道手里」为止。本文不写具体命令,接口细节以各引擎与平台官方文档为准。


1. 定位与适用

构建与发布管线解决一个问题:同一条游戏内容,如何稳定地变成每个渠道都能直接使用的包。在这条管线里,「能跑」不够,四个条件缺一不可:

  • 可复现:任意一个发过的版本,能由对应的代码与资产重新构建,行为一致。
  • 可追溯:任意一个包,能回答它来自哪个提交、哪个构建号、谁在什么时候构建的。
  • 可分渠道:商店包、测试包、内部分发包各走各的口径,互不污染。
  • 可回滚:线上出事时,能在约定时限内退回上一个稳定版本。

什么时候需要立这套东西:只要有构建离开你的开发机(发给测试者、上测试渠道、提审商店),就需要。单人开发可以裁剪到最小(版本号加归档加一条命令出包),但「手拼一个包发给玩家」这种做法,从第一个外部测试者开始就不该再用。

四个概念先定下来,后文反复使用:

概念 含义 纪律
档位(flavor) 同一份代码按用途分出的构建口味:开发、内部、测试、发布 差异写进配置,不靠人工记忆
构建号 每次构建自动生成的全局递增序号 只增不减、不复用、不手填
渠道包 为某个商店或分发渠道定制的产物,含平台与渠道标识 一个包只归属一个渠道
签名 平台验证「这个包确实出自你」的身份机制,配套证书与私钥 证书集中托管,私钥永不进代码库

边界说明:上架流程、资质与审核节奏在《全平台上架手册》,本页不重复;构建农场的搭建与流水线细节属于 CI/CD 管线(规划中),本页只定义它必须满足的规则;版本控制与资产方案是另一条管线的事,本页假设代码与资产已经能按提交重建。

2. 工具链

工具链按六个环节铺开,每个环节只留一个主力工具:

环节 工具类型 常见选择 选型注意
构建入口 引擎的命令行导出与无界面构建 引擎自带的无界面导出加项目内构建脚本 一切参数进脚本,人只填版本与档位
构建编排 CI 服务加版本写入脚本 托管 CI 或自建构建机 干净环境、工具链版本锁定、构建号全局递增
打包 安装器与压缩工具 平台安装器生成器、归档格式工具 打包格式按渠道要求提前定
签名 平台签名工具 各平台官方签名链路 与密钥库接线,不落地明文私钥
归档 制品库或对象存储 内部制品库、对象存储加台账 只增不改,能按版本检索
分发 内部分发与测试渠道 内部分发页、平台测试轨道 访问受控,注出版本与有效期

选型三条纪律:

  • 一条命令出包是底线,脚本与项目同库同审。需要人手点五个菜单才能出包的工具链,不可能自动化也不可能稳定;脚本散落在个人机器上等于没有,改动走代码评审。
  • 构建环境与开发环境分离。构建机不装多余运行库、不留历史文件,保证「干净能过」;开发机流畅不作数(方法同《技术实现手册》)。
  • 密钥与证书不进代码库。构建机从集中的密钥库取用,最小权限,取用留日志。

3. 流程与规范

3.1 构建目标矩阵:平台 × 档位 × 渠道

矩阵的第一维是档位,四档固定,用途不混:

档位 用途 配置取向 可交给谁
开发档 本机日常调试 调试全开、可连本地服务 开发者
内部档 团队与 QA 日常验证 带调试符号、留诊断入口 团队内部
测试档 外部测试者与平台测试渠道 接近发布配置,日志收紧 受控外部
发布档 正式商店与渠道 优化全开、无后门、符号另存 全部玩家

第二维是平台与渠道,工程侧要准备什么,因交付形态而异:

平台与渠道 交付形态 工程侧特有项
PC 商店 安装器或压缩包、商店后台上传 多架构、增量上传、运行库打包
主机平台 认证候选包 平台工具链、专用签名与版本格式、认证检查项
移动商店 含签名的商店包 证书与描述文件、加固、分包、目标系统版本
国内安卓渠道 渠道包 渠道标识、渠道 SDK、多包管理
小游戏平台 平台包 分包与远程资源、平台工具链
Web 静态资源包 缓存策略、路径前缀、版本指纹

矩阵纪律:不在矩阵里的组合不允许存在。每个格子(平台加档位加渠道)的构建参数写在一份配置表里:优化开关、日志级别、服务器地址、渠道标识。有人要求「临时改一下再出个包」,改的是配置表再走构建,不允许在产物上手动打补丁。

3.2 版本号与产物命名

版本体系用双轨制:

  • 对外版本号:三段式(主版本、次版本、修订号),用于商店与玩家沟通;只在里程碑跳变,发布后不可改写;同一渠道内必须单调递增,商店会拒收重用过的版本号。
  • 构建号:全局递增的整数,每次构建自增,不复用、不回退;来源自动化(提交计数或流水线计数器),禁止手填。一个对外版本号通常对应多个构建号,台账记录最终上线的是哪一个。

规则清单:

  • 版本号与构建号必须写进产物内部(可执行文件属性、应用清单、游戏内可见角标),不只存在于文件名;玩家报障截图里要带得出这两个数字。
  • 产物命名包含定位五要素:项目、版本、构建号、平台与架构、档位与渠道;全小写、不用空格与中文、分隔符全库统一,保证可脚本解析与稳定排序(示例:项目名-1.2.0-b514-win64-release-steam,字段顺序全库统一)。
  • 提交号与构建号的对应关系进台账;打标签发布时,标签、构建号、台账三处必须一致,任一缺失,该次发布视为无效。

3.3 构建自动化:命令行导出与触发规则

自动化的地基是引擎的命令行导出(无界面构建):没有它,一切免谈;有了它,才轮到编排。

  • 手动触发也走同一入口:允许人工发起构建,但必须走同一套脚本与同一组参数(版本、档位、渠道),禁止「进编辑器手动导出」应急;应急一次,台账就断一次。
  • CI 触发三类时机,各司其职:
时机 触发源 出什么包 服务谁
日常 每次合并到主干 冒烟构建(能启动、能进关卡) 开发与 QA
定时 每天固定时刻 内部档完整包 团队日常验证
里程碑 发布标签或人工批准 测试档与发布候选包 测试者与渠道
  • 输入全自动:构建机只从版本库取料,不留任何手工改动,改完先提交再构建;版本号、档位、渠道以参数注入,构建过程零交互,任何需要人当场回答的步骤都是自动化缺口。
  • 构建产物三件套:产物本体、构建日志、台账记录,一次构建生成一份,缺一不可。

3.4 渠道包管理:商店包、测试渠道、内部分发

一个版本可以出多个渠道包,但渠道差异只允许活在打包层:渠道标识、渠道 SDK、登录与支付、服务器地址、图标与名称。做法是每个渠道一份配置,打包时注入;禁止把渠道差异写成代码里的条件分支,那种分支每加一个渠道就要全量回归。

  • 商店包:用于提审与正式上架的包,一旦上传,其版本号在该商店不可复用;所以顺序永远是「测试渠道先验,商店包后出」,反着做等于拿提审名额做试验。
  • 测试渠道:用平台自带的测试轨道(移动的测试分组、PC 商店的测试分支等);每次给测试者的包,附三行说明:哪个版本、哪天起可下载、问题往哪报。测试渠道上的包与将发布的商店包必须出自同一构建参数,只差渠道标识。
  • 内部分发与归属:内部档放进受控的内部分发页或制品库,注出版本号、构建号与有效期,过期自动清理;每个渠道包都要能回答「来自哪个构建号、谁上传的、什么时候」,同一构建产物不允许改配置后二次分发。

3.5 签名与证书管理(概念与纪律)

签名是平台验证「这个包确实出自你」的机制,证书与私钥是身份资产。类型与失效后果先认清:

场景 凭证形态 丢失或过期的后果
iOS 发布证书与描述文件(有有效期) 证书失效则无法再发版;描述文件过期需重签
Android 签名密钥(含上传密钥) 密钥丢失且无重置方案,更新同一应用的路被堵死,等同换应用重来
Windows 与 macOS 代码签名证书、公证凭证 无法签发新包;已发版本不受影响,新版本发布冻结
主机平台 平台专用签名与凭证 认证包无法产出,直接停摆
小游戏平台 平台侧密钥与后台配置 无法上传与更新

管理纪律:

  • 集中托管、双人经办:证书与私钥进统一的密钥库(密码管理工具或专用密钥库),禁止只存在于个人机器、邮件附件与聊天记录里;至少两人有取用权限并知道流程,人员变动时交接清单必须有「凭证与权限」一项。
  • 离线与异地备份:私钥离线备份至少两份,其中一份异地;备份本身加密。
  • 登记在册:每份凭证记录用途、负责人、有效期与续期方式;到期前提前续,商店证书到期等于发版冻结。
  • 最小权限与留痕:构建机按需取用,取用与签名操作留日志;私钥永远不进代码库、不进构建日志。
  • 定期演练:至少做一次「换台机器、用备份凭证、重建签名包」的演练;没演练过的备份不算备份。

3.6 产物归档与回滚

归档的对象不是「所有构建」,而是每一个对外发过的构建:所有测试渠道与商店版本、所有内部分发过的包。归档四件套:

归档项 用途 保留策略
产物本体 回滚与取证 商店在售版本与主机认证版本永久
调试符号文件 解析线上崩溃堆栈 与对应版本同寿命
构建日志 复现与追责 至少保留到该版本退出支持
台账记录 版本历史与对应关系 永久

回滚的三个前提,缺一个就回不去:归档完整(旧包与旧符号都拿得出来);可重复构建(万不得已重建旧版本时,能由旧标签重建出行为一致的包);流程演练过(负责人、时限与操作路径提前定好,别等事故当晚现学)。

回滚的现实口径:多数商店不支持「降版本」;工程上的通用路径是把上一个稳定版本重新构建成更高版本号推送(或推回滚补丁),主机的认证节奏会让这条路更慢。所以「回滚时间」是一个要写进预案并演练过的数字,不是一句口号。

4. 自动化与验收

机器管形式,人管判断。下列检查全部脚本化,接在构建与分发之间:

检查项 触发时机 不通过的处理
干净环境一键重建 每次发布候选 阻塞发布
版本号、构建号唯一单调,命名合规 每次构建 构建失败
发布档无调试后门与作弊入口 发布档构建 阻塞发布
签名验证通过 打包后 拒绝上传
冒烟测试(启动、新档、存档、退出) 每次构建 阻塞分发
目标设备抽测 发布候选 阻塞上架
归档四件套齐全 分发前 阻塞分发

验收看四件事,全部可观察:

  • 任意一个发过的版本,当天能取出它的产物与对应提交,并能重建。
  • 版本台账与商店后台的线上版本一一对应,没有「查无此包」。
  • 回滚演练走过至少一次,负责人能在约定时限内把上一个稳定版本还原到测试渠道。
  • 全流程手动介入次数为零:从参数注入到上传渠道,没有人需要「帮一下」。

给自己看的三个指标:手工介入次数、构建失败率、从「决定发版」到「测试渠道可下载」的时长。手工介入一次都嫌多;后两个指标连续上升,说明流程正在腐化,先修管线再谈发版。

5. 常见坑

  1. 手工构建:只有一台开发机能出包、参数靠记忆,人一休假发布停摆;产物与提交对不上,出问题无法复现。
  2. 版本号混乱:手填、重号、回退;商店拒收、玩家端更新异常、客服无法定位版本,台账形同虚设。
  3. 证书与私钥丢失:只存在个人机器或聊天记录里,人员变动或硬盘故障,发版直接冻结(§3.5)。
  4. 只在开发机测过:开发机装着运行库、留有历史文件,换台机器启动就崩;干净构建机加冒烟测试是底线(§3.3)。
  5. 发布档留后门:调试面板、作弊指令、详细日志没关,上线后被玩家发现,那是事故不是彩蛋。
  6. 归档缺项:产物或符号文件不齐,回滚找不到旧包、崩溃堆栈无法解析,损失都补不回来(§3.6)。
  7. 测试渠道与商店包不一致:测过的与发出去的不是同一构建参数,测试结论作废。
  8. 渠道差异散在代码里:每加一个渠道全量回归;差异应集中在打包层的配置(§3.4)。
  9. 密钥或证书进代码库:一次仓库泄漏,安全与身份双失;凭证永远不进版本库(§2)。

延伸阅读

  • 《技术实现手册》:工程基础设施、构建系统与「先测量」方法论,本页是其发布侧的切面。
  • 《制作管理手册》:里程碑、冻结与验收流程,发布窗口与第 4 节验收直接衔接。
  • 《全平台上架手册》:商店提审、资质与合规的完整流程,与本页构成「工程到上架」的接力。
  • 《避坑大全》:发布与协作类坑位速查,与第 5 节对照阅读。