构建农场与 CI

自动关联目录:构建农场与 CI

1. 定位

CI 的价值不是"自动构建",而是"在问题进入主干之前发现它"。

一句话定位:UE 项目的 CI 必须能跑三类任务——构建、Cook、自动化测试。只做构建等于只验了一半。

2. CI 应该跑什么

类型内容频率
编译C++ 各平台各配置每次提交
Cook目标平台 Cook(见 Cook 与 DDC 基础设施)每次提交或每日
自动化测试见 自动化测试每次提交
包体检查见 包体分析每次构建
性能基线见 性能方法论每日
资产校验引用完整性、命名规范每次提交

优先级:编译 → 测试 → Cook → 包体 → 性能。前两项是底线。

3. UE 特有的考虑

项说明
构建时间长C++ 编译 + Cook 以小时计,需要分布式构建/构建农场
磁盘占用大每个工作区几十 GB,CI 机器要规划
DDC 要共享见 Cook 与 DDC 基础设施
CommandletUE 的批处理入口(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. 是否加入包体与性能基线?

参考