macOS上のホストRunner
- プラン: Premium、Ultimate
- 提供形態: GitLab.com
- ステータス: ベータ版
macOS上のHosted Runnerは、オンデマンドのmacOS環境を提供し、GitLab CI/CDと完全に統合されています。これらのRunnerを使用して、Appleエコシステム(macOS、iOS、watchOS、tvOS)向けにアプリをビルド、テスト、およびデプロイできます。当社のMobile DevOpsセクションでは、iOS向けモバイルアプリケーションのビルドとデプロイに関する機能、ドキュメント、およびガイダンスを提供しています。
macOS上のHosted Runnerはベータ版であり、オープンソースプログラムとPremiumおよびUltimateプランのお客様にご利用いただけます。macOS上のHosted Runnerの一般公開は、エピック8267で提案されています。
使用する前に、macOS上のHosted Runnerに影響する既知のイシューと使用上の制約のリストを確認してください。
macOSで利用可能なマシンタイプ
GitLabは、macOS上のHosted 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イメージ
Linux上のHosted Runnerで任意のDockerイメージを実行できるのと比較して、GitLabはmacOS向けに一連のVMイメージを提供しています。
次のいずれかのイメージでビルドを実行でき、そのイメージは.gitlab-ci.ymlファイルで指定します。各イメージは、macOSとXcodeの特定のバージョンを実行します。
| VMイメージ | ステータス | |
|---|---|---|
macos-14-xcode-15 | deprecated | プリインストールされたソフトウェア |
macos-15-xcode-16 | GA | プリインストールされたソフトウェア |
macos-26-xcode-26 | GA | プリインストールされたソフトウェア |
イメージが指定されていない場合、macOS Runnerはmacos-15-xcode-16を使用します。
macOSのイメージ更新ポリシー
イメージとインストールされているコンポーネントは、プリインストールされているソフトウェアを最新の状態に保つため、各GitLabリリースで更新されます。GitLabは通常、プリインストールされたソフトウェアの複数のバージョンをサポートしています。詳細については、プリインストールされたソフトウェアの完全なリストを参照してください。
macOSとXcodeのメジャーリリースおよびマイナーリリースは、Appleリリース後のマイルストーンで利用可能になります。
新しいメジャーリリースイメージは、最初にベータ版として利用可能になり、最初のマイナーリリースのリリースに伴って一般公開されます。一度に2つの一般公開イメージのみがサポートされるため、最も古いイメージは非推奨となり、サポートされるイメージライフサイクルに従って3か月後に削除されます。
新しいメジャーリリースが一般公開されると、それはすべてのmacOSジョブのデフォルトイメージになります。
.gitlab-ci.ymlファイルの例
以下のサンプル.gitlab-ci.ymlファイルは、macOS上でHosted 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プロジェクトのコード署名
AppleサービスとGitLabを統合したり、デバイスにインストールしたり、Apple App Storeにデプロイしたりする前に、アプリケーションをコード署名する必要があります。
macOS VMイメージの各Runnerには、モバイルアプリのデプロイを簡素化することを目的としたオープンソースソリューションであるfastlaneが含まれています。
アプリケーションのコード署名を設定する方法については、Mobile DevOpsドキュメントの指示を参照してください。
関連トピック:
Homebrewの最適化
デフォルトで、Homebrewは任意の操作の開始時に更新をチェックします。Homebrewのリリースサイクルは、GitLab macOSイメージのリリースサイクルよりも頻繁である場合があります。このリリースサイクルの違いにより、Homebrewが更新を行う際にbrewを呼び出す手順に余分な時間がかかる場合があります。
意図しないHomebrewの更新によるビルド時間を短縮するには、.gitlab-ci.ymlでHOMEBREW_NO_AUTO_UPDATE変数を設定します:
variables:
HOMEBREW_NO_AUTO_UPDATE: 1CocoaPodsの最適化
プロジェクトでCocoaPodsを使用する場合、CIのパフォーマンスを向上させるために以下の最適化を検討してください。
CocoaPods CDN
コンテンツデリバリーネットワーク(CDN)アクセスを使用して、プロジェクトリポジトリ全体をクローンする代わりに、CDNからパッケージをダウンロードできます。CDNアクセスはCocoaPods 1.8以降で利用可能であり、macOS上のすべてのGitLab Hosted Runnerでサポートされています。
CDNアクセスを有効にするには、Podfileが次から始まることを確認してください:
source 'https://cdn.cocoapods.org/'Use GitLab caching
GitLabのCocoaPodsパッケージでキャッシュを使用すると、ポッドが変更されたときにのみ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
Include pods in source control
ポッドディレクトリをソース管理に含めることもできます。これにより、CIジョブの一部としてポッドをインストールする必要がなくなりますが、プロジェクトのリポジトリの全体的なサイズは増加します。
既知のイシューと使用上の制約
- VMイメージにジョブに必要な特定のソフトウェアバージョンが含まれていない場合、必要なソフトウェアをフェッチしてインストールする必要があります。これにより、ジョブの実行時間が増加します。
- 独自のOSイメージを持ち込むことはできません。
- ユーザー
gitlabのキーチェーンは一般公開されていません。代わりにキーチェーンを作成する必要があります。 - macOS上のHosted Runnerはヘッドレスモードで実行されます。
testmanagerdなどのUIインタラクションを必要とするすべてのワークロードはサポートされていません。 - Appleシリコンチップには効率性コアとパフォーマンスコアがあるため、ジョブの実行間でジョブのパフォーマンスが異なる場合があります。コアの割り当てやスケジューリングを制御することはできず、これにより一貫性が失われる可能性があります。
- macOS上のHosted Runnerに使用されるAWSベアメタルmacOSマシンの可用性は限られています。マシンが利用できない場合、ジョブのキューイング時間が長くなる可能性があります。
- macOS上のHosted Runnerインスタンスは、リクエストに応答しないことがあり、その結果、最大ジョブ期間に達するまでジョブがハングアップすることがあります。
- macOSはデフォルトで大文字と小文字を区別しないファイルシステムを使用します。この動作は、大文字と小文字を除いて同じファイルパスの重複がある場合に、予期せぬエラーを引き起こす可能性があります。これらの重複したパスは、Gitワークツリー、またはブランチとタグが保存されているGit refsに存在する可能性があります。