指南

从 Cirrus Runners 迁移到独享 Mac mini

Cirrus Runners 不再接受新客户,现有合同也将陆续到期。将您的 macOS GitHub Actions 任务迁移到独享 Mac mini,可以原生运行,也可以使用相同的 Tart 镜像。

60 分钟,2026-09-15 更新

2026年4月,Cirrus Labs 宣布加入 OpenAI。Cirrus CI 已于 2026年6月1日停止运行任务。Cirrus Runners 不再接受新客户,现有客户的支持也仅持续到其当前合同结束。

如果您的 macOS GitHub Actions 任务运行在 Cirrus Runners 上,就需要在该日期之前为它们找到新去处。本指南介绍将它们迁移到独享 Mac mini 的两种方法,以及如何在两者之间选择。

两种迁移方法

方案 A:原生 Runner。GitHub Actions Runner 直接运行在 macOS 上。这是最简单的配置,构建最快,缓存在任务之间保持预热。

方案 B:Tart 虚拟机。您在自己的 Mac 上用 Tart 运行与现在相同的 Cirrus macOS 镜像。每个任务都从一台干净的机器开始,与在 Cirrus 上完全一样。

Path A, native runner

macOS, no VMactions.runner service,one job at a timeIts own diskDerivedData and packagesstay warm

Fastest, and you install Xcode yourself.

Path B, Tart virtual machines

macOS host, TartClean VMone job, deletedClean VMone job, deletedThe same Cirrus images you run today.Apple's licence: two at a time, per Mac.

Nothing changes in the workflow except the label.

一台 Mac,两种方案。整篇指南讲的就是如何选择。
原生 RunnerTart 虚拟机
配置时间约 30 分钟约 1 小时
与 Cirrus 环境相同否,需自行安装 Xcode是,使用相同镜像
每个任务一台干净机器No是
任务之间缓存保持预热是否,除非您把缓存打包进镜像
每台 Mac 同时运行的任务数每个 Runner 一个最多两个(Apple 许可协议的限制)

如果您的团队拥有该代码仓库并追求速度,选择方案 A。如果您需要每次构建都从已知的干净状态开始,或者除了标签之外不想改动工作流中的任何内容,选择方案 B。

开始之前

列出您的工作流目前使用的内容。查找指向 Cirrus 镜像的 runs-on 行,例如:

.github/workflows
runs-on: ghcr.io/cirruslabs/macos-runner:sonoma

记下 macOS 版本、Xcode 版本,以及任务开始时安装的所有内容。无论选择哪种方案,您都需要这份清单。

方案 A:原生 Runner

按照我们的指南“在 Mac mini 上运行自托管 GitHub Actions Runner”操作,链接在本页底部。指南涵盖安装 Xcode、注册 Runner 以及将其作为服务运行。

给 Runner 设置一个能说明其用途的标签,例如 macduty-m4。然后修改每个工作流中的一行:

.github/workflows
# before
runs-on: ghcr.io/cirruslabs/macos-runner:sonoma

# after
runs-on: [self-hosted, macOS, ARM64, macduty-m4]

趁 Cirrus 仍可使用时,先在新 Runner 上运行一个工作流。通过后,再迁移其余工作流。

方案 B:在 Tart 中使用相同镜像

1. 在 Mac 上安装 Tart

ssh
brew install cirruslabs/cli/tart

2. 拉取 Cirrus 镜像

选择与您当前所用最接近的镜像。Cirrus 发布了带 Xcode 和不带 Xcode 的镜像:

ssh
tart clone ghcr.io/cirruslabs/macos-sequoia-xcode:latest ci-base

首次拉取的数据量很大,常常超过 50 GB,请预留一些时间。

3. 启动虚拟机并登录

ssh
tart run --no-graphics ci-base &
ssh admin@$(tart ip ci-base)

Cirrus 镜像自带一个默认管理员账户。在做任何其他操作之前,先修改它的密码。

4. 在虚拟机内注册 Runner

在虚拟机内,按与方案 A 相同的方式注册 GitHub Actions Runner,只有一处不同:加上 --ephemeral,让 Runner 只接一个任务,然后停止。

在虚拟机内
./config.sh --url https://github.com/<owner>/<repo> --token <token> --ephemeral --labels tart-sequoia
./run.sh

5. 每个任务一台全新虚拟机

在 Mac 本机上,用一个小循环克隆一份干净的镜像副本,在其中运行一个任务,然后将其删除:

ssh
while true; do
  tart clone ci-base job
  tart run --no-graphics job &
  # wait for the job to finish, then:
  tart stop job
  tart delete job
done

实际使用时,您会需要一个脚本,同时为每台虚拟机获取新的注册令牌。对于规模更大的部署,可以使用同一团队开发的 Orchard 等工具来处理。

Apple 的许可协议规定,一台 Mac 上最多同时运行两个 macOS 虚拟机。如需更多并行任务,请再增加一台 Mac。

迁移之后

  • 检查构建时间。在独享的 M4 或更新机型上,大多数团队的构建速度与在 Cirrus 上相当,缓存预热后还会更快。
  • 旧工作流保留一周。在新 Runner 完整经历一次发布之前,在某个分支中保留一份 Cirrus 的 runs-on 行副本。
  • 仅限私有代码仓库。自托管 Runner 不应接收来自公开 fork 的任务。

为什么用独享 Mac mini

  • 按月固定计费。不按分钟计费,合同到期时也无需重新谈判。
  • 覆盖每一代。M1 到 M6 并排可选,您可以在用户实际使用的芯片上测试。
  • 仅供您使用。无需排队,没有共用者,您的硬件上不会运行别人的任务。
  • 托管在欧盟,受 GDPR 约束。

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 个月,之后任意一个月均可取消。

下一步