ドキュメント

GitHubを使っていなくても大丈夫。同じMacが主要なCIすべてで動きます。

GitHub Actionsは私たちがセットアップし、直接サポートします。ただし、あなたのマシンはSSHでアクセスできる普通のMac miniです。GitLab、Bitbucket、Buildkite、CircleCI、Azure Pipelines、Jenkinsには、どれもmacOSで動くエージェントがあります。お使いのものをインストールすれば、それ以外の環境はまったく同じです。Xcodeのバージョン固定、温まったキャッシュ、シミュレーター用に維持されたログインセッション、1台につき1社のお客様。

始める前に

  • +上記のエージェントはすべて、CIへ外向きに接続します。受信ポートは不要です。マシンは今と同じく、公開インターネットから切り離されたままです。
  • +エージェントはrunnerユーザーで動かしてください。GitHub Actionsと同じアカウントです。Xcode、シミュレーター、キャッシュはこのユーザーが所有しています。
  • +動かし続けてください。サービスとして起動するか(brew services、svc.sh)、tmuxセッションの中で起動します。runnerユーザーは自動ログインするので、シミュレーターやUIテストに必要なGUIセッションがあります。
  • +Xcodeはインストール済みで、バージョンが固定されています。ジョブの中でxcode-selectかDEVELOPER_DIRを使ってバージョンを選んでください。GitHubと同じ方法です。
  • +GitHubのランナーを使わないなら削除してください。そのまま待機させておいても構いません。ジョブが来なければ何もコストはかかりません。

まずTailscaleで接続し、runnerとしてSSHでログインします。手順は セットアップのドキュメントのステップ1と同じです。

GitLab

GitLabのホステッドmacOSランナーは、Linuxの数倍の単価で課金されます。GitLab Runnerを入れた専用Macは、同じことを固定料金で実現します。

  1. 01

    公式のバイナリをインストールします。GitLabはHomebrewのformulaを保守しておらず、こちらを推奨しています。

    sudo mkdir -p /usr/local/bin
    sudo curl --output /usr/local/bin/gitlab-runner \
      "https://s3.dualstack.us-east-1.amazonaws.com/gitlab-runner-downloads/latest/binaries/gitlab-runner-darwin-arm64"
    sudo chmod +x /usr/local/bin/gitlab-runner
  2. 02

    プロジェクトかグループでCI/CDの設定を開き、ランナーを作成してトークンをコピーします。次にMac上で登録します。

    gitlab-runner register --url https://gitlab.com --token <runner-token> --executor shell
  3. 03

    runnerユーザーのサービスとしてインストールし、起動します。SSHではなく、デスクトップセッション(画面共有)のターミナルから実行してください。

    cd ~
    gitlab-runner install
    gitlab-runner start
  4. 04

    ランナーにタグ(たとえばmacos、xcode)を付け、.gitlab-ci.ymlのジョブでそのタグを指定します。

GitLabの完全なガイドを読む

Bitbucket Pipelines

AtlassianはホステッドのmacOSランナーを一切提供していません。BitbucketでiOSをビルドするなら、Macをセルフホストするしかありません。まさにこれがその方法です。

  1. 01

    ランナーにはJavaが必要です。Homebrewでインストールします。

    brew install openjdk@17
  2. 02

    Bitbucketで「Repository settings」(または「Workspace settings」)から「Runners」を開き、macOSタイプのランナーを追加します。Bitbucketが起動コマンドを表示します。アカウント、リポジトリ、ランナーのIDとOAuthクライアントが含まれています。表示されたとおりにコピーしてください。

  3. 03

    Mac上のtmuxセッションの中でそのコマンドを実行します。ログイン時に起動するよう、LaunchAgentにまとめても構いません。

    tmux new -s bitbucket
    # paste the start command Bitbucket gave you
  4. 04

    bitbucket-pipelines.ymlで、ステップに runs-on: [self.hosted, macos] と、選んだラベルを指定します。

