MacOSにGitLab Runnerをインストールします。

GitLab RunnerはmacOSにインストールしてアップデートすることができます。

  1. システム用のバイナリをダウンロードします:

    • インテルベースのシステムの場合:

       sudo curl --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64"
      
    • Apple Siliconベースのシステムの場合:

       sudo curl --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-arm64"
      

    Bleeding Edgeで説明されているように、利用可能なすべてのバージョンのバイナリをダウンロードできます。

  2. 実行権限を与えます:

    sudo chmod +x /usr/local/bin/gitlab-runner
    
  3. Runnerを実行するユーザーとして:

    1. ランナーを登録します。iOSやMacOSのアプリケーションをmacOS上でビルドする場合は、Shell Executorを使用します。ジョブはホスト上で直接実行され、ログインユーザーのIDが使用されます。ジョブはコンテナ内で実行されないため、コンテナエグゼキュータを使用するよりもセキュリティが低くなります。詳細は、セキュリティに関するドキュメントを参照してください。

    2. ターミナルを開き、現在のユーザーに切り替えます。

      su - <username>
      
    3. GitLab Runnerをサービスとしてインストールし、起動します:

      cd ~
      gitlab-runner install
      gitlab-runner start
      
  4. システムを再起動します。

これらの指示に従った場合、GitLab Runner 設定ファイル (config.toml) は/Users/<username>/.gitlab-runner/ にあります。Runner の設定についてはこちらをご覧ください。

MacOS での制限事項

note
サービスは、現在のユーザーとしてログインしたターミナルウィンドウからインストールする必要があります。その場合のみサービスを管理することができます。

現在のユーザーとしてログインするには、ターミナルでコマンドsu - <username> を実行します。ユーザー名はls /users コマンドを実行することで取得できます。

現在のところ、MacOSで動作することが証明されている唯一の方法は、ユーザーモードでサービスを実行することです。

サービスが実行されるのはユーザーがログインしているときだけなので、MacOSマシンで自動ログインを有効にする必要があります。

サービスはLaunchAgent として起動されます。LaunchAgents を使用することで、ビルドはUIインタラクションを実行することができ、iOSシミュレータでの実行とテストが可能になります。

MacOS にも、LaunchDaemons完全にバックグラウンドで動作する , サービスがあることは注目に値します。 LaunchDaemonsこれらはシステム起動時に実行されますが、LaunchAgentsのように UI インタラクションにアクセスすることはできません。RunnerのサービスをLaunchDaemon として実行しようとすることもできますが、このオペレーション・モードは現在サポートされていません。

GitLab Runner がinstall コマンドを実行した後にサービス設定ファイルを作成したことは、~/Library/LaunchAgents/gitlab-runner.plist ファイルを確認することで確認できます。

Homebrew を使ってgit をインストールした場合は、/usr/local/etc/gitconfig ファイルが追加されている可能性があります:

[credential]
        helper = osxkeychain

これはGitにユーザー認証情報をキーチェーンにキャッシュするように指示します。この行はシステムgitconfig から削除することができます:

git config --system --unset credential.helper

あるいは、GitLab ユーザーのcredential.helper を無効にすることもできます:

git config --global --add credential.helper ''

credential.helper

git config credential.helper

GitLab Runner の更新

  1. サービスを停止

    gitlab-runner stop
    
  2. GitLab Runner実行ファイルを置き換えるバイナリをダウンロードします:

    • インテルベースのシステムの場合:

       sudo curl -o /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64"
      
    • Apple Siliconベースのシステムの場合:

       sudo curl -o /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-arm64"
      

    Bleeding Edgeで説明されているように、利用可能なすべてのバージョンのバイナリをダウンロードできます。

  3. 実行権限を与えます:

    sudo chmod +x /usr/local/bin/gitlab-runner
    
  4. サービスを開始します:

    gitlab-runner start
    

GitLab Runnerのよくある問題についてはFAQセクションを読んでください。

サービスファイルのアップグレード

LaunchAgent 設定をアップグレードするには、サービスをアンインストールしてインストールする必要があります:

gitlab-runner uninstall
gitlab-runner install
gitlab-runner start

GitLab Runner Service で codesign を使用する場合

Homebrewでgitlab-runner をmacOSにインストールし、ビルドがcodesign を呼び出す場合、ユーザーキーチェーンにアクセスするために<key>SessionCreate</key><true/> を設定する必要があるかもしれません。GitLabはHomebrewの公式をメンテナーしていないので、GitLab Runnerをインストールするには公式のバイナリを使うべきです。

次の例では、gitlab ユーザーとしてビルドを実行し、そのユーザーによってインストールされた署名用証明書にアクセスしてコード署名を行います:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>SessionCreate</key><true/>
    <key>KeepAlive</key>
    <dict>
      <key>SuccessfulExit</key>
      <false/>
    </dict>
    <key>RunAtLoad</key><true/>
    <key>Disabled</key><false/>
    <key>Label</key>
    <string>com.gitlab.gitlab-runner</string>
    <key>UserName</key>
    <string>gitlab</string>
    <key>GroupName</key>
    <string>staff</string>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/local/opt/gitlab-runner/bin/gitlab-runner</string>
      <string>run</string>
      <string>--working-directory</string>
      <string>/Users/gitlab/gitlab-runner</string>
      <string>--config</string>
      <string>/Users/gitlab/gitlab-runner/config.toml</string>
      <string>--service</string>
      <string>gitlab-runner</string>
      <string>--syslog</string>
    </array>
    <key>EnvironmentVariables</key>
    <dict>
      <key>PATH</key>
      <string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
    </dict>
  </dict>
