決策矩陣 · 團隊 CI

2026年小團隊共享遠端 Mac 決策矩陣:GitHub 合併佇列、共享 Runner 標籤路由、併發鎖與逾時參數清單

2026.04.11 Meshmac 約 7~9 分鐘閱讀

共享遠端 Mac 上,常把GitHub 合併佇列(主幹預合併驗證)與 自託管 Runner 的實體等待混為一談。本文拆開兩條控制平面,附決策矩陣參數清單(佇列深度、標籤、併發鎖、flock/逾時、搶佔)。協作脈絡:多節點 Mac 網格Codespaces 與直連;Runner 基線:標籤路由矩陣

① 兩條佇列、同一台機器

合併佇列管「誰能合併、在最新預設分支上是否仍綠燈」,降低主幹邏輯衝突。Runner 標籤管「job 派到哪台遠端 Mac」,只是篩選器,不做跨庫公平配額。

兩者並行時,延遲多半由 Runner 主宰(Xcode、archive、模擬器、簽章)。佇列深度健康卻長期 Queued,先查標籤與硬體,勿只調 GitHub 端旋鈕。wiki 請同頁畫出佇列名稱/平行度/必要檢查與標籤圖。

② 決策矩陣:合併佇列 vs 標籤路由

下表用來選主要控制平面。成熟團隊通常兩者並用:合併佇列顧主幹,標籤顧構建機與 Xcode 釘選;每週釋出或更高頻時,「並用」列可視為預設建議。

取向 最適合 主要風險 在共享 Mac 上的緩解
合併佇列優先 合併頻率高、主幹完整性要求嚴、多人共用單一預設分支。 佇列項目帶來額外 CI 回合;Runner 飽和時像「雙重等待」。 限制併列平行構建數、對齊必要檢查,並讓佇列 workflow 打到 ci-merge有容量背書的標籤。
標籤路由優先 合併頻率低、工具鏈變體多、須嚴格釘選 Xcode/SDK。 主幹仍可能因邏輯衝突而斷在合併佇列能攔下的情境。 預設分支啟用合併佇列;標籤專責工具鏈隔離。
兩者並用(規模化建議) 共享遠端 Mac 池同時服務 PR 與主幹檢查;發版需要可預約槽位。 政策發散:逾時或併發鍵重複、難以稽核。 統一命名 concurrency: 群組、文件化搶佔規則,並把閾值鏡射到下節參數表。
僅主機 flock、無佇列紀律 單一重度互斥(例如簽章)在同一台機器。 遮蔽 GitHub 端可觀測的平行度;卡鎖會拖住不相關 workflow。 flock 必配牆鐘逾時與告警;優先加節點再拉長關鍵區。細節見flock 構建佇列 FAQ

③ 參數清單(可抄)

下列數字為起點基線,請依實測等待時間、磁碟餘裕與簽章約束調整;重點是可維運:每個參數都應有負責人、文件與儀表板可見度。

參數 建議起點 備註
合併佇列深度/平行度 重度 Xcode 每池 1~2 個平行構建;僅在 CPU/磁碟指標有餘裕時試 3 深平行會放大完整重編成本;留意檢查項意外扇出。
Runner 池待處理深度(告警) 同一組標籤 pending 約 15~25 筆警告;約 40 筆以上升級為 paging 級別 標籤不做公平排程;應監控「建立→指派」等待分位數。
Runner 標籤(示例) self-hostedmacOSarm64xcode-16-2ci-prci-mergeci-release ci-merge 與雜訊型 PR 檢查分開,避免合併佇列餓死在可選 workflow 後面。
Workflow concurrency(併發鎖) PR:group: ${{ github.workflow }}-${{ github.ref }}cancel-in-progress: true;發版 archive:false 多 workflow 互碰同一資源時,可再加共享 org/repo+trunk 互斥群組。
flock 關鍵區 每條鑰匙圈路徑上簽章/公證同時僅一車道;鎖檔放在文件化的 CI 卷或 /var/tmp 必與下列逾時同開;記錄鎖持有者 id。模式見佇列與鎖 FAQ
Job timeout-minutes PR 編譯:30~60;archive/匯出:90~120;佇列重驗與 PR 同級,除非差異極小可縮短 用 p95 而非最佳案例調整;較短逾時可回收卡死 worker。
Shell timeout(GNU/BSD) 網路呼叫包一層:120~300 秒;上傳步驟:300~600 避免 curl 懸掛直到整個 job 逾時。
搶佔規則(優先序) PR 檢查 < 可選夜間 < 合併佇列 < 發版;不搶佔簽章互斥持有者 以標籤與併發群組編碼優先權;政治上難分時搭配負載與故障轉移拆池。

④ 在池化 Mac 上組合政策

觀測:佇列等待 p95、Runner 忙碌分鐘、合併耗時。佇列短、Actions 久 Queued → 先加節點或拆標籤。佇列久、Runner 閒 → 查必要檢查標籤、merge_group 過濾、組織併發是否餓到主幹。

每池一頁手冊:標籤圖、佇列名、併發鍵、flock 路徑、逾時表。入口:首頁購買頁(免登入)。

⑤ FAQ

合併佇列 job 要跟 PR 用同一組標籤嗎?
可共用工具鏈標籤(例如 xcode-16-2),但不要與高雜訊可選檢查共用容量標籤。為佇列與發版保留 ci-mergeci-release 後綴,路由語意才清楚。

兩個儲存庫搶同一台 Mac,第一顆旋鈕轉哪?
先依產品線或 SKU 拆 Runner,再收緊 concurrency。路由誠實之前,調高併列平行度只會把延遲推回審查節奏,治標不治本。

下一步:擴節點與升級套餐

參數對齊仍排隊 → 為 ci-mergeci-release獨立節點或升級團隊套餐,避免與實驗 workflow 搶殘量。購買頁免登入)、首頁幫助中心;協作延伸:部落格列表團隊同步

合併佇列 · 共享 Runner

在佇列變深之前擴池:節點與套餐一次看清

Meshmac 支援多區遠端 Mac;當 mutex 與 Runner pending 反覆觸線,以加節點或升級套餐分流 ci-mergeci-release 比再縮逾時更有效。

合併佇列 標籤路由 併發/flock 多節點擴容
瀏覽方案・免登入