Bitbucket Pipelines macOS Runner:2026 企業上線標準

如果前序任務可以修改宿主機,Bitbucket Pipelines macOS Runner 就不應直接與其他信任等級的工作混跑;你應先採用專用可信節點、完成隔離與恢復驗收,再分批放量。這個判斷適用於把 macOS 節點接入 iOS CI/CD、簽名或正式發布流程的企業團隊。

這篇文章適合三類人:準備把 Bitbucket Pipelines 接入 iOS 構建與發布的企業 IT 負責人;需要驗收自託管 Mac 節點的平台工程團隊;以及正在評估固定或遠端 Mac 構建容量的技術總監與採購負責人。

01 宿主機隔離

macOS Runner 的關鍵風險,不是控制台上是否顯示「Online」,而是任務是否能在宿主機直接執行 Bash。官方的 macOS Runner 設定說明 應作為能力邊界的起點:Runner 可執行工作,但不等於每次工作都在全新、不可寫入的環境中執行。

假設某個前序任務把工具安裝到全域路徑、啟動常駐服務,或修改登入帳號的 Keychain。任務完成後,下一個工作可能讀到這些狀態。即使原始碼目錄已經清空,污染仍可能留在:

  • 工作目錄以外的工具與設定檔;
  • DerivedData、依賴快取與暫存目錄;
  • 殘留的背景程序、網路服務與排程;
  • 登入帳號的 Keychain、環境變數或 SSH 設定;
  • 前一項工作的歸檔檔案與簽名輸出。

你要把「平台自動清理」和「團隊自行負責的清理」分開記錄。只驗證工作區被刪除,不能證明宿主機已恢復到可重複狀態。

遇到不可信倉庫或外部貢獻程式碼時,應如何處理?
不要只依賴一段清理 Shell。把不可信工作送到獨立 Runner 池;測試、歸檔與正式簽名也應按信任邊界拆分。若任務必須具備較高的檔案、Keychain 或發布權限,就不應與一般測試共用同一台可寫入的 Mac。

注意: 清理是殘留控制,不是安全隔離。只要任務能在宿主機取得更高權限,清理失敗或遺漏一次,就可能影響後續工作。

02 路由與授權半徑

Runner 的範圍決定「誰可以呼叫這台 Mac」。Repository Runner 的授權半徑較窄,適合單一程式庫或單一產品線;Workspace Runner 可供工作區內多個程式庫使用,因此必須先確認哪些倉庫有資格使用它。註冊時可參考 新增 Runner 的官方流程,但不要把完成註冊誤當成完成授權設計。

建議至少建立以下節點池:

  • 一般測試池:執行單元測試、靜態分析和不涉及發布的工作;
  • 受控歸檔池:具備固定 Xcode、依賴和輸出留存規則;
  • 正式簽名池:只接受已審核的倉庫與分支;
  • 不可信工作池:不接觸正式憑證、發布權限或其他倉庫快取。

標籤必須表達信任邊界,而不是只表達硬體名稱。下列片段只保留路由驗收所需的最小結構:

pipelines:
  branches:
    main:
      - step:
          name: Archive
          runs-on:
            - self.hosted
            - macos
            - signing

實際標籤語法與可用標籤,應以 YAML Runner 路由文件及目前註冊介面為準。你要測試三種負面情況:錯誤標籤、目標節點忙碌、沒有匹配節點。每次都要確認工作是等待、失敗或被拒絕,而不是靜默轉到權限較高的節點。

Workspace Runner 要怎樣避免不同程式庫互相越權?
先限制 Workspace Runner 的可使用範圍,再以標籤劃分工作類型。對每個倉庫建立允許使用的節點池清單,並用一條故意使用錯誤標籤的流水線驗證拒絕結果。若無法提出倉庫、標籤、節點池三者的對應證據,就不應把它用於正式簽名。

03 環境可重複性

macOS、Xcode、SDK、依賴工具與執行帳號必須形成一份可核對的環境基線。Xcode 命令列工具的可用指令與行為,應對照 Apple 官方命令列工具參考確認;不要只保存一張桌面截圖或一個模糊的「最新版本」標籤。

每台候選節點至少要記錄:

  • macOS 與 Xcode 的實際版本;
  • SDK、Swift/Objective-C 工具鏈和套件管理器狀態;
  • 執行帳號、Shell、環境變數和權限;
  • 依賴解析來源、快取位置與失效條件;
  • 可用的 Apple Silicon 架構與必要的模擬器配置;
  • 清理前後的工作目錄、DerivedData 和背景程序狀態。

Bitbucket macOS Runner 能否用於 iOS 發布?
可以,但前提是發布任務被送到受控的專用節點,並通過簽名、清理、權限和恢復驗收。Runner 能執行工作,不代表 Xcode 環境、Apple 憑證、輸出保管和取消任務處理已達到發布要求。

用同一個提交執行重複構建,至少觀察四項證據:依賴是否重新解析、快取是否命中、產物是否符合團隊定義的一致性、清理後重新執行是否仍可完成。不要把 Linux 或其他雲端 Pipeline 的設定直接複製到 macOS;檔案路徑、Keychain、Xcode 工具和簽名流程都可能不同。

04 憑證與簽名邊界

Runner 註冊憑證、程式碼存取憑證、Apple 簽名材料與發布權限必須分開管理。Bitbucket 的 變數與密鑰文件可用於核對秘密注入方式,但秘密不應直接寫入倉庫、YAML 或通用 Shell。

