多 Job 同機 codesign 常見三條衝突線:Keychain 解鎖與分割列表互相踩、Provisioning Profile 依 UUID 落碟被並行改寫、共用 DerivedData 與輸出樹造成快取污染。把身分、授權、工作區拆開,才能把並行度寫進容量表。資源池見 企業 Mac CI 資源池選型;併發矩陣見 GitHub Actions 多機協作手冊。
一、衝突面:並發 codesign 在爭什麼
Keychain 決定憑證可讀性,解鎖逾時會讓整批簽章排隊;Provisioning Profile 在系統與私有目錄並存時仍可能 race。工作區若共用 -derivedDataPath 或 IPA 樹,增量索引會互相覆寫。先指定 Owner;身分沙箱、Profile 私有路徑、一 Job 一路徑前綴。
二、Keychain 與 Profile:兩種常用檔位
Runner 級:每 Runner 獨立 macOS 使用者,鑰匙圈長期保存、輪換簡單,但帳號治理成本高。Job 級:流水線內建暫存鑰匙圈、匯入 p12、設定分割列表後刪除;吞吐高但腳本須冪等。Profile 複製到 Job 私有目錄並在 xcodebuild 或 exportOptions.plist 明確指定;清理以 UUID 精準刪除。
三、工作區與落地步驟
以 Job ID 作目錄前綴,包住原始碼、DerivedData、簽章暫存與 IPA;always() 做冪等清理。簽章路徑不可跨 Job 共用;遠端快取與可寫簽章樹分層。
- 寫死 Keychain 檔位、解鎖逾時與分割列表命令,並在壓測日誌驗證。
- Profile 私有路徑+精準清理;
xcodebuild強制獨立-derivedDataPath。
四、對比 FAQ(精簡)
- 能共用登入鑰匙圈嗎?多 Job 並發不建議;改分使用者或暫存鑰匙圈。
- 自動簽章還要隔離 Profile 嗎?要,磁碟解析與快取仍可能競態。
- 先並行還是先隔離?隔離優先。
在 Mac mini 上把簽章池跑穩
企業 Mac CI 資源池多半長時間、無人值守、I/O 敏感。macOS 與 Xcode 版本一致能壓低簽章與編譯的偶發長尾;Mac mini 的 Apple Silicon 記憶體頻寬利於多 Job 並行,待機約 4W 適合 7×24 池化。Gatekeeper、SIP、FileVault 疊出安全邊界。
Runbook 定稿後若要驗節點,可先打開 Macstripe 首頁對照區域。Mac mini M4 仍是 2026 年擴容簽章池的高性價比起點;隔離做對,再讓並行度用資料說話。