はじめに
Gitlab CI のビルドマシンとして Mac mini を使用していましたが、Gitlab のSaaS Runner でビルドできるということを聞いたので移行してみました
Mac mini でやっていた xcodebuild に加えていくつかセットアップが必要になったのでこちらを紹介したいと思います
gitlab-ci.yml
全体はこんな感じです
build-jop:
tags: [shared-macos-amd64]
image: macos-12-xcode-14
stage: build
variables:
SECURE_FILES_DOWNLOAD_PATH: ./securefiles
script:
- curl --silent "https://gitlab.com/gitlab-org/incubation-engineering/mobile-devops/download-secure-files/-/raw/main/installer" | bas
- security create-keychain -p "password" gitlab.keychain
- security default-keychain -s gitlab.keychain
- security set-keychain-settings -l gitlab.keychain
- security unlock-keychain -p "password" gitlab.keychain
- security import $SECURE_FILES_DOWNLOAD_PATH/"証明書.p12" -k gitlab.keychain -P "p12password" -A
- security set-key-partition-list -S "apple:" -s -k password gitlab.keychain
- uuid=$(grep UUID -A1 -a $SECURE_FILES_DOWNLOAD_PATH/dis.mobileprovision | grep -io "[-A-F0-9]\{36\}")
- mkdir -p ~/Library/MobileDevice/"Provisioning Profiles"
- cp $SECURE_FILES_DOWNLOAD_PATH/dis.mobileprovision ~/Library/MobileDevice/"Provisioning Profiles"/$uuid.mobileprovision
- xcodebuild ...
スクリプト解説
1. セキュアファイルダウンロード
ビルド中に使用するファイルをセキュアファイルとして登録でき、以下のコマンドでインストールできます
セキュアファイルは ビルドに必要な証明書(.p12)や Provisioning Profile (.mobileprovision)などを置いておきます
ファイルの登録方法は以下の記事が参考になります
[GitLab CI/CD] macOS SaaS Runner と GitLab Mobile DevOps で iOSビルド実行環境の簡単セットアップ
- curl --silent "https://gitlab.com/gitlab-org/incubation-engineering/mobile-devops/download-secure-files/-/raw/main/installer" | bas
2. 証明書をキーチェーンに登録
証明書を登録するためのキーチェーンを作成し、タイムアウトを終了までにしてからアンロックします。
デフォルトのタイムアウトは300秒ですが、これだとRun Script
でPod
やCarthage
の署名のタイミングでロックされている可能性があります
また、codesign
が利用できるようにパーティションリストの設定も行います
- security create-keychain -p "password" gitlab.keychain
- security default-keychain -s gitlab.keychain
- security set-keychain-settings -l gitlab.keychain
- security unlock-keychain -p "password" gitlab.keychain
- security import $SECURE_FILES_DOWNLOAD_PATH/"証明書.p12" -k gitlab.keychain -P "p12password" -A
- security set-key-partition-list -S "apple:" -s -k password gitlab.keychain
3. Provisioning Profileの配置
.mobileprovision 内からUUID
を抽出し、ファイル名にしてProvisioning Profile
ディレクトリへ移動させます
- uuid=$(grep UUID -A1 -a $SECURE_FILES_DOWNLOAD_PATH/dis.mobileprovision | grep -io "[-A-F0-9]\{36\}")
- mkdir -p ~/Library/MobileDevice/"Provisioning Profiles"
- cp $SECURE_FILES_DOWNLOAD_PATH/dis.mobileprovision ~/Library/MobileDevice/"Provisioning Profiles"/$uuid.mobileprovision
4. xcodebuild
上記の設定ができれば証明書周りのセットアップが済んでいる状態です
xcodebuild
でアーカイブ、エクスポートなど行ってください
おわりに
Shared Runner は手元に実機がなくてもCIを実現できるのが良いですが、ビルド時間が Mac mini (8GB Intel) と比較して少し長く掛かるようです
早さを重視するのであればオンプレで用意してしまうのもありかもしれません