macOS 上的托管运行器
- Tier: Premium, Ultimate
- Offering: GitLab.com
- Status: Beta
macOS 上的托管运行器提供按需的 macOS 环境,与 GitLab CI/CD 完全集成。 您可以使用这些运行器来构建、测试和部署 Apple 生态系统(macOS、iOS、watchOS、tvOS)的应用程序。 我们的 Mobile DevOps 部分 提供了构建和部署 iOS 移动应用程序的功能、文档和指导。
macOS 上的托管运行器处于 beta 阶段,适用于开源项目和 Premium 及 Ultimate 计划的客户。 macOS 上托管运行器的 正式发布 计划在 epic 8267 中提出。
在使用 macOS 上的托管运行器之前,请查看影响它们的 已知问题和使用限制 列表。
macOS 可用的机器类型
GitLab 为 macOS 上的托管运行器提供以下机器类型。要构建 x86-64 目标,您可以使用 Rosetta 2 来模拟 Intel x86-64 环境。
| 运行器标签 | vCPUS | 内存 | 存储 |
|---|---|---|---|
saas-macos-medium-m1 |
4 | 8 GB | 50 GB |
saas-macos-large-m2pro |
6 | 16 GB | 50 GB |
支持的 macOS 镜像
与我们 Linux 上的托管运行器不同(您可以在其中运行任何 Docker 镜像), GitLab 为 macOS 提供一组 VM 镜像。
您可以在以下镜像之一中执行构建,这些镜像在您的 .gitlab-ci.yml 文件中指定。
每个镜像运行特定版本的 macOS 和 Xcode。
| VM 镜像 | 状态 | |
|---|---|---|
macos-14-xcode-15 |
GA |
预装软件 |
macos-15-xcode-16 |
GA |
预装软件 |
如果未指定镜像,macOS 运行器将使用 macos-15-xcode-16。
macOS 镜像更新策略
镜像和已安装组件随每次 GitLab 发布而更新,以保持预装软件的更新。GitLab 通常支持多个版本的预装软件。有关更多信息,请参阅 预装软件完整列表。
macOS 和 Xcode 的主要和次要版本在 Apple 发布后的里程碑中提供。
新的主要版本镜像最初以 beta 形式提供,并在第一个次要版本发布时正式发布。 由于一次只支持两个正式发布的镜像,最旧的镜像将被弃用,并根据 支持的镜像生命周期 在三个月后移除。
当新的主要版本正式发布时,它将成为所有 macOS 作业的默认镜像。
.gitlab-ci.yml 文件示例
以下示例 .gitlab-ci.yml 文件展示了如何开始使用 macOS 上的托管运行器:
.macos_saas_runners:
tags:
- saas-macos-medium-m1
image: macos-14-xcode-15
before_script:
- echo "started by ${GITLAB_USER_NAME} / @${GITLAB_USER_LOGIN}"
build:
extends:
- .macos_saas_runners
stage: build
script:
- echo "running scripts in the build job"
test:
extends:
- .macos_saas_runners
stage: test
script:
- echo "running scripts in the test job"使用 fastlane 进行 iOS 项目代码签名
在将 GitLab 与 Apple 服务集成、安装到设备或部署到 Apple App Store 之前,您必须对应用程序进行 代码签名。
每个 macOS VM 镜像的运行器中都包含 fastlane, 这是一个旨在简化移动应用程序部署的开源解决方案。
有关如何为应用程序设置代码签名的信息,请参阅 Mobile DevOps 文档 中的说明。
相关主题:
优化 Homebrew
默认情况下,Homebrew 在任何操作开始时都会检查更新。Homebrew 的发布周期可能比 GitLab macOS 镜像的发布周期更频繁。
这种发布周期的差异可能导致调用 brew 的步骤在 Homebrew 进行更新时花费额外时间来完成。
为了减少因意外 Homebrew 更新导致的构建时间,请在 .gitlab-ci.yml 中设置 HOMEBREW_NO_AUTO_UPDATE 变量:
variables:
HOMEBREW_NO_AUTO_UPDATE: 1优化 Cocoapods
如果您在项目中使用 Cocoapods,应考虑以下优化来提高 CI 性能。
Cocoapods CDN
您可以使用内容分发网络 (CDN) 访问从 CDN 下载包,而不必克隆整个项目仓库。 CDN 访问在 Cocoapods 1.8 或更高版本中可用,并且所有 GitLab 托管的 macOS 运行器都支持。
要启用 CDN 访问,请确保您的 Podfile 以以下内容开头:
source 'https://cdn.cocoapods.org/'使用 GitLab 缓存
在 GitLab 中使用 Cocoapods 包的缓存,仅在 pods 更改时运行 pod install,这可以提高构建性能。
为您的项目 配置缓存:
-
将
cache配置添加到您的.gitlab-ci.yml文件中:cache: key: files: - Podfile.lock paths: - Pods -
将
cocoapods-check插件添加到您的项目中。 -
更新作业脚本,在调用
pod install之前检查已安装的依赖项:bundle exec pod check || bundle exec pod install
将 pods 包含在源代码控制中
您也可以 将 pods 目录包含在源代码控制中。这消除了在 CI 作业中安装 pods 的需要, 但会增加项目仓库的总体大小。
已知问题和使用限制
- 如果 VM 镜像不包含作业所需的特定软件版本,则必须获取并安装所需的软件。这会导致作业执行时间增加。
- 无法使用您自己的 OS 镜像。
- 用户
gitlab的钥匙串不可公开访问。您必须创建一个钥匙串。 - macOS 上的托管运行器在无头模式下运行。
任何需要 UI 交互的工作负载(如
testmanagerd)都不受支持。 - 由于 Apple 芯片具有效率核心和性能核心,作业性能在不同作业执行之间可能有所不同。您无法控制核心分配或调度,这可能导致不一致性。
- 用于 macOS 托管运行器的 AWS 裸机 macOS 机器的可用性有限。当没有可用机器时,作业可能会遇到长时间的排队等待。
- macOS 上的托管运行器实例有时不响应请求,导致作业挂起直到达到最大作业持续时间。