1. 用途和受众
1.1 预期用途
- 指导华为云上游戏编译 CI/CD 流水线的设计和开发。
- 为售前、解决方案设计、实施和审查提供可重用的架构模式。
- 作为解决方案手册、交付包或实际部署的架构基础。
- 定义安全性、可靠性、性能、成本、运营和合规性护栏。
1.2 目标受众
- 华为云 ECS 用户和弹性伸缩 AS 实践者;
- 游戏工作室的技术总监和 CI/CD 流水线运维团队;
- 需要将本地 Perforce 代码管理 + Jenkins 构建流程整体迁移上云、或从零在云上搭建游戏编译流水线的 DevOps 工程师;
- 面临编译机器不足、Mac 硬件成本高、发版前排队等机器等痛点、希望利用竞价实例 + 弹性伸缩实现按需编译降本的游戏后端架构师;
- 需要一套流水线同时覆盖 Windows/Linux/iOS 多平台并行编译、编译产物自动存储分发并触发真机自动化测试的游戏制作团队管理者。
2. 参考架构概述
2.1 架构描述
将游戏编译从开发者本地电脑搬到华为云上执行。开发者只需提交代码,后续的分配编译机器、多平台并行编译、iOS 签名打包、产物存储分发、触发自动化测试全部由云上流水线自动完成。编译机器按需开关,忙时多开、闲时自动关闭,按用量付费。支持 Unreal Engine、Unity、自研引擎,不绑定特定引擎。既支持将团队现有 Perforce + Jenkins 流程整体迁移上云,也支持从零在云上搭建全新流水线。
2.2 业务背景
| 项目 |
描述 |
| 业务问题 |
游戏项目代码量大、资源多,一次完整编译 20–60 分钟甚至更久;本地编译机器不够用、买了浪费、Mac 硬件贵、分发麻烦、远程开发卡顿 |
| 期望的结果 |
编译机器按需开关、按量付费;Mac 服务器按需创建释放;编译产物统一存对象存储并自动触发测试通知;专线+VPN 保证稳定安全接入 |
| 主要用户 |
游戏工作室开发者(办公室+居家)、DevOps 工程师、测试人员 |
| 关键制约因素 |
iOS 游戏只能用 macOS 编译签名;编译环境需网络隔离保证安全;签名证书和私钥不可落地编译机器 |
| 成功指标 |
从提交代码到出安装包 < 1 小时;编译成本降低(竞价实例+弹性伸缩);编译产物零丢失;全平台并行出包 |
2.3 架构优点
| 优点 |
描述 |
| 弹性编译集群 |
用竞价实例 + 弹性伸缩,编译高峰自动加机器、空闲自动关机器,大幅降低编译成本 |
| 一套流水线编所有平台 |
Windows/Linux 在普通云服务器上并行编译,iOS 在 Mac 云服务器上编译,一套流程覆盖全平台 |
| 代码双份不丢 |
Perforce 主备两份 + 云硬盘持久存储,主节点挂了备份顶上,代码不会丢 |
| 安全隔离 |
用虚拟私有云把编译环境隔离起来,Jenkins 放公共子网,编译机器和代码放私有子网,出公网走 NAT 网关控制 |
| 密钥不落地 |
签名证书和私钥放在加密服务里,不存到编译机器本地,编译时按需取用,用完不留 |
2.4 设计关注点
| 效益 |
架构如何实现它 |
测量 |
| 安全与合规 |
VPC 隔离编译环境,Jenkins 放公共子网、编译机器和代码放私有子网;签名证书和私钥存放在 DEW 加密服务,不落地编译机器;专线+VPN 安全接入 |
编译环境不暴露公网;密钥零落地 |
| 可靠性和弹性 |
Perforce 主备双节点 + 云硬盘持久存储;Jenkins 自动重试失败任务;弹性伸缩自动替换故障机器 |
主节点故障自动切换;编译任务自动重试 |
| 性能和可扩展性 |
多台云服务器并行编译多平台版本;竞价实例适合 1 小时内短编译、按需实例适合长时间编译;弹性伸缩按队列深度自动扩缩 |
从提交到出包 < 1 小时;并行编译多平台 |
| 成本效益 |
竞价实例 + 弹性伸缩,忙时多开闲时关;Mac 服务器按需创建释放;按用多少付多少,不用自买一批机器闲着 |
编译成本 vs 自建机器降低比例 |
| 卓越运营 |
编译产物统一存对象存储,自动触发测试和通知;Jenkins 控制器统一调度全流程;结果自动通知团队 |
全流程无需人工盯守;自动通知覆盖率 |
| 交付敏捷性 |
引擎无关,Unreal/Unity/自研引擎均可接入;支持迁移模式(现有 Perforce+Jenkins 整体搬上云)和全新模式(从零搭建) |
新引擎接入时间;上云迁移周期 |
2.5 典型架构
典型架构图
| 层级 |
色系 |
包含服务 |
| 办公室 / 工作室(外部) |
橙色 |
办公室开发者、本地基础设施、居家开发者 |
| 网络接入层 |
蓝色 |
云专线 DC、VPN 网关、企业路由器 ER、NAT 网关 |
| 构建调度层(公共子网) |
蓝色 |
Jenkins 控制器(一台云服务器)、弹性公网 IP EIP |
| 构建执行层(私有构建子网) |
蓝色 |
编译机器(云服务器,竞价/按需)、弹性伸缩 AS、Mac 编译机器 |
| 代码管理层(私有源码子网) |
蓝色 |
Perforce 主节点、云硬盘、Perforce 备份节点、云硬盘、VPC 终端节点 |
| 存储、安全与测试层 |
紫色 |
对象存储 OBS、数据加密服务 DEW、移动应用测试 |
| 公共服务 |
黄色 |
虚拟私有云 VPC、密钥管理 KMS |
2.6 流程描述
| 步骤 |
描述 |
| ① |
办公室开发者走专线接入华为云,居家开发者走 VPN 接入,均为安全私有连接 |
| ② |
企业路由器负责把多个网络打通,让编译网络和公司本地网络能互相访问 |
| ③ |
Perforce 管代码版本(谁改了什么、什么时候改的),云硬盘提供快速可靠存储;主备两份保证不丢 |
| ④ |
开发者提交代码后 Jenkins 自动开始编译,把任务分到多台云服务器上同时跑(命令行模式,不打开编辑器界面) |
| ⑤ |
iOS 版本必须在 Mac 上编译签名,交给 Mac 云服务器处理,签名证书和私钥放在加密服务里保管 |
| ⑥ |
编译出来的安装包传到对象存储,自动通知成功或失败,然后在真机上跑自动化测试 |
2.7 云服务产品清单
| 分类 |
服务或产品 |
推荐配置 |
| 网络接入 |
云专线 DC |
办公室拉专线直连华为云,低延迟不走公网 |
| 网络接入 |
虚拟专用网络 VPN |
居家开发者通过 VPN 安全接入 |
| 网络接入 |
企业路由器 ER |
管理多个网络之间互联互通 |
| 网络接入 |
NAT 网关 |
私有网络机器访问公网(下载依赖包) |
| 网络接入 |
弹性公网 IP EIP |
给公共子网提供互联网入口 |
| 构建调度 |
弹性云服务器 ECS(Jenkins 控制器) |
1 台云服务器,公共子网 |
| 构建执行 |
弹性云服务器 ECS(编译机器) |
竞价/按需实例,Docker 容器隔离,弹性伸缩 |
| 构建执行 |
弹性云服务器 ECS(Mac) |
专门编 iOS/Mac 版本,签名导出 .IPA |
| 构建执行 |
弹性伸缩 AS |
按编译队列深度自动扩缩编译机器 |
| 代码管理 |
Perforce 主/备节点 + 云硬盘 EVS |
主备双节点持久化存储,主节点故障自动切换 |
| 代码管理 |
VPC 终端节点 VPCEP |
不走公网访问对象存储等云服务 |
| 存储与安全 |
对象存储服务 OBS |
存编译产物(.IPA/.APK/可执行文件),自动触发通知 |
| 存储与安全 |
数据加密服务 DEW |
安全保管 iOS 签名配置文件、私钥、证书 |
| 存储与安全 |
密钥管理服务 KMS |
管理加密密钥,给 DEW 提供底层支撑 |
| 测试 |
移动应用测试 |
拿编译出来的 App 在真机上自动跑测试 |
| 网络 |
虚拟私有云 VPC |
隔离编译环境,分公共子网和两个私有子网 |
3. 参考链接
- 产品文档:
- 实施指南:
- 源代码或 IaC:
- 操作手册:
- 安全性和合规性映射:
4. 使用限制
- 引擎无关:Unreal Engine、Unity、自研引擎均可接入,Jenkins 只负责调度,具体编译命令由各引擎命令行工具(headless CLI)执行。
- 两种部署模式:迁移模式(现有 Perforce + Jenkins 整体搬上云)和全新模式(从零在云上搭建),开发者改接入地址即可。
- iOS 编译必须在 Mac 云服务器上执行,签名证书和私钥通过 DEW 加密服务按需取用,不落地编译机器。
- 竞价实例适合 1 小时内短编译任务,长时间编译建议使用按需实例以保证稳定性。
附录 A. 术语和缩略语
| 术语 |
定义 |
| CI/CD |
持续集成/持续部署,自动化的代码编译、测试和部署流水线 |
| DC |
云专线,办公室拉专线直连华为云 |
| VPN |
虚拟专用网络,居家开发者安全接入 |
| ER |
企业路由器,管理多网络互联互通 |
| EIP |
弹性公网 IP,提供互联网入口 |
| NAT |
网络地址转换网关,私有网络访问公网 |
| ECS |
弹性云服务器,跑 Jenkins 和编译任务 |
| AS |
弹性伸缩,自动加减编译机器 |
| EVS |
云硬盘,持久化存储 |
| OBS |
对象存储服务,存编译产物 |
| DEW |
数据加密服务,保管签名证书和私钥 |
| KMS |
密钥管理服务,管理加密密钥 |
| VPC |
虚拟私有云,隔离编译环境 |
| VPCEP |
VPC 终端节点,不走公网访问云服务 |
| Perforce |
代码版本管理系统 |
| Jenkins |
构建流程调度控制器 |
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
评论(0)