macOS上でホストされるRunner
- プラン: Premium、Ultimate
- 提供形態: GitLab.com
- ステータス: ベータ
macOS上のホストされたRunnerは、オンデマンドのmacOS環境を提供し、GitLab CI/CDと完全に統合されています。これらのRunnerを使用して、Appleエコシステム(macOS、iOS、watchOS、tvOS)用のアプリをビルド、テスト、およびデプロイできます。弊社のMobile DevOps sectionでは、iOS用のモバイルアプリケーションのビルドとデプロイに関する機能、ドキュメント、およびガイダンスを提供しています。
macOS上のホストされたRunnerはベータ版であり、オープンソースプログラム、およびPremiumプランとUltimateプランの顧客が利用できます。macOS上のホストされたRunnerの一般公開は、エピック8267で提案されています。
macOS上のホストされたRunnerを使用する前に、macOS上のホストされたRunnerに影響を与える既知の問題と使用上の制約のリストを確認してください。
macOSで使用可能なマシンタイプ
GitLabは、macOS上のホストされたRunnerに対して、次のマシンタイプを提供しています。x86-64ターゲット用にビルドするには、Rosetta 2を使用してIntel x86-64環境をエミュレートできます。
| Runnerタグ | vCPU | メモリ | ストレージ |
|---|---|---|---|
saas-macos-medium-m1 | 4 | 8 GB | 50 GB |
saas-macos-large-m2pro | 6 | 16 GB | 50 GB |
サポートされているmacOS Dockerイメージ
任意のDockerイメージを実行できるLinux上のホストされたRunnerと比較して、GitLabはmacOS用のVM Dockerイメージのセットを提供します。
.gitlab-ci.ymlファイルで指定する次のDockerイメージのいずれかで、ビルドを実行できます。各Dockerイメージは、macOSとXcodeの特定のバージョンを実行します。
| VM Dockerイメージ | ステータス | |
|---|---|---|
macos-14-xcode-15 | GA | プリインストールされたソフトウェア |
macos-15-xcode-16 | GA | プリインストールされたソフトウェア |
Dockerイメージが指定されていない場合、macOS Runnerはmacos-15-xcode-16を使用します。
macOSのDockerイメージアップデートポリシー
Dockerイメージとインストールされたコンポーネントは、プリインストールされたソフトウェアを最新の状態に保つために、GitLabの各リリースで更新されます。通常、GitLabはプリインストールされたソフトウェアの複数のバージョンをサポートしています。詳細については、プリインストールされたソフトウェアの完全なリストを参照してください。
macOSとXcodeのメジャーリリースおよびマイナーリリースは、Appleリリースの次のマイルストーンで利用可能になります。
新しいメジャーリリースのDockerイメージは、最初はベータ版として利用可能になり、最初のマイナーリリースのリリースで一般公開になります。一般公開されているDockerイメージは一度に2つしかサポートされていないため、最も古いDockerイメージは非推奨となり、サポートされているDockerイメージのライフサイクルに従って3か月後に削除されます。
新しいメジャーリリースが一般公開されると、すべてのmacOSジョブのデフォルトのDockerイメージになります。
.gitlab-ci.ymlファイルの例
次のサンプルの.gitlab-ci.ymlファイルは、macOS上のホストされたRunnerの使用を開始する方法を示しています。:
.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 Dockerイメージの各Runnerには、モバイルアプリのデプロイの簡素化を目的としたオープンソースソリューションであるfastlaneが含まれています。
アプリケーションのコード署名を設定する方法については、Mobile DevOps documentationの手順を参照してください。
関連トピック:
Homebrewの最適化
デフォルトでは、Homebrewは操作の開始時に更新を確認します。Homebrewには、GitLab macOS Dockerイメージのリリースサイクルよりも頻繁なリリースサイクルがあります。このリリースサイクルの違いにより、Homebrewが更新を行う間、brewを呼び出す手順の完了に時間がかかる場合があります。
意図しないHomebrewの更新によるビルド時間を短縮するには、HOMEBREW_NO_AUTO_UPDATE変数を.gitlab-ci.ymlに設定します。:
variables:
HOMEBREW_NO_AUTO_UPDATE: 1Cocoapodsの最適化
プロジェクトでCocoapodsを使用する場合は、CIパフォーマンスを向上させるために、次の最適化を検討する必要があります。
Cocoapods CDN
コンテンツ配信ネットワーク(CDN)アクセスを使用して、プロジェクトリポジトリ全体を複製する代わりに、CDNからパッケージをダウンロードできます。CDNアクセスはCocoapods 1.8以降で使用でき、macOS上のすべてのGitLabホストされたRunnerでサポートされています。
CDNアクセスを有効にするには、Podfileが次で始まるようにしてください。:
source 'https://cdn.cocoapods.org/'GitLabキャッシュの使用
GitLabのCocoapodsパッケージでキャッシュを使用すると、podが変更された場合にのみpod installを実行できるため、ビルドのパフォーマンスが向上します。
プロジェクトのキャッシュを設定するには::
cache設定を.gitlab-ci.ymlファイルに追加します。:cache: key: files: - Podfile.lock paths: - Podscocoapods-checkプラグインをプロジェクトに追加します。pod installを呼び出す前に、インストールされている依存を確認するようにジョブスクリプトを更新します。:bundle exec pod check || bundle exec pod install
ソース管理にポッドを含める
ソース管理にポッドディレクトリを含めることもできます。これにより、CIジョブの一部としてポッドをインストールする必要がなくなりますが、プロジェクトのリポジトリ全体のサイズが大きくなります。
既知の問題と使用上の制約
- VM Dockerイメージにジョブに必要な特定のソフトウェアバージョンが含まれていない場合は、必要なソフトウェアをフェッチしてインストールする必要があります。これにより、ジョブの実行時間が長くなります。
- 独自のOS Dockerイメージを持ち込むことはできません。
- ユーザー
gitlabのキーチェーンは公開されていません。代わりにキーチェーンを作成する必要があります。 - macOS上のホストされたRunnerは、ヘッドレスモードで実行されます。
testmanagerdなどのUIインタラクションを必要とするワークロードはサポートされていません。 - Appleシリコンチップには効率性とパフォーマンスコアがあるため、ジョブの実行パフォーマンスはジョブの実行間で異なる場合があります。コアの割り当てまたはスケジュールを制御できないため、不整合が発生する可能性があります。
- macOS上のホストされたRunnerに使用されるAWSベアメタルmacOSマシンの可用性は限られています。マシンが利用できない場合、ジョブのキュー時間が長くなる可能性があります。
- macOS上のホストされたRunnerインスタンスがリクエストに応答しない場合があり、その結果、ジョブの最大継続時間に達するまでジョブがハングアップします。