資源池三類痛點(審批口徑可照抄)
- 簽章邊界不清:多人或多條 pipeline 共用登入工作階段,鑰匙圈解鎖與描述檔版本漂移,codesign 失敗難歸因。
- 併發與目錄互斥脫節:Xcode 或
xcodebuild平行寫入同一 DerivedData、同一 Pods 前綴或同一產物根,出現半寫入與隨機紅燈。 - 佇列參數口耳相傳:等鎖秒數、作業總逾時與 Runner 標籤不一致,殭屍任務占鎖拖垮整池;稽核缺欄位。
權限模型可搭配SSH/VNC 權限隔離實戰與選型 FAQ,把登入與簽章寫進章程。
對照表:SSH 工作階段隔離 vs Codesign 鑰匙圈分區
資源池常問「分了 SSH 使用者是否就夠」——下表供評審與 onboarding。
| 維度 | SSH 工作階段隔離 | 鑰匙圈/簽章分區 |
|---|---|---|
| 防護對象 | 登入身分、檔案屬主、遠端工作階段邊界 | 憑證與私鑰可見性、codesign 身分、描述檔綁定 |
| 典型作法 | 分帳戶或分角色憑證;Jump Host;禁共享私鑰 | 專用鑰匙圈檔或分區;CI 非互動解鎖;分環境描述檔 |
| 常見誤區 | 以為能 SSH 即可簽;同帳戶多工作階段混跑 | 把登入鑰匙圈當共享庫;缺輪換紀錄 |
併發上限、flock 與構建佇列(對照)
須與平台佇列同源設定,避免腳本串行而 Runner 仍平行超發。
| 策略 | 適用 | 參數直覺 |
|---|---|---|
| 強串行+flock | 單一 clone、共享 DerivedData、寫入全域工具鏈或安裝前綴 | 重型任務併發一;flock -w 30~60;佇列等待>5 告警 |
| 有限併發 | 多 worktree、獨立構建沙箱、唯讀快取命中高 | 重型一至二、輕量池二至四;與磁碟可用約 15% 紅線聯動縮容 |
| 平台佇列 | GitHub Actions、自研排程 | 標籤與腳本互斥一致;深度>10 擴容;見Runner 矩陣 |
Derived Data 路徑策略對照表
路徑策略影響排錯與快取命中,應寫入 README 與池內基線。
| 策略 | 優點 | 風險與緩解 |
|---|---|---|
| 系統預設 DerivedData | 設定少、上手快 | 多專案同根競爭;須嚴格併發清理;宜獨占節點 |
| 每倉/每 worktree 子路徑 | 責任面清晰、平行邊界好講清 | 磁碟漲得快;定期修剪與構建號日誌 |
| 共享唯讀模組快取+可寫沙箱 | 重複編譯省時間 | umask、屬主與鎖一致;見Worktree 與鎖檔矩陣 |
構建佇列逾時參數清單(可直接貼進 Runbook)
下列為資源池常見預設值,請依歷史P90~P95加餘量調整;與flock FAQ 內 pending 深度、flock -w 建議一併對齊。
| 項目 | 建議值/說明 |
|---|---|
| 等鎖逾時 | 30~60 秒;失敗入佇列或顯式重試,禁止無限阻塞 |
| 整合作業總逾時 | 常見45~90 分鐘分檔;archive 與 notary 另檔加長 |
| 階段逾時 | 依賴解析、編譯、簽章驗證分段計時;逾時殺行程樹並釋鎖 |
| 佇列告警 | 等待重型任務>5 黃燈、>10 紅燈;聯動暫停新進重型任務 |
- □ 構建號、帳戶、鑰匙圈分區寫入統一日誌欄位。
- □ 抖動先減併發再清半寫入,見穩定性 FAQ。
落地五步(資源池上線檢查)
- 畫互斥圖:標 DerivedData、依賴前綴、簽章與產物根及 flock 臨界區。
- 帳戶與鑰匙圈:構建帳僅持所需分區;描述檔分環境;記輪換負責人。
- 鎖與佇列同源:flock、Runner 併發、排程深度同一設定來源。
- 路徑基線:每倉或 worktree 構建根入文件;預設路徑須簽字。
- 演練雙開:平行兩路驗排隊與重試,禁靜默髒目錄。
資源池 FAQ(節選)
問:能否用登入使用者預設鑰匙圈跑 CI?
不建議。應專用鑰匙圈檔或分區,作業內明確指定,解鎖最小化。
問:xcodebuild 平行數與實體核心數怎麼對齊?
先滿足互斥與佇列再談核心數;能編譯不代表該平行。重型任務常一路或兩路。
問:逾時殺任務會壞鑰匙圈嗎?
一般不會;風險在半寫入目錄。殺行程後清沙箱或佇列重放乾淨副本。
小結與下一步
Xcode · Codesign · 資源池
用專用節點驗證簽章與佇列基線
Meshmac 提供多區域遠端 Mac 與 SSH/VNC;佇列與鑰匙圈分區寫清楚後,再談拉高併發。免登入可瀏覽與下單。
鑰匙圈分區
併發與佇列
逾時參數
Runbook 對齊