指南

在 Mac mini 上自架 GitHub Actions Runner

在獨享 Mac mini 上設定自架的 GitHub Actions Runner:安裝 Xcode、註冊 Runner、以服務方式執行,讓建置保持快速且私密。

30 分鐘,2026-09-15 更新

GitHub 代管的 macOS Runner 是共用機器。尖峰時段要排隊,每次都是冷啟動,而且按分鐘計費。

在您自己的 Mac mini 上自架的 Runner 會立即啟動,在兩次建置之間保留快取,每個月費用都一樣。

本指南大約需要三十分鐘。您需要:

  • 一台搭載 Apple silicon、可透過 SSH 存取的 Mac mini
  • GitHub 儲存庫或組織的管理員權限
  • 一個 Apple ID,用來下載 Xcode

1. 準備 Mac

透過 SSH 登入,並讓 Mac 不進入睡眠:

ssh
sudo pmset -a sleep 0 disksleep 0 displaysleep 0

安裝 Homebrew:

ssh
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

建議為 Runner 另外建立一個使用者,讓建置永遠不會以您的管理員帳號執行:

ssh
sudo sysadminctl -addUser runner -fullName "CI Runner" -password -

以該使用者身分登入,完成以下步驟。

2. 安裝 Xcode

透過 SSH 安裝,最簡單的方式是 `xcodes`:

ssh
brew install xcodesorg/made/xcodes
xcodes install --latest
xcodes select

接受授權條款並完成首次啟動:

ssh
sudo xcodebuild -license accept
xcodebuild -runFirstLaunch
xcodebuild -downloadPlatform iOS

3. 註冊 Runner

在 GitHub 開啟您的儲存庫,然後依序進入 Settings、Actions、Runners、New self-hosted runner。選擇 macOS 和 ARM64。

GitHub 會顯示確切的指令,包含目前的版本和一個權杖,看起來像這樣:

ssh
mkdir actions-runner && cd actions-runner
curl -o actions-runner-osx-arm64.tar.gz -L <download URL from GitHub>
tar xzf ./actions-runner-osx-arm64.tar.gz
./config.sh --url https://github.com/<owner>/<repo> --token <token>

權杖一小時後就會失效,所以請馬上註冊。`config.sh` 詢問標籤時,加上您會在工作流程中使用的標籤,例如 `xcode` 或 `m4`。

4. 以服務方式執行

ssh
./svc.sh install
./svc.sh start
./svc.sh status
GitHubYour repositoryActions queues the jobMac mini, our rackactions.runner service, launchdXcode, simulators, signing keychainIts own diskDerivedData, SwiftPM and CocoaPods caches stay warmthe runner dials out, HTTPS 443jobs and logs come back on itNothing listens on the Mac.No inbound port, no address to expose.
服務開始執行後,整個串接就是這樣。

現在 Runner 會隨使用者工作階段啟動。如果您的工作要執行 UI 測試或需要登入鑰匙圈,請在「系統設定」的「使用者與群組」中為 Runner 使用者開啟自動登入。您可以透過螢幕共享完成這一步。FileVault 開啟時無法使用自動登入。

5. 在工作流程中使用

.github/workflows/ios.yml
name: iOS build

on: [push]

jobs:
  build:
    runs-on: [self-hosted, macOS, ARM64]
    steps:
      - uses: actions/checkout@v4
      - name: Build
        run: xcodebuild -scheme MyApp -destination 'generic/platform=iOS Simulator' build

推送一個 commit。工作會出現在 Actions 下,並在幾秒內於您的 Mac 上開始執行。

6. 維持良好狀態

  • 只用於私有儲存庫。在公開儲存庫上,來自 fork 的 pull request 可以在您的 Mac 上執行程式碼。GitHub 建議不要在公開儲存庫上使用自架 Runner。
  • 偶爾清理一下。DerivedData 和舊的模擬器會隨時間越來越大:
ssh
rm -rf ~/Library/Developer/Xcode/DerivedData
xcrun simctl delete unavailable
  • 簽署。將憑證存放在專用的鑰匙圈中,或使用 fastlane match。
  • 更新。Runner 預設會自動更新。Xcode 請依您自己的時程更新,不要在發布進行到一半時更新。

為什麼選擇獨享 Mac mini

  • 沒有其他人在用。您一推送,建置就開始。
  • 快取常駐。DerivedData、Swift 套件和 CocoaPods 都留在磁碟上,增量建置快得多。
  • 真實晶片。在與您的使用者相同的 Apple silicon 上測試。
  • 每月固定費用。不按分鐘計費,忙碌的衝刺結束時也不會有意外帳單。

MacDuty 在歐盟的機櫃中提供 M1 到 M6 的 Mac mini,並已安裝 macOS。請在客戶專區加入您的 SSH 金鑰。

今天有現貨

這些 Mac 現在就在機櫃中。挑一台,看看它包含什麼,下單時再建立帳號即可。

正在查看機櫃

屬於您自己的 Mac mini

選擇配置。如果架上沒有,請留下電子郵件,上架當天我們就寫信通知您。

按年:比按月付款至少便宜 19%

  • 16GB

    統一記憶體,120 GB/s

    核心
    10 CPU, 10 GPU
    儲存空間
    可用
    有現貨
  • 最多人選
    24GB

    統一記憶體,120 GB/s

    核心
    10 CPU, 10 GPU
    儲存空間
    可用
    有現貨
  • 32GB

    統一記憶體,120 GB/s

    核心
    10 CPU, 10 GPU
    儲存空間
    可用
    有現貨
Visa Mastercard SEPA 轉帳價格以 EUR 計,如適用,增值稅於結帳時加計。 至少一個月,之後任何一個月都能終止。

下一步