簽名材料的驗收重點不是「能否成功打包」,而是生命周期是否可追蹤:

  1. 憑證如何匯入;
  2. 哪個帳號可以使用;
  3. 任務完成後如何清除;
  4. 何時輪換;
  5. 發現外洩時如何撤銷;
  6. 誰可以查閱操作記錄。

Apple 對程式碼簽名憑證的結構與信任關係,可參考 TN3161 技術說明;發布產物則應按 Apple 的簽名文件核對實際流程。

你要特別驗證不同標籤、不同倉庫的任務無法讀取其他節點池的 Keychain、環境變數、快取和歸檔產物。若簽名池的工作可以看到一般測試池殘留資料,這不是清單上的小缺口,而是正式放量的阻斷項。

經驗: 「密鑰沒有出現在日誌」只代表一種洩漏路徑被遮蔽。你仍須驗證檔案、程序、快取、歸檔目錄和取消任務後的清除結果。

05 恢復與併發能力

無人值守恢復必須用故障注入驗證,而不是查看服務啟動項目。你應分別測試 Runner 程序退出、Runner 離線、Mac 重啟、網路中斷和任務取消。每項測試都要記錄事件時間、日誌、重新連線狀態、遺留程序與下一項任務的接單結果。

自託管 Runner 離線後怎樣判定已恢復?
不能只看狀態重新顯示線上。你還要確認它能接收預期標籤的工作、未重播被取消的任務、沒有帶入上一項工作的檔案與憑證,並能在無人登入桌面的條件下完成必要服務啟動。排隊和並行行為應對照官方併發與步驟佇列說明核對。

容量也不能按開發者人數或晶片宣傳參數直接採購。你需要從實際任務取得:

  • 構建時長分布;
  • 歸檔與簽名工作的峰值佇列;
  • 每個節點可接單的有效產能;
  • Xcode 或依賴下載造成的等待;
  • 節點故障時剩餘池的承載能力;
  • 恢復期間允許的佇列延遲。

放量條件分支

  • 工作可修改宿主機,且沒有專用節點與清理證據,回退到隔離的非生產節點,不得進入正式簽名。
  • Workspace Runner 的授權倉庫、標籤和拒絕測試均有記錄,可進行受控歸檔;否則改用 Repository Runner。
  • 清理、憑證撤銷、重啟和網路中斷測試全部通過,先限量放量;任一項失敗就退回整改。
  • 峰值佇列與故障冗餘尚未由真實任務證明,不要按預估團隊規模直接增加 Mac 節點。
  • 發布任務需要物理介面、特殊周邊或本地人工操作,先保留本地設備方案,不要強行改成遠端 Runner。

06 生產驗收決策表

以下表格用於決定節點應停留在哪個階段。它不是安裝清單;每個「通過」都必須附上日誌、設定快照、任務輸出或存取記錄。

驗收指標 通過條件 失敗處置 放量判斷
宿主機隔離 工作目錄外無未授權修改、無殘留服務與敏感檔案 移出共享池,重新設計隔離 可進入試點
標籤路由 正確標籤命中指定節點,錯誤標籤不會升級路由 檢查 YAML、Runner 範圍與授權清單 可限量使用
環境基線 macOS、Xcode、SDK、依賴和帳號均可核對 鎖定版本並重建節點 可進行重複構建
簽名安全 憑證分離、使用可審計、任務後清除、可撤銷 撤下正式簽名權限 不得正式發布
故障恢復 程序退出、重啟、離線、斷網和取消後可按預期恢復 保留人工接管,修復啟動與清理流程 通過後才可放量
容量與冗餘 真實任務、峰值佇列和故障場景均有證據 增加節點或降低工作負載 決定正式規模

固定節點與遠端 Mac 的取捨

決策維度 自行購入並維護 Mac CALMVPS 遠端 Mac 節點
初期資本支出 需一次承擔硬體、配件與部署成本 按選定週期配置,避免先購入完整硬體
容量調整 增購、交付、安裝和盤點均需 IT 工時 適合先以隔離節點驗收,再按專案增加容量
維運責任 由團隊處理故障、重啟、零件與現場管理 適合把遠端主機維護交由服務方處理,但流水線權限與清理仍由你驗收
長期負載 適合長期穩定使用、需要實體介面或固定周邊的工作 適合臨時構建、試點、跨地區團隊和容量彈性需求
企業審查 需自行準備資產、機房、存取與維護證據 仍需核對交付方式、遠端重啟、資料處理和內部合規要求

對企業來說,當前的自購方案常見缺點是資本支出先發生、容量擴充速度受採購流程限制,而且故障重啟、硬體盤點和 macOS 環境維護會持續佔用 IT 人力。若你現在缺的是可審核的試點節點或短期構建容量,CALMVPS 的遠端 Mac 更適合先承接這一段工作;你仍應依本文驗收隔離、憑證清除與恢復能力,而不是因為遠端形式就跳過生產准入。

建議你先在隔離的 Mac 節點跑一條非生產流水線,保存路由、清理、簽名和故障測試證據。若共享環境、憑證清除與無人值守恢復均已通過,再評估固定節點或 CALMVPS 的遠端 Mac 方案;如果工作是長期穩定的高負載,或必須接觸實體介面,自購設備可能仍更合理。你也可以先查看 CALMVPS 的方案與週期資訊,再按驗收結果決定容量,而不是先把正式發布任務一次性遷移過去。