- MacOS での制限事項
- GitLab Runner の更新
- サービスファイルのアップグレード
- GitLab Runner Service で codesign を使用する場合
-
MacOSのトラブルシューティング
"launchctl" failed: exit status 112, Could not find domain for
Failed to authorize rights (0x1) with status: -60007.
fatal: unable to access 'https://path:3000/user/repo.git/': Failed to connect to path port 3000: Operation timed out
ジョブのエラーFATAL: Failed to start gitlab-runner: "launchctl" failed with stderr: Load failed: 5: Input/output error
ongitlab-runner start
commandERROR: Error on fetching TLS Data from API response... error error=couldn't build CA Chain
MacOSにGitLab Runnerをインストールします。
GitLab RunnerはmacOSにインストールしてアップデートすることができます。
-
システム用のバイナリをダウンロードします:
-
インテルベースのシステムの場合:
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で説明されているように、利用可能なすべてのバージョンのバイナリをダウンロードできます。
-
-
実行権限を与えます:
sudo chmod +x /usr/local/bin/gitlab-runner
-
Runnerを実行するユーザーとして:
-
ランナーを登録します。iOSやMacOSのアプリケーションをmacOS上でビルドする場合は、Shell Executorを使用します。ジョブはホスト上で直接実行され、ログインユーザーのIDが使用されます。ジョブはコンテナ内で実行されないため、コンテナエグゼキュータを使用するよりもセキュリティが低くなります。詳細は、セキュリティに関するドキュメントを参照してください。
-
ターミナルを開き、現在のユーザーに切り替えます。
su - <username>
-
GitLab Runnerをサービスとしてインストールし、起動します:
cd ~ gitlab-runner install gitlab-runner start
-
-
システムを再起動します。
これらの指示に従った場合、GitLab Runner 設定ファイル (config.toml
) は/Users/<username>/.gitlab-runner/
にあります。Runner の設定についてはこちらをご覧ください。
MacOS での制限事項
現在のユーザーとしてログインするには、ターミナルでコマンド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 の更新
-
サービスを停止
gitlab-runner stop
-
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で説明されているように、利用可能なすべてのバージョンのバイナリをダウンロードできます。
-
-
実行権限を与えます:
sudo chmod +x /usr/local/bin/gitlab-runner
-
サービスを開始します:
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つあります:
-
ユーザーがUIインタラクションを実行できることを確認してください:
DevToolsSecurity -enable sudo security authorizationdb remove system.privilege.taskport is-developer
最初のコマンドは、ユーザーの開発者ツールへのアクセスを可能にします。2つ目のコマンドは、開発者グループのメンバーであるユーザーが UI インタラクション (例えば iOS シミュレータの実行) を行えるようにします。
-
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.plist
でSessionCreate
がfalse
に設定されていることを確認できます。
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
このエラーに遭遇した場合は、次のことを行う必要があります:
- GitLab Runner v15.5.1以降にアップグレードしてください。
-
[runners.feature_flags]
設定でFF_RESOLVE_FULL_TLS_CHAIN
をfalse
に設定します。例えば
[[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 接続の問題を解決できる場合があります。