在并发切片、混池公平与预约/抢占/冷静期之后,下一类痛点往往是标签混沌:各仓库随手写 macos-12、self-hosted 或 m4,没有命名空间,编排器无法推理饥饿、继承与爆炸半径。本文把独占 Mac mini M4 池上的标签视为治理原语:三层前缀命名空间、从组织到仓库的显式优先级继承、以及老化、公平份额与次级排空队列等饥饿防护。文内含两张矩阵、八步落地清单与可供审计的对照表述。
并发与公平见 并发切片与 CI/Agent 公平性;macOS/Xcode 钉扎见 升级窗口与漂移检测;可调度节点见 可调度 Mac 节点;并行分片见 并行构建分片。加机参考 定价与区域,连接见 帮助文档。
标签命名空间矩阵(前缀、负责人、生命周期)
| 前缀 | 含义 | 谁可定义 |
|---|---|---|
nm-org/<id>/ |
全池级池型(如重编译、仅 UI) | 仅平台 SRE |
nm-team/<slug>/ |
从 org 池切给团队的容量 | 团队负责人 + SRE 审批 |
nm-repo/<gh-org>/<name>/ |
仓库级实验或发布列车 | 维护者在团队配额内 |
新工作流应对无前缀 runs-on 做 CI Lint 拒绝。存量仓库可设六个月宽限期并挂违规看板;期满后合并默认分支必须迁移。目的不是咬文嚼字,而是让「谁可以从谁那里抢容量」能从 Git 历史回答,而不是翻 Slack。
优先级继承矩阵(生效优先级顺序)
| 来源 | 默认权重 | 覆盖规则 |
|---|---|---|
| 组织策略 YAML | 基线 P3 | 安全补丁可凭工单升至 P1 |
| 团队策略 | 继承组织;最多上调 1 档 | 非事故工作不得突破组织封顶 |
| 仓库工作流注解 | 继承团队;发布标签最多再 +1 | 功能分支封顶为团队基线 |
饥饿触发器:若某标签等待 p95 连续 72 小时高于全池中位数 2 倍,而高优流量仍满足 SLO,则启用老化:每排队 30 分钟虚拟优先级 +1,封顶不超过团队上限。
除「抬优先级」之外的饥饿防护
- 公平份额令牌桶:每团队按标签族每小时补充令牌;可突发,持续超用则自动下调有效优先级。
- 次级排空队列:长等待作业夜间迁入低噪声池,避免平均值掩盖长尾。
- 标签亲和上限:限制单仓库标签在
nm-org/*-heavy上同时占用重槽数量,防止单 monorepo 钉死整片重载切片。
八步落地清单
- 冻结面向 Mac 的新工作流中无前缀标签(默认分支 CI)。
- 从编排器 API + 近 30 天
runs-on扫描生成清单。 - 将每条标签映射到命名空间层级;标出两团队共用同串的冲突。
- 在单一仓库发布继承 YAML;调整优先级封顶须 SRE + 产品安全双审。
- 在预发以夸张阈值启用老化,观察副作用。
- 看板按命名空间展示等待,而非仅全局 p95。
- 演练全组织事故优先级翻转,确认仓库无法永久占 P1。
- 季度审计抽检 50 条工作流查漂移,违规自动开单。
与预约合同如何咬合
预约解决权利,命名空间解决寻址,优先级解决权利内的排序。只有预约没有命名空间时,团队会把「假命名空间」写进隐秘 Runner 名;只有命名空间没有饥饿防护时,低优维护仓库会在产品冲高时数周得不到执行。请把公平性、预约与本标签指南链到同一内部入口,方便新人一次读完一整套机制。
常见反模式
放任开发者任选 GitHub 托管串;在生产标签里用 emoji 或地域昵称;无继承封顶只写 priority: high;因「我们作业快」而禁用老化;因全局仪表盘好看而砍掉次级队列。这些都会在并购集成或依赖大升级时把隐形队列炸成全员 on-call。
在改动生产编排器前,可用短期租用的 Mac mini M4 重放标签风暴。NodeMac 在香港、日本、韩国、新加坡与美国提供带 SSH/VNC 的专用 Apple Silicon 节点,便于用抓包轨迹演练策略而不连坐共享池。