DevOps / CI·CD 2026年3月31日

在雲端 Mac mini M4 上部署 GitHub Actions 自託管 macOS Runner(2026 實戰指南)

MacXCode 技術團隊 2026年3月31日 約 12 分鐘閱讀

GitHub 託管的 macos-latest Runner 很方便,但 iOS 團隊常遇到瓶頸:冷快取、發版週排隊、或必須把專有工具鏈留在磁碟上。在租用的 Apple Silicon Mac上部署自託管 Runner可獲得持久 DerivedData、可預期效能與區域選擇——尤其當機器位於港/日/韓/新/美且靠近開發者時。本文預設你已讀過Mac mini M4 租購 TCO,並準備把 GitHub Actions 接到可 SSH 的硬體上。

2026 年何時該用自託管 macOS Runner

  • 長時間 xcodebuild 流水線 — 熱快取每次都能省下數分鐘。
  • 自訂 SDK 或內部框架 無法上傳到 ephemeral Runner。
  • 合規 — 作業不離開合約約束下你控制的 Mac。
  • 並行發布線 — 每應用獨立 Runner 與隔離鑰匙串。
現實提醒:自託管 Runner 會執行儲存庫中的任意程式碼。請依生產伺服器標準加固——專用系統使用者、防火牆、輪換權杖與監控。

執行 ./config.sh 前的安全清單

控制項 建議
SSH 暴露面 僅金鑰登入、非預設埠、盡量 IP 白名單。
Runner 使用者 非管理員自動化帳號;僅在必要時 sudo。
金鑰 生產部署類 Job 使用 GitHub Environments + 必選審批人。
工作區 敏感儲存庫定期清理 _work 或每 Job 使用可丟棄目錄。

在 MacXCode 節點上的安裝流程

  1. SSH 登入 — 依租約郵件中的埠與使用者連線;確認已裝 Xcode CLT 或完整 Xcode。
  2. 建立目錄mkdir ~/actions-runner && cd ~/actions-runner
  3. 下載 Runner — 在 GitHub「Add runner」介面複製 macOS arm64 壓縮包位址(Settings → Actions → Runners)。
  4. 設定 — 使用短效權杖執行 ./config.sh --url https://github.com/ORG/REPO --token RUNNER_TOKEN
  5. Labels — 新增如 macxcode-m4ap-sgxcode16 等唯一標籤,便於 runs-on 命中正確池。
  6. 服務化./svc.sh install./svc.sh start,保證重啟後仍線上。

涉及 GUI 的步驟(如首次鑰匙串彈窗)可暫時使用 VNC,再回到無頭 GitHub Job——與雲端 Mac 上 SSH 與 VNC一文中的模式一致。

Workflow 片段範例

runs-on: [self-hosted, macxcode-m4]

在 setup 步驟用 DEVELOPER_DIRxcode-select 固定 Xcode。簽章資源放在 Runner 使用者的登入鑰匙串,並對 CI 使用 security set-key-partition-list。更完整的 Archive 流程見Xcode 遠端建置指南

GitHub 託管 vs 租用 M4 上的自託管

維度 GitHub 託管 自託管雲 Mac
上線時間 零基礎設施 一次性安裝 Runner
快取熱度 常冷啟動 持久磁碟
區域 選擇有限 可選港/日/韓/新/美節點
安全責任 GitHub 代管 需自行加固 SSH 與系統

常見問題

問題 回答
一個 Runner 能服務多個儲存庫嗎? 組織級可以,但請隔離金鑰;生產與實驗儲存庫建議分機。
GitLab 或 Jenkins 呢? 思路類似——仍是裸金屬 M4 + SSH;更換對應 Agent 安裝方式即可。
網路拓撲示意圖在哪? MacXCode 說明中心 的 SSH/VNC 範例。

為何 GitHub Actions 宿主仍選 Mac mini M4

Runner 長時間編譯 Swift;M4 效能核心與高速 NVMe 讓佇列延遲保持穩定。相較 oversized VM,Mac mini 閒置功耗低——工作流程夜間暫停但 Runner 仍需線上時尤其重要。MacXCode 在全球提供帶 SSH 與可選 VNC 的物理 Apple Silicon,與 GitHub 標籤預期一致,由你的自動化帳戶持有。

定價頁開通節點,完成安全清單並註冊 Runner,然後發出首個 workflow_dispatch——第二次建置你就能感受到差異。

在專屬 M4 上跑 GitHub Actions

裸金屬 · 全球節點 · 數分鐘內 SSH 就緒