指南

在 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

推送一个提交。作业会出现在 Actions 下,并在几秒钟内于您的 Mac 上开始运行。

6. 日常维护

  • 仅用于私有仓库。在公开仓库中,来自 fork 的拉取请求可以在您的 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 计,如适用,增值税在结账时加收。 至少 1 个月,之后任意一个月均可取消。

下一步