三类痛点(共享构建机)
- 无互斥:同目录并行安装或归档,半写入与缓存交错。
- 队列失控:无深度上限与可见等待,重复触发构建拖垮磁盘。
- 锁与超时脱节:僵尸任务占锁或崩溃留锁,队列僵死。
对比:强串行保障 vs 有限并发
看哪些资源必须互斥,哪些可隔离后并行。
| 维度 | 强串行保障 | 有限并发 |
|---|---|---|
| 场景 | 同克隆路径、共享 DerivedData、全局缓存、改工具链步骤 | 多 worktree、独立构建根、只读缓存为主、资源余量清楚 |
| 取舍 | 冲突少、排队长;重并发一、队列告警五至十 | 吞吐高、配置难;重一至二、轻池二至四、超时写死 |
FAQ:flock、队列与超时怎么配?
问:flock 锁什么?
锁约定锁文件(按仓或构建根),勿锁设备节点。flock包住安装、写产物根、清共享缓存等临界区;锁内尽量短。
问:等锁多久?
常见十余秒至六十秒;超时失败入队重试。队列侧盯等待任务数,过阈值错峰或加机。
问:作业总超时?
按历史九十分位加余量,集成常取四十五至九十分,归档另档;超时杀进程树并释放锁,日志带构建号。
可执行参数清单(直接抄进团队文档)
起步示例,写进团队公约即可审计。
| 项 | 建议值 / 写法 |
|---|---|
| flock | -w 30 或 -w 60;包装 bash -c 'set -euo pipefail; …';锁文件组内可写、定期清孤儿 |
| 队列深度 | 重任务等待 >5 告警、>10 加机或分时;展示排队位置 |
| 并发与超时 | 重任务 1~2(吃紧锁1);集成总超时 45~90 分档,归档另档;超时杀进程释锁 |
- □ 锁持有者写日志(构建号、用户、时间)。
- □ 队列与并发在 Runner 与脚本同源,防双轨超发。
- □ 磁盘可用低于一成五暂停新重任务。
落地五步
- 列互斥边界:安装、签名、写产物根等必须串行的命令。
- 统一 flock 封装:拿锁→执行→释放,一处模板全员复用。
- 队列加分池:重轻隔离,默认先进先出,发布期加权。
- 超时三层对齐:等锁、阶段、作业与监控同一套阈值。
- 双开演练:验证排队或显式失败重试,杜绝静默坏目录。
节点稳定性与冲突处理
抖动时先减并发、停新重任务,清半写入与孤儿锁;编排应回收僵尸,人工会话约定最长占用。连通性见稳定性 FAQ。多节点时把本文参数与 Runner 标签合并,避免脚本有锁而平台仍超发。