</plist>

MacOSのトラブルシューティング

以下は、MacOSのトラブルシューティングに関するものです。

"launchctl" failed: exit status 112, Could not find domain for

このメッセージは、MacOSにGitLab Runnerをインストールしようとすると表示されることがあります。SSH接続ではなく、GUIターミナルアプリケーションからGitLab Runnerサービスを管理していることを確認してください。

Failed to authorize rights (0x1) with status: -60007.

MacOSを使用しているときにGitLab Runnerが上記のメッセージに引っかかる場合、この現象が起こる原因は2つあります:

  1. ユーザーがUIインタラクションを実行できることを確認してください:

    DevToolsSecurity -enable
    sudo security authorizationdb remove system.privilege.taskport is-developer
    

    最初のコマンドは、ユーザーの開発者ツールへのアクセスを可能にします。2つ目のコマンドは、開発者グループのメンバーであるユーザーが UI インタラクション (例えば iOS シミュレータの実行) を行えるようにします。

  2. GitLab RunnerサービスがSessionCreate = true を使用していないことを確認してください。以前は、GitLab Runner をサービスとして実行する場合、SessionCreate を使ってLaunchAgents を作成していました。その時点(Mavericks)では、これがコード署名を機能させるための唯一の解決策でした。それが最近、OS X El Capitanで多くの新しいセキュリティ機能が導入され、この動作が変わりました。GitLab Runner 1.1 以降、LaunchAgentを作成するときにSessionCreateを設定しません。しかし、アップグレードするにはLaunchAgent スクリプトを手動で再インストールする必要があります:

    gitlab-runner uninstall
    gitlab-runner install
    gitlab-runner start
    

    そうすれば、~/Library/LaunchAgents/gitlab-runner.plistSessionCreatefalse に設定されていることを確認できます。

fatal: unable to access 'https://path:3000/user/repo.git/': Failed to connect to path port 3000: Operation timed out ジョブのエラー

このエラーでジョブが失敗した場合は、RunnerがGitLabインスタンスに接続できることを確認してください。接続がブロックされている可能性があります:

  • ファイアウォール
  • プロキシ
  • 権限
  • ルーティング設定

FATAL: Failed to start gitlab-runner: "launchctl" failed with stderr: Load failed: 5: Input/output error ongitlab-runner start command

gitlab-runner start コマンドの実行時にこのエラーが発生した場合は、~/Library/LaunchAgents/gitlab-runner.plist の値StandardOutPath およびStandardErrorPath で指定されたディレクトリが存在することを確認してください:

<key>StandardOutPath</key>
<string>/usr/local/var/log/gitlab-runner.out.log</string>
<key>StandardErrorPath</key>
<string>/usr/local/var/log/gitlab-runner.err.log</string>

ディレクトリーが存在しない場合は、それらを作成し、Runnerサービス・ユーザーに適切な読み書き権限があることを確認してください。

ERROR: Error on fetching TLS Data from API response... error error=couldn't build CA Chain

GitLab Runner v15.5.0以降にアップグレードした場合、以下のエラーが発生する可能性があります:

Certificate doesn't provide parent URL: exiting the loop  Issuer=Baltimore CyberTrust Root IssuerCertURL=[] Serial=33554617 Subject=Baltimore CyberTrust Root context=certificate-chain-build
Verifying last certificate to find the final root certificate  Issuer=Baltimore CyberTrust Root IssuerCertURL=[] Serial=33554617 Subject=Baltimore CyberTrust Root context=certificate-chain-build
ERROR: Error on fetching TLS Data from API response... error  error=couldn't build CA Chain: error while fetching certificates from TLS ConnectionState: error while fetching certificates into the CA Chain: couldn't resolve certificates chain from the leaf certificate: error while resolving certificates chain with verification: error while verifying last certificate from the chain: x509: “Baltimore CyberTrust Root” certificate is not permitted for this usage runner=x7kDEc9Q

このエラーに遭遇した場合は、次のことを行う必要があります:

  1. GitLab Runner v15.5.1以降にアップグレードしてください。
  2. [runners.feature_flags] 設定FF_RESOLVE_FULL_TLS_CHAINfalse に設定します。例えば
    [[runners]]
  name = "ruby-2.7-docker"
  url = "https://CI/"
  token = "TOKEN"
  executor = "docker"
  [runners.feature_flags]
    FF_RESOLVE_FULL_TLS_CHAIN = false

この機能フラグを無効にすると、SHA-1 署名またはその他の非推奨アルゴリズムで署名されたルート証明書を使用する HTTPS エンドポイントの TLS 接続の問題を解決できる場合があります。