路线阶段:Unity WebGL 小游戏实战第 10 章。
本章目标:把“能发布”升级为“可稳定运营发布”。
学习目标
完成本章后,你应该能做到:
- 设计版本发布流程(构建、验收、灰度、全量)。
- 建立上线后关键指标监控与告警阈值。
- 实现快速回滚机制,缩短事故恢复时间。
- 形成发布复盘机制,持续降低事故率。
发布流程分层
建议拆四阶段:
Build:CI 产物生成 + 校验。Staging:测试环境全链路验证。Canary:灰度 5%~20%。Full:全量发布。
发布清单
每次发版必须确认:
- 构建产物 hash 与版本号一致。
- 关键关卡冒烟通过。
- 性能预算未超阈值。
- 埋点与归因事件完整。
- 回滚包可用。
版本元数据
{
"version": "webgl-1.3.7",
"build_time": "2017-03-21T10:00:00Z",
"commit": "a1b2c3d",
"config_version": {
"stage": 12,
"event": 5,
"economy": 8
}
}
灰度策略
按用户分桶:
- 基于
playerId hash % 100。 - 先放 5%,观察 30 分钟。
- 指标正常再升至 20%,再全量。
public static class CanaryRule
{
public static bool InCanary(string playerId, int percent)
{
if (percent <= 0) return false;
if (percent >= 100) return true;
var h = StableHash(playerId);
return (h % 100) < percent;
}
private static int StableHash(string s)
{
unchecked
{
var h = 23;
for (var i = 0; i < s.Length; i++)
{
h = h * 31 + s[i];
}
return h & 0x7fffffff;
}
}
}
上线监控指标
上线后 15 分钟内重点盯:
- 启动成功率
- 首关进入成功率
- JS 错误率
- 平均帧率与卡顿率
- 广告完播率
- 关键付费/奖励事件成功率
告警阈值示例
- 启动成功率 < 97% -> P1 告警
- 首关进入成功率下降 > 8% -> P1 告警
- JS 错误率 > 2% -> P1 告警
- 平均 FPS 下降 > 20% -> P2 告警
熔断与止损
当核心指标触发阈值:
- 自动暂停灰度提升。
- 关闭高风险远程活动开关。
- 停止新广告位策略。
- 准备回滚。
快速回滚机制
产物管理
- 保留最近 3 个稳定版本静态包。
index.html指向当前版本目录。- 回滚时仅切换入口版本引用。
回滚脚本思路
# 示例流程
# 1) 标记 current -> bad
# 2) 切换 stable -> current
# 3) 清理 CDN 入口缓存
回滚验证
- 冷启动可进游戏。
- 核心关卡可正常完成。
- 活动和广告功能可安全降级。
事件与日志关联
每个会话附带:
- 客户端版本
- 配置版本
- 灰度分组
- 发布批次号
方便回答:某问题是否仅出现在某灰度批次。
发布后复盘模板
- 事故描述:何时发现、影响范围。
- 根因:代码、配置、依赖还是运维策略。
- 处置时间线:告警->定位->止损->恢复。
- 后续动作:监控补充、流程补丁、自动化用例。
与前面系统联动
- 配置管线:发布同时锁定配置版本。
- 埋点系统:提供上线效果与异常定位数据。
- 活动系统:灰度期间可单独开关。
- 性能系统:监控上线后性能退化。
WebGL 特殊注意
- CDN 缓存层级多,回滚要先控制入口文件缓存。
- 浏览器本地缓存可能持有旧 loader,需要版本戳处理。
- JS bridge 变更需与 Unity 版本同步发布。
验收清单
- 可执行一次完整灰度发布并记录指标。
- 故障注入后可在目标时间内完成回滚。
- 回滚后关键路径恢复正常。
- 复盘报告可追踪到可执行改进项。
常见坑
坑 1:只回滚代码不回滚配置
会出现“代码回退但异常仍在”。版本回滚需包含配置基线。
坑 2:灰度分桶规则不稳定
同一用户跨天进不同桶,数据污染严重。
坑 3:告警过晚
只看日级报表无法止损。上线必须分钟级监控。
本月作业
做一次“演练型发布”:
- 先灰度 10%,观察 30 分钟。
- 人工注入一个高错误配置并触发告警。
- 执行回滚并输出完整复盘报告。
下一章进入 Unity WebGL 小游戏实战 11:多人异步竞技(幽灵回放与排行榜挑战)。