资源池三类痛点(审批口径可照抄)
- 签名边界不清:多人或多样本 pipeline 共用登录会话,钥匙串解锁与描述文件版本漂移,codesign 失败难归因。
- 并发与目录互斥脱节:Xcode 或 xcodebuild 并行写同一 DerivedData、同一 Pods 前缀或同一产物根,出现半写入与随机红屏。
- 队列参数口耳相传:等锁秒数、作业总超时与 Runner 标签不一致,僵尸任务占锁拖垮整池;审计缺字段。
权限模型见SSH/VNC 隔离实战,把登录与签名写进章程。
对照表:SSH 会话隔离 vs Codesign 钥匙串分区
资源池常问「分了 SSH 用户是否就够」——下表供评审与 onboarding。
| 维度 | SSH 会话隔离 | 钥匙串 / 签名分区 |
|---|---|---|
| 防护对象 | 登录身份、文件属主、远程会话边界 | 证书与私钥可见性、codesign 身份、描述文件绑定 |
| 典型做法 | 分账户或分角色证书;Jump Host;禁共享私钥 | 专用钥匙串文件或分区;CI 非交互解锁;分环境描述文件 |
| 常见误区 | 以为能 SSH 即可签;同账户多会话混跑 | 登录钥匙串当共享库;缺轮换记录 |
并发上限、flock 与构建队列(对照)
与平台队列同源,避免脚本串行而 Runner 仍并行。
| 策略 | 适用 | 参数直觉 |
|---|---|---|
| 强串行 + flock | 单克隆、共享 DerivedData、写全局工具链或安装前缀 | 重任务并发一;flock -w 30~60;队列等待大于五告警 |
| 有限并发 | 多 worktree、独立构建沙箱、只读缓存命中高 | 重一至二、轻池二至四;与磁盘可用一成五红线联动缩容 |
| 平台队列 | GitHub Actions、自研调度 | 标签与脚本互斥一致;深度大于十扩容;见Runner 矩阵 |
Derived Data 路径策略对比表
路径策略影响排障与缓存命中,写入 README 与池内基线。
| 策略 | 优点 | 风险与缓解 |
|---|---|---|
| 系统默认 DerivedData | 配置少、上手快 | 多项目同根竞争;需严格并发清理;宜独占节点 |
| 每仓 / 每 worktree 子路径 | 责任面清晰、并行边界好讲清 | 磁盘涨得快;定时修剪与构建号日志 |
| 共享只读模块缓存 + 可写沙箱 | 重复编译省时间 | umask、属主与锁一致;见worktree 矩阵 |
构建队列超时参数清单(可直接贴进 Runbook)
下列为资源池常见默认值,按历史九十分位加余量调。
| 项 | 建议值 / 说明 |
|---|---|
| 等锁超时 | 三十至六十秒;失败入队或显式重试,禁止无限阻塞 |
| 集成作业总超时 | 常见四十五至九十分分档;归档与 notary 另档加长 |
| 阶段超时 | 依赖解析、编译、签名校验分段计时;超时杀进程树并释锁 |
| 队列告警 | 等待重任务大于五黄色、大于十红色;联动暂停新重任务 |
- □ 构建号、账户、钥匙串分区写入统一日志字段。
- □ 抖动先减并发再清半写入,见稳定性 FAQ。
落地五步(资源池上线检查)
- 画互斥图:标 DerivedData、依赖前缀、签名与产物根及 flock 临界区。
- 账户与钥匙串:构建户只持所需分区;描述文件分环境;记轮换人。
- 锁与队列同源:flock、Runner 并发、调度深度同一配置源。
- 路径基线:每仓或 worktree 构建根入文档;默认路径要签字。
- 演练双开:并行两路验排队与重试,禁静默脏目录。
资源池 FAQ(节选)
问:能否用登录用户默认钥匙串跑 CI?
不推荐。应专用钥匙串文件或分区,作业内显式指定,解锁最小化。
问:xcodebuild 并行数与物理核数怎么对齐?
先满足互斥与队列再谈核数;能编译不等于该并行。重任务常一路或两路。
问:超时杀任务会坏钥匙串吗?
一般不会;风险在半写入目录。杀进程后清沙箱或队列重放干净副本。