06
第五步:用真实试点数据决定采购、租赁还是继续托管
建议用一条非生产流水线完成 2 个阶段的试点,而不是直接切换正式发布。
第一步:锁定可复现的构建样本
选择最近一个月中具有代表性的 iOS 项目,保留依赖文件、Xcode 版本、测试目标、签名模式和产物上传步骤。至少准备普通 Debug、Release、模拟器测试和真实签名 4 类任务。
第二步:建立 3 个 Agent Pool
分别创建托管 Apple Silicon 池、隔离的自托管 Mac 池和生产签名池。不要让生产签名池承担 PR 构建,也不要让外部代码进入拥有内部网络访问权的自托管节点。
第三步:固定 YAML 路由和镜像标签
将 pool、vmImage、Xcode 版本和依赖缓存策略写进模板,避免某个项目开发者通过局部 YAML 修改绕过审批。对托管资源记录实际可用区域、镜像版本、任务启动时间和队列变化。
第四步:记录 6 类证据
每次构建至少保存:
- 构建是否成功,以及失败原因;
- 排队时间与实际执行时间;
- Xcode、macOS、Swift 和依赖版本;
- 签名资产是否只出现在指定节点;
- 内部网络访问是否符合白名单;
- 失败后能否远程重启、清理或恢复 Agent。
第五步:计算有效分钟,而不是只看总分钟
将依赖安装、缓存恢复、签名准备、构建、测试、产物上传分别计时。对于失败重跑,单独记录是代码失败、镜像变化、网络超时,还是 Agent 状态问题。
第六步:设置重新评估节点
Xcode 27 正式发布、Apple Silicon 托管 Agent 转为 GA、预览暂停、镜像标签调整、支持地区变化或价格变化时,都应重新执行兼容性和成本核算。本文不采信未经官方确认的正式发布日期、SLA 或性能提升数字。
试点结束后,可以按以下准入条件做决定:
- 继续扩大托管:非签名任务成功率稳定,网络和数据驻留满足要求,队列不会影响交付窗口。
- 采购或租赁自托管 Mac:生产签名、私有网络或固定缓存是刚性要求,且维护工时可被团队承受。
- 采用混合池:生产与网络受限任务需要固定基线,PR 和发布高峰又存在明显波动。
- 暂缓迁移:Xcode 27 兼容性尚未稳定,托管 Agent 可用区域或账单条件无法证明,或者签名隔离无法通过安全评审。
如果团队决定先做自托管试点,可以把一台隔离的远程 Apple Silicon Mac 接入专用 Agent Pool,随后根据构建和队列记录调整固定容量。与一次性采购相比,远程租赁的优势是减少前期设备占用和异地运维,但长期稳定高负载、需要本地物理接口或必须完全掌控硬件生命周期的团队,仍可能更适合自购设备。VNCMac 可作为这类试点的远程 Mac 资源入口;若需要比较不同地区的可用主机,可以查看 Mac 主机采购与使用选项。
最终判断不是“托管一定便宜”或“自托管一定安全”。托管 Agent 解决的是临时容量和环境隔离,自托管 Mac 解决的是签名、网络、缓存和恢复控制;对多数需要 Xcode 27 的企业 iOS 团队,生产自托管基线加托管弹性容量仍是 2026 年更稳妥的起点。先从一台隔离的 VNCMac Apple Silicon Mac 开始,收集真实流水线数据,再决定固定容量与弹性容量的比例。