可复用构建参考架构

看清云端 Mac 在每条交付链路中的位置

以下流程不是客户案例,也不代表未经验证的效果承诺。它们把触发者、独享物理机上的任务、签名责任、日志位置与产物去向拆开,便于团队按自己的仓库和权限模型复制。

5 套流程 覆盖构建、交付与实验任务
1 台独享节点 同一时刻按队列执行工作负载
4 类边界 代码、凭据、日志与产物分别管理
BUILD PASSPORT iOS Release / Main
RUN-042
01
代码提交 仓库事件触发运行任务
已接收
02
依赖与缓存 按锁文件恢复并记录命中
已完成
03
Xcode Archive 在独享物理机执行归档
执行中
04
检查与交接 验证签名后导出受控产物
待处理
批次队列 MAIN → RELEASE → HOTFIX 每个任务使用独立工作目录
签名健康检查 配置匹配 敏感资料由团队自行维护
示例使用方式

先确定责任边界,再复制自动化步骤

参考架构只描述任务如何流动。仓库权限、签名资料、开发者账户、发布审批和产物保留周期仍由使用团队定义。

环境可复现

固定 Xcode、Command Line Tools、依赖锁文件和清理命令。需要变更版本时,先在单独工作目录验证,再切换正式队列。

版本与锁文件

凭据不进仓库

令牌、证书和描述文件通过受控注入方式提供。日志只保留定位问题所需信息,输出前清理路径、令牌和私有仓库地址。

最小权限

产物有明确去向

Archive、导出包、符号文件和测试报告分别命名并附带提交标识。交接完成后按团队策略清理节点上的临时副本。

受控导出
APP 自动化打包

从提交事件到可审核产物的五段交接

这条链路适合把 CDNMac M4 注册为 self-hosted runner,由仓库事件启动任务,并把最终产物交给团队审核或后续分发系统。

01
代码提交 触发者:开发者或合并流程

主分支或发布标签触发队列。运行任务首先记录提交哈希、分支、触发者和目标 Scheme,不把敏感变量打印到日志。

去向:独享物理机的隔离工作目录
02
依赖恢复 触发者:运行脚本

依据锁文件恢复 Swift Package、CocoaPods 或其他依赖。缓存键至少包含锁文件摘要与工具版本,避免旧缓存跨版本污染。

去向:版本化缓存目录与依赖日志
03
Xcode Archive 触发者:构建任务

使用明确的 workspace、scheme、configuration 和 destination 执行归档。失败时保留退出码、关键日志和结果包。

去向:带提交标识的 Archive 目录
04
签名检查 触发者:发布任务

核对 Bundle Identifier、团队、证书有效性与描述文件匹配关系。开发者账户和签名资产始终由用户团队管理。

去向:审核清单,不输出明文凭据
05
产物归档 触发者:交接脚本

导出安装包、符号文件、构建摘要与校验值,再复制到团队控制的存储位置。确认交接后清理临时目录。

去向:受控存储与团队审核队列
多分支队列

一台独享物理机,三类分支按规则排队

独享不等于所有任务并行。对单台 CDNMac M4,更稳妥的做法是明确优先级、工作目录和清理边界,让发布任务与日常验证互不污染。

MAIN 持续验证

主分支

合并后执行单元测试、静态检查与基础 Archive。缓存可复用,但 DerivedData 按项目和 Xcode 版本隔离。

优先级
普通
工作目录
work/main
退出清理
删除未跟踪文件
RELEASE 交付候选

发布分支

进入队列后暂停同仓库的非必要任务,使用独立签名检查与导出配置,并要求团队审核产物摘要。

优先级
高
工作目录
work/release
退出清理
销毁临时密钥链
HOTFIX 人工放行

修复分支

由负责人确认后插入队列。只恢复解决问题所需的缓存,构建完成后回收临时变量并记录回滚基线。

优先级
人工确认
工作目录
work/hotfix
退出清理
恢复队列与基线
队列策略

发布任务不抢占正在写入产物的任务;失败任务先收集日志再释放工作目录;每个任务结束时都执行幂等清理。

MAIN RELEASE HOTFIX CLEAN
FLUTTER IOS

把跨平台依赖与 Xcode 阶段分开记录

Flutter iOS 的等待时间往往分散在依赖恢复、CocoaPods 和 Xcode 构建中。拆分阶段后,团队才能判断缓存是否有效,以及失败属于哪一层。

阶段边界

每一阶段输出独立日志和退出码。只有前一阶段通过,下一阶段才读取其产物,避免把依赖问题误判为 Xcode 编译问题。

  • Flutter SDK 与项目约束先校验版本。
  • 锁文件摘要进入缓存键。
  • Pods 与 Dart 缓存分开失效。
  • 导出包与符号文件分别交接。
01
依赖恢复

执行项目依赖恢复,记录 SDK 版本与锁文件摘要。

缓存:Dart 包目录
02
CocoaPods

依据 Podfile.lock 安装 iOS 原生依赖,不复用不匹配的 Pods。

日志:Pods 安装输出
03
Xcode 构建

使用明确的 workspace、scheme 与 configuration 执行 Archive。

产物:Archive 与结果包
04
产物导出

完成签名检查后导出,并生成提交标识与校验摘要。

去向:团队受控存储

缓存命中只说明对应目录和键值可复用,不代表完整构建一定更快。升级 Flutter、CocoaPods、Xcode 或锁文件后,应重新验证缓存边界。

TESTFLIGHT 交付

构建产物先经过团队审核,再进入分发流程

云端 Mac 负责生成和检查构建产物,但不会替代团队的发布审批。开发者账户、签名资产、版本资料与分发决定均由用户管理。

  1. 01

    生成候选产物

    发布分支完成 Archive 与导出,附带提交哈希、版本号、构建号、符号文件和校验摘要。

  2. 02

    执行团队审核

    负责人核对变更范围、签名匹配、隐私资料、权限用途和测试结果。未通过时回到对应提交重新构建。

  3. 03

    进入分发流程

    审核通过后,由团队控制的发布任务使用受限凭据处理上传,不在仓库或普通构建日志中保存敏感资料。

  4. 04

    记录交接结果

    保存产物标识、审核结论和必要日志。完成交接后清理节点上的临时导出文件和临时凭据。

CDNMac 节点承担 构建、归档、签名匹配检查、产物导出
用户团队承担 账户管理、签名资产、发布审批、分发资料与合规判断
APPLE SILICON AI 实验

验证模型兼容性,不把实验结果写成吞吐承诺

CDNMac M4 提供 M4、16GB RAM 与 256GB SSD。它适合进行本地模型兼容性验证和原型测试,但团队应先核对模型、上下文、数据与内存需求。

A

准备数据

只同步实验需要的数据子集,记录来源与版本。敏感数据先脱敏,并为原始数据、处理中间件和输出结果设置不同目录。

输入
版本化样本
回滚点
原始数据只读副本
B

验证运行环境

记录 macOS、运行时、框架与模型格式。先用小样本验证加载、推理和内存占用,再决定是否扩大实验范围。

检查
版本与内存余量
回滚点
固定依赖清单
C

导出结果

输出实验参数、结果摘要和必要日志,避免把完整敏感数据写入报告。租期结束前将必要结果复制到受控存储。

输出
参数、摘要与日志
边界
不承诺特定吞吐量
配置判断

如果模型、上下文和中间数据无法在 16GB RAM 内稳定运行,或需要未列出的芯片与内存配置,应先联系服务团队确认,不要把原型通过等同于生产容量验证。

咨询实验配置
团队复盘话术

把工作流价值说成可核对的工程事实

以下内容是可用于内部复盘的角色化表达示例,不代表特定客户评价、评分或公司背书。

“我更关心队列是否只服务当前团队,以及失败后能否留下可定位的日志。把工作目录和产物去向写清楚,比泛泛谈构建速度更有用。”

移动端负责人

“分支任务共享同一台物理机时,真正需要设计的是优先级、缓存键和清理策略。独享资源解决隔离基础,流水线仍要由我们定义。”

CI 平台工程师

“跨时区连接时,我希望远程访问、后台构建和产物导出彼此独立。这样本地网络短暂波动,也不会改变正在运行的构建任务。”

独立开发者
复制工作流

准备项、环境变量与失败回滚点

开始复制前,先建立最小可运行版本。环境变量名称可按团队规范调整,但敏感值不应提交到仓库,也不应直接输出到构建日志。

五套参考工作流的实施清单
工作流 准备项 环境变量清单 失败回滚点
App 自动化打包 仓库访问、Xcode 版本、Scheme、依赖锁文件、导出配置 REPO_REF
BUILD_SCHEME
EXPORT_PATH
保留结果包与提交标识,清理临时密钥链,回到上一个可构建提交
多分支构建 分支优先级、独立工作目录、并发限制、幂等清理脚本 BRANCH_NAME
RUN_PRIORITY
WORK_ROOT
停止后续队列,保存当前日志,恢复干净工作树与原队列顺序
Flutter iOS Flutter 版本、Podfile.lock、Xcode workspace、缓存键规则 FLUTTER_ROOT
PODS_CACHE_KEY
IOS_SCHEME
按阶段失效缓存,不删除可复用日志,从最近通过的阶段重新执行
TestFlight 交付 发布审批、版本资料、签名匹配、产物校验与团队受控凭据 RELEASE_VERSION
BUILD_NUMBER
ARTIFACT_PATH
停止分发任务,撤销临时凭据,返回审核清单并重新生成候选产物
AI 实验 模型格式、小样本数据、运行时版本、内存观察与导出目录 MODEL_PATH
DATASET_PATH
RESULT_PATH
保留参数清单与结果摘要,恢复固定依赖,回到只读原始数据副本
01 先跑最小任务

只保留一个仓库、一个 Scheme 和一个输出目标,确认节点能够完成完整闭环。

02 再接入敏感变量

通过受控方式注入最小权限凭据,并验证日志脱敏、过期和轮换流程。

03 最后扩展队列

加入更多分支前先设置优先级、超时、失败回收与工作目录清理规则。

把参考流程落到一台独享云端 Mac

先选择租期与节点,再按指南验证连接、Xcode 环境、仓库权限和第一个 Archive。实际可用状态与交付信息以控制台实时返回为准。