Buildkite

Buildkiteはもともと、実行環境を自分で用意する設計です。専用MacこそBuildkiteのiOSパイプラインが想定する環境です。

  1. 01

    BuildkiteのHomebrew tapからエージェントをインストールします。最近のHomebrewでは、先にサードパーティのtapを信頼するよう求められます。

    brew tap buildkite/buildkite
    brew trust buildkite/buildkite
    brew install buildkite/buildkite/buildkite-agent
  2. 02

    設定ファイルにエージェントトークンを書き込み、サービスとして起動します。

    sed -i '' 's/xxx/<your-agent-token>/' "$(brew --prefix)/etc/buildkite-agent/buildkite-agent.cfg"
    brew services start buildkite/buildkite/buildkite-agent@3
  3. 03

    同じ設定ファイルにキューやタグのルールを追加し、パイプラインのステップからそれを指定します。

Buildkiteの完全なガイドを読む

CircleCI

CircleCIのホステッドmacOSは、GitHubと同じく従量課金です。CircleCIのセルフホスト用machine runnerはmacOSで動き、外向きに接続します。

  1. 01

    CircleCIでセルフホストランナー用のリソースクラスを作成し、ランナートークンを発行します。

  2. 02

    CircleCIのHomebrew tapからmachine runnerをインストールします。UIに表示されるmacOS用の設定手順に従ってください。ランナーの設定ファイルにトークンとリソースクラスを設定する手順です。

  3. 03

    ランナーをサービスとして起動し、config.ymlのジョブからリソースクラスを指定します。

CircleCIはランナーのインストール手順を頻繁に変更します。macOS向けセルフホストランナーのインストールページにある、正確なコマンドに従ってください。

CircleCIの完全なガイドを読む

Azure Pipelines

MicrosoftのホステッドmacOSエージェントは、並列実行数に制限があります。セルフホストのmacOSエージェントは、正式にサポートされた選択肢です。

  1. 01

    Azure DevOpsで「Organization settings」から「Agent pools」を開き、エージェントを追加します。表示されるmacOS用エージェントのパッケージをダウンロードします。

  2. 02

    runnerのホームディレクトリに展開します。Agent Poolsの読み取りと管理のスコープを持つ個人用アクセストークンで設定します。

    mkdir ~/azagent && cd ~/azagent && tar zxvf ~/Downloads/vsts-agent-osx-arm64-*.tar.gz
    ./config.sh
  3. 03

    サービスとしてインストールし、起動します。

    ./svc.sh install
    ./svc.sh start
  4. 04

    パイプラインでそのプールを指定します: pool: { name: <your-pool> }。

Jenkins

Jenkinsを使うチームは、すでに自前のエージェントを運用しています。インバウンドエージェントを使えば、Macからコントローラーへ外向きに接続するので、受信ポートは不要です。

  1. 01

    Java 21をインストールします。現在のJenkins LTSでは、エージェントにもJava 21か25が必要です。

    brew install openjdk@21
  2. 02

    Jenkinsで新しいノードを追加し、起動方法に「Launch agent by connecting it to the controller」を選びます。Jenkinsがagent.jarのダウンロード先と、シークレット付きの正確な実行コマンドを表示します。

  3. 03

    Mac上のtmuxの中でそのコマンドを実行します。再起動後に再接続するよう、LaunchAgentとして動かしても構いません。

    tmux new -s jenkins
    curl -sO https://<your-jenkins>/jnlpJars/agent.jar
    # then the java -jar agent.jar ... command Jenkins gave you
  4. 04

    ノードにmacosというラベルを付け、対象のジョブをそのラベルに限定します。

Jenkinsの完全なガイドを読む

同じマシン、同じ料金。

申し込みフォームでお使いのCIシステムを選んでください。URLは任意です。ただし不正利用チェックだけは、URLがあるほうがスムーズに通ります。