MacOSのSaaSランナー(PREMIUM SAAS BETA)

MacOS上のSaaS Runnerは、オープンソースプログラムおよびPremiumプランとUltimateプランのお客様向けのベータ版です。

SaaS Runner on macOSは、GitLab SaaSCI/CDとインテグレーションされたオンデマンドのmacOSビルド環境を提供します。これらの Runner を使用して、Apple エコシステム(macOS、iOS、watchOS、tvOS)向けのアプリをビルド、テスト、デプロイします。GitLabのシングルDevOpsプラットフォームのすべての機能を活用でき、ビルド環境の管理やオペレーションは不要です。当社のモバイルDevOpsソリューションは、iOS向けモバイルアプリケーションのビルドとデプロイに関する機能、ドキュメント、ガイダンスを提供します。

私たちはMacOS上のSaaS Runnerを一般的に利用できるようにするために反復を続けたいと考えています。関連エピックで、この目標に向けた私たちの作業を追うことができます。

MacOSで利用可能なマシンタイプ

GitLab SaaSはAppleシリコン(M1)チップ上のMacOSビルドマシンを提供します。Intel x86-64 ランナーは Apple シリコンに取って代わられました。x86-64ターゲット向けにビルドするには、Rosetta 2を使ってIntel x86-64ビルド環境をエミュレートしてください。

ランナータグvCPUSメモリストレージ
saas-macos-medium-m148 GB25 GB

対応MacOSイメージ

Linux上のGitLab SaaSランナーではどのようなDockerイメージでも実行できますが、GitLab SaaSではmacOS用のVMイメージのセットを提供しています。

.gitlab-ci.yml ファイルで指定した以下のイメージのいずれかでビルドを実行できます。

各イメージは、特定のバージョンの MacOS と Xcode を実行します。

VMイメージステータス
macos-12-xcode-13GA
macos-12-xcode-14GA
macos-13-xcode-14Beta

MacOSのイメージアップデートポリシー

macOSとXcodeは1年ごとにリリースされ、その間にGitLabは同期してバージョンを増やします。GitLabは通常、複数のバージョンのプリインストールツールをサポートしています。詳細については、プリインストールされているソフトウェアの完全なリストを参照してください。

GitLabは、異なるアップデートパターンに従うstablelatest macOSイメージを提供します:

  • 安定したイメージ:安定版イメージ:stable イメージとインストールされたコンポーネントはリリースごとに更新されます。:latest のプレフィックスがないイメージは安定したイメージとみなされます。
  • 最新イメージ: latest イメージは通常毎週更新され、イメージ名に:latest という接頭辞を付けます。このイメージを使うことで、latest より定期的にコンポーネントが更新され、Homebrew や asdf の更新時間が短く latestなります。latest イメージは latest stable イメージにコンポーネントをリリースする前に、ソフトウェアコンポーネントをテストするために使用されます。定義上、latest イメージは常にベータ latestです。latest イメージは latest利用できません。

イメージのリリースプロセス

Appleが新しいバージョンのmacOSをリリースすると、GitLabは次のリリースでそのOSをベースにしたstablelatest イメージの両方をリリースします。どちらのイメージもベータ版です。

macOSへの最初のパッチがリリースされると、stable イメージは一般利用可能になります(GA)。一度にサポートされる GA イメージは 2 つだけなので、以前の OS バージョンは非推奨となり、サポートされるイメージのライフサイクルに従って3 ヶ月後に削除されます。

.gitlab-ci.yml ファイルの例

次のサンプル.gitlab-ci.yml ファイルは、MacOS 上で SaaS Runner の使用を開始する方法を示しています:

.macos_saas_runners:
  tags:
    - saas-macos-medium-m1
  image: macos-12-xcode-14
  before_script:
    - echo "started by ${GITLAB_USER_NAME}"

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にデプロイしたりする前に、アプリケーションにコード署名をする必要があります。

runner on macOSの各VMイメージには、モバイルアプリのデプロイを簡素化することを目的としたオープンソースのソリューションであるfastlaneが含まれています。

アプリケーションにコード署名を設定する方法については、Mobile DevOpsドキュメントの説明を参照してください。

関連トピック

Homebrewの最適化

デフォルトでは、Homebrewはオペレーション開始時にアップデートの有無を確認します。HomebrewのリリースサイクルはGitLabのMacOSイメージのリリースサイクルよりも頻繁かもしれません。このリリースサイクルの違いにより、Homebrew がアップデートを行う間、brew を呼び出すステップの完了に余計な時間がかかることがあります。

Homebrewの意図しないアップデートによるビルド時間を短縮するには、.gitlab-ci.ymlHOMEBREW_NO_AUTO_UPDATE 変数を設定してください:

variables:
  HOMEBREW_NO_AUTO_UPDATE: 1

Cocoapodsの最適化

プロジェクトでCocoapodsを使用する場合、CIのパフォーマンスを向上させるために以下の最適化を考慮する必要があります。

ココアポッズCDN

プロジェクトリポジトリ全体をクローンする代わりに、コンテンツデリバリネットワーク(CDN) アクセスを使ってCDNからパッケージをダウンロードすることができます。CDNアクセスはCocoapods 1.8以降で利用可能で、MacOS上のすべてのGitLab SaaS Runnerでサポートされています。

CDNアクセスを有効にするには、Podfileが:

source 'https://cdn.cocoapods.org/'

GitLabキャッシングを使う

GitLab の Cocoapods パッケージでキャッシングを使用すると、ポッドが変更されたときだけ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
    

ソース管理でポッドをインクルードします。

ソース管理にポッドディレクトリを含めることもできます。これにより、CIジョブの一部としてポッドをインストールする必要はなくなりますが、プロジェクトのリポジトリ全体のサイズが大きくなります。

既知のイシューと使用上の制約

  • VMイメージにジョブに必要な特定のソフトウェア・バージョンが含まれていない場合、必要なソフトウェアをフェッチしてインストールする必要があります。そのため、ジョブの実行時間が長くなります。
  • 独自のOSイメージを持ち込むことはできません。
  • ユーザーgitlab のキーチェーンは公開されていません。代わりにキーチェーンを作成する必要があります。