构建农场与 CI
自动关联目录:构建农场与 CI
1. 定位
CI 的价值不是"自动构建",而是"在问题进入主干之前发现它"。
一句话定位:UE 项目的 CI 必须能跑三类任务——构建、Cook、自动化测试。只做构建等于只验了一半。
2. CI 应该跑什么
| 类型 | 内容 | 频率 |
|---|---|---|
| 编译 | C++ 各平台各配置 | 每次提交 |
| Cook | 目标平台 Cook(见 Cook 与 DDC 基础设施) | 每次提交或每日 |
| 自动化测试 | 见 自动化测试 | 每次提交 |
| 包体检查 | 见 包体分析 | 每次构建 |
| 性能基线 | 见 性能方法论 | 每日 |
| 资产校验 | 引用完整性、命名规范 | 每次提交 |
优先级:编译 → 测试 → Cook → 包体 → 性能。前两项是底线。
3. UE 特有的考虑
| 项 | 说明 |
|---|---|
| 构建时间长 | C++ 编译 + Cook 以小时计,需要分布式构建/构建农场 |
| 磁盘占用大 | 每个工作区几十 GB,CI 机器要规划 |
| DDC 要共享 | 见 Cook 与 DDC 基础设施 |
| Commandlet | UE 的批处理入口(Cook、构建 HLOD、Builder Commandlets) |
| 多平台 | 每个平台一套配置与时间 |
Commandlet 是 UE CI 的核心手段:-run=cook、WorldPartitionHLODsBuilder、WorldPartitionConvertCommandlet 等,让流程可以在无人值守下跑。
4. 构建农场
| 项 | 说明 |
|---|---|
| 用途 | 分布式编译(C++)与分布式 Cook |
| 常见方案 | IncrediBuild / FASTBuild / sccache 等(见 Work Experience/Efficiency) |
| 收益 | 把几小时压到几十分钟 |
| 代价 | 基础设施与授权成本 |
先做编译缓存(sccache 一类),再考虑完整农场——前者接入成本低得多。
5. 反馈速度
| 做法 | 说明 |
|---|---|
| 分层流水线 | 快任务(编译+快测)先跑,慢任务(Cook+性能)后跑 |
| 提交即触发快任务 | 5–15 分钟内给结论 |
| 每日跑慢任务 | 避免每次提交都等几小时 |
| 失败要定位到人 | 通知到提交者 |
"每次提交都跑全量"会让 CI 变成瓶颈——分层是关键。
6. 代价与权衡
| 设计 | 收益 | 代价 | 什么时候不该用 |
|---|---|---|---|
| 完整 CI | 质量可控 | 机器与时间成本 | 单人原型可简化 |
| 分层流水线 | 反馈快 | 配置复杂 | 小项目不必分层 |
| 构建农场 | 时间大幅压缩 | 成本 | 先试编译缓存 |
| 每次都跑全量 | 覆盖全 | CI 成为瓶颈 | 应分层 |
| 只做构建不测试 | 省事 | 只验了一半 | 至少要加冒烟测试 |
7. 踩坑与排查
| 坑 | 现象 | 怎么验证 |
|---|---|---|
| CI 只编译不 Cook | 打包问题晚暴露 | 加 Cook 任务 |
| 每次提交全量 | CI 排队几小时 | 分层 |
| CI 没接共享 DDC | 每次全量生成 | 接上 |
| 磁盘规划不足 | CI 机器爆盘 | 规划工作区与清理 |
| 失败不定位到人 | 没人修 | 通知机制 |
| 没跑包体/性能基线 | 悄悄退化 | 加监控(见包体/性能篇) |
8. 排查顺序
1. CI 是否覆盖 编译 / 测试 / Cook 三类?
2. 是否分层(快任务先反馈)?
3. CI 是否接入共享 DDC?
4. 磁盘与机器是否够?
5. 是否加入包体与性能基线?参考
- Cook 与 DDC 基础设施 · 自动化测试 · 包体分析 · 性能方法论
- Cook 与打包流程 ·
Work Experience/Efficiency(构建提速)
许可协议:CC BY
作者:Davids
本文链接:https://hustjjd.github.io/d74eac19.html
更新于:2026年10月10日