指南
在 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 进入睡眠:
sudo pmset -a sleep 0 disksleep 0 displaysleep 0安装 Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"建议为 Runner 单独创建一个用户,这样构建永远不会以您的管理员账户运行:
sudo sysadminctl -addUser runner -fullName "CI Runner" -password -以该用户身份登录,完成以下步骤。
2. 安装 Xcode
通过 SSH 安装,最简单的方法是 `xcodes`:
brew install xcodesorg/made/xcodes
xcodes install --latest
xcodes select接受许可协议并完成首次启动:
sudo xcodebuild -license accept
xcodebuild -runFirstLaunch
xcodebuild -downloadPlatform iOS3. 注册 Runner
在 GitHub 中打开您的仓库,然后依次进入 Settings、Actions、Runners、New self-hosted runner。选择 macOS 和 ARM64。
GitHub 会显示具体命令,包含当前版本和一个令牌,类似这样:
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. 作为服务运行
./svc.sh install
./svc.sh start
./svc.sh status现在 Runner 会随用户会话一起启动。如果您的作业要运行 UI 测试或需要登录钥匙串,请在系统设置的用户与群组中为 Runner 用户打开自动登录。您可以通过屏幕共享完成这一步。FileVault 开启时无法使用自动登录。
5. 在工作流中使用
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 和旧模拟器会随时间不断变大:
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%
下一步