{{< 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,这可以提高构建性能。

要为您的项目 配置缓存

  1. .gitlab-ci.yml 文件中添加 cache 配置:

    cache:
      key:
        files:
         - Podfile.lock
    paths:
      - Pods
    
  2. cocoapods-check 插件添加到您的项目。
  3. 更新作业脚本以在调用 pod install 之前检查已安装的依赖项:

    bundle exec pod check || bundle exec pod install
    

将 pods 包含在源代码控制中

您还可以在源代码控制中包含 pods 目录。这消除了在 CI 作业中安装 pods 的需要,但它确实增加了项目存储库的整体大小。

已知问题和使用限制

  • 如果 VM 镜像不包含您作业所需的特定软件版本,则必须获取并安装所需的软件。这会导致作业执行时间增加。
  • 不可能使用您自己的操作系统镜像。
  • 用户 gitlab 的密钥链不是公开可用的。您必须创建一个密钥链。
  • 在 macOS 上托管的 runners 以无头模式运行。任何需要 UI 交互的工作负载,如 testmanagerd,均不受支持。
  • 作业性能可能会在作业执行之间有所不同,因为苹果芯片具有效率和性能核心。您无法控制核心分配或调度,这可能导致不一致。