新品 Mac mini M6 现已开售 12 核 CPU,US$280/月 了解详情

macOS CI/CD · 自托管构建机

一台专属的 macOS 构建机,接入你现有的 CI

把独享的 Mac mini 接成 GitHub Actions、GitLab、Jenkins 的自托管构建节点。固定月费、不按分钟计费,不用排队,构建缓存一直留在本机,越用越快。

.github/workflows/ios.yml 在你的 Lumio Mac 上运行
name: iOS Build
on: [push, pull_request]
jobs:
  build:
    # 任务会派发到你自己的 Mac mini
    runs-on: [self-hosted, macOS, ARM64]
    steps:
      - uses: actions/checkout@v4
      - run: xcodebuild -scheme App test \
          -destination 'platform=iOS Simulator,name=iPhone 16'

三步接入 GitHub Actions

以 GitHub Actions 为例,开通后十几分钟就能让这台 Mac 开始跑构建。其他 CI 平台的流程也类似。

  1. 1

    登录你的 Mac

    付款后系统自动开通,一般 15–30 分钟即可使用,在客户中心拿到 IP 和账号,用 SSH 登录。

    ssh macuser@<your-mac-ip>
  2. 2

    注册 runner

    在仓库的 Settings → Actions → Runners 新建一个 macOS runner,按页面给出的命令下载并注册。

    ./config.sh --url https://github.com/<org>/<repo> \
      --token <TOKEN>
  3. 3

    设为后台服务

    把 runner 安装成系统服务,机器重启后也会自动上线,工作流里写 runs-on: self-hosted 即可。

    ./svc.sh install
    ./svc.sh start

支持主流 CI 平台

你拥有完整的 root 权限,任何能在 macOS 上运行的构建代理都能装。下面是最常见的几种。

GitHub Actions

自托管 runner

官方 runner 原生支持 macOS 和 Apple 芯片,注册后默认带 self-hosted、macOS、ARM64 标签。

./config.sh && ./svc.sh install

GitLab CI

GitLab Runner

用 Homebrew 安装 GitLab Runner,选择 shell 执行器注册到你的项目或群组,iOS 构建直接调用 Xcode。

brew install gitlab-runner

Jenkins

SSH 代理节点

装好 Java 后,在 Jenkins 里把这台 Mac 添加为 SSH 代理节点,打上 macos 标签分配 iOS 任务。

brew install openjdk

Buildkite

Buildkite Agent

用 Homebrew 安装 Buildkite Agent,填入 agent token 后即可接收流水线任务。

brew install buildkite/buildkite/buildkite-agent

自托管 Mac 还是云端共享构建机?

两种方式各有长处。构建越频繁、项目越大,自托管 Mac 的优势越明显。

Lumio 自托管 Mac

  • 计费固定月费,跑多少次构建都一样
  • 排队机器只给你用,任务来了马上开始
  • 缓存依赖、DerivedData 和模拟器留在本机,下次构建直接复用
  • 环境Xcode 版本、工具链和证书都由你决定
  • 扩容需要更多并发时再加一台 Mac

云端共享 macOS 构建机

  • 计费按构建分钟计费,macOS 分钟单价通常明显高于 Linux
  • 排队高峰期可能要排队等空闲机器
  • 缓存每次都是全新环境,缓存需要额外上传下载
  • 环境使用平台预装的镜像,Xcode 版本跟着平台更新
  • 扩容并发可以弹性增加,不用自己维护机器

让 Mac 构建机跑得更稳

几条实用建议,能少踩很多坑。

  • 固定 Xcode 版本

    用 xcode-select 或 xcodes 管理多个 Xcode 版本,在流水线里明确指定,避免系统更新后构建突然失败。

  • 处理好签名钥匙串

    为 CI 单独建一个钥匙串存放证书,构建前用 security 命令解锁,或者用 fastlane match 统一管理证书。

  • 定期清理磁盘

    DerivedData、旧模拟器和构建产物会越积越多,可以设一个定时任务定期清理,避免硬盘写满导致构建失败。

  • 单独的 runner 用户

    建议用专门的系统用户运行构建代理,和日常登录的账号分开,权限更清楚,也更安全。

macOS CI/CD 构建机常见问题

把 Mac 接入 CI 之前的常见疑问。

一台 Mac 能同时跑几个构建任务?

一个 runner 同一时间跑一个任务。可以在同一台 Mac 上注册多个 runner 实现并发,但 Xcode 编译很吃 CPU 和内存,16GB 内存的机器一般建议同时跑 1–2 个 iOS 构建。

公开仓库可以用自托管 runner 吗?

不建议。GitHub 官方提醒,公开仓库的 Pull Request 可能在自托管 runner 上执行任意代码。自托管 runner 最好只用于私有仓库,或者开启需要审批才运行的设置。

机器重启后 runner 会自动上线吗?

会。按官方方式把 runner 安装成系统服务(GitHub 用 svc.sh,GitLab 用 brew services),开机后会自动启动并重新连接。

能做 iOS 签名和上传 TestFlight 吗?

可以。把你自己的证书和描述文件放进构建机的钥匙串,配合 fastlane 或 xcodebuild 就能自动签名、打包并上传到 App Store Connect 和 TestFlight。

选哪个套餐跑 CI 比较合适?

小团队从 M4 Essential 起步就够;缓存多、需要多个 Xcode 版本选 M4 Core(512GB);编译时间是瓶颈的大型工程选 M6。

可以按需临时加机器吗?

可以。套餐按月付费,需要更多并发时再下单一台,新机器付款后 15–30 分钟自动开通,注册成新的 runner 就能分担任务。

给你的流水线一台专属 Mac

独享 Mac mini,US$160/月起,付款后 15–30 分钟自动开通,开通后十几分钟就能接入 CI。

查看 Mac 套餐