- 可用于 macOS 的机器类型
- 支持的 macOS 镜像
- macOS 的镜像更新策略
- 示例
.gitlab-ci.yml
文件 - 使用 fastlane 对 iOS 项目进行代码签名
- 优化 Homebrew
- 优化 Cocoapods
- 已知问题和使用限制
{{< details >}}
- Tier: 专业版,旗舰版
- Offering: JihuLab.com
- Status: Beta
{{< /details >}}
极狐GitLab 在 macOS 上托管的 runners 提供了一种按需的 macOS 环境,完全集成到极狐GitLab CI/CD 中。您可以使用这些 runners 来构建、测试和部署适用于苹果生态系统 (macOS、iOS、watchOS、tvOS) 的应用程序。我们的 移动 DevOps 部分 提供了关于构建和部署 iOS 移动应用程序的功能、文档和指导。
在 macOS 上托管的 runners 处于 beta 阶段,适用于开源程序以及专业版和旗舰版计划的客户。
可用于 macOS 的机器类型
极狐GitLab 为 macOS 上托管的 runners 提供以下机器类型。要为 x86-64 目标构建,您可以使用 Rosetta 2 来模拟 Intel x86-64 环境。
Runner 标签 | vCPUS | 内存 | 存储 |
---|---|---|---|
saas-macos-medium-m1 |
4 | 8 GB | 50 GB |
saas-macos-large-m2pro |
6 | 16 GB | 50 GB |
支持的 macOS 镜像
与我们在 Linux 上托管的 runners 可以运行任何 Docker 镜像相比,极狐GitLab 为 macOS 提供了一组 VM 镜像。
您可以在以下镜像之一中执行构建,您需要在 .gitlab-ci.yml
文件中指定。每个镜像运行特定版本的 macOS 和 Xcode。
VM 镜像 | 状态 | |
---|---|---|
macos-14-xcode-15 |
GA |
预安装软件 |
macos-15-xcode-16 |
GA |
预安装软件 |
如果没有指定镜像,macOS runner 将使用 macos-15-xcode-16
。
macOS 的镜像更新策略
镜像和安装的组件会随着每次极狐GitLab 发布更新,以保持预安装软件的最新状态。极狐GitLab 通常支持多个版本的预安装软件。
macOS 和 Xcode 的主要和次要版本会在苹果发布后的里程碑中提供。
新的主要发布镜像最初会作为 beta 提供,并在首次次要发布时变为一般可用。因为一次只支持两个一般可用的镜像,最旧的镜像会被弃用,并将在三个月后根据 支持的镜像生命周期 移除。
当新的主要发布一般可用时,它将成为所有 macOS 作业的默认镜像。
示例 .gitlab-ci.yml
文件
以下示例 .gitlab-ci.yml
文件展示了如何开始使用 macOS 上托管的 runners:
.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 与苹果服务集成、安装到设备或部署到苹果应用商店之前,您必须代码签名您的应用程序。
每个 macOS VM 镜像的 runner 都包含 fastlane,这是一种开源解决方案,旨在简化移动应用程序部署。
有关如何为您的应用程序设置代码签名的信息,请参见 移动 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 或更高版本中可用,并且受所有 macOS 上托管的极狐GitLab runners 支持。
为了启用 CDN 访问,请确保您的 Podfile 以以下内容开头:
source 'https://cdn.cocoapods.org/'
使用极狐GitLab 缓存
在极狐GitLab 中使用 Cocoapods 软件包缓存,只在 pods 发生变化时运行 pod install
,这可以提高构建性能。
要为您的项目 配置缓存:
-
在
.gitlab-ci.yml
文件中添加cache
配置:cache: key: files: - Podfile.lock paths: - Pods
- 将
cocoapods-check
插件添加到您的项目。 -
更新作业脚本以在调用
pod install
之前检查已安装的依赖项:bundle exec pod check || bundle exec pod install
将 pods 包含在源代码控制中
您还可以在源代码控制中包含 pods 目录。这消除了在 CI 作业中安装 pods 的需要,但它确实增加了项目存储库的整体大小。
已知问题和使用限制
- 如果 VM 镜像不包含您作业所需的特定软件版本,则必须获取并安装所需的软件。这会导致作业执行时间增加。
- 不可能使用您自己的操作系统镜像。
- 用户
gitlab
的密钥链不是公开可用的。您必须创建一个密钥链。 - 在 macOS 上托管的 runners 以无头模式运行。任何需要 UI 交互的工作负载,如
testmanagerd
,均不受支持。 - 作业性能可能会在作业执行之间有所不同,因为苹果芯片具有效率和性能核心。您无法控制核心分配或调度,这可能导致不一致。