-
一般的なトラブルシューティング
coordinator
とはどういう意味ですか?- サービスとして実行した場合、ログはどこに保存されますか?
--debug
モードでの実行- 私が見ているのは
x509: certificate signed by unknown authority
- にアクセスすると
Permission Denied
が表示されます。/var/run/docker.sock
- Javaプロジェクトのビルド時にDocker executorがタイムアウトする問題
- アーティファクトのアップロード中に411が表示されます。
warning: You appear to have cloned an empty repository.
zoneinfo.zip: no such file or directory
エラーは、Timezone
またはOffPeakTimezone
- なぜ Runner のインスタンスを複数実行できないのですか?
Job failed (system failure): preparing environment:
- Windowsのトラブルシューティング
- MacOSトラブルシューティング
GitLab Runnerのトラブルシューティング
このセクションは、GitLab Runnerのトラブルシューティングの際に役立ちます。
一般的なトラブルシューティング
以下は、一般的なランナーのトラブルシューティングに関するものです。
coordinator
とはどういう意味ですか?
coordinator
はジョブをリクエストする GitLab インストールです。
言い換えれば、runnerは、coordinator
によって要求されたジョブをピックアップする分離された(仮想)マシンです。
サービスとして実行した場合、ログはどこに保存されますか?
- GitLab RunnerがLinux/MacOS上でサービスとして実行されている場合、デーモンはsyslogにログを記録します。
- GitLab RunnerがWindows上でサービスとして実行されている場合、システムのイベントログに記録されます。
--debug
モードでの実行
GitLab Runnerをデバッグ/verboseモードで実行することは可能ですか? ターミナルから実行してください:
gitlab-runner --debug run
私が見ているのはx509: certificate signed by unknown authority
自己署名証明書をご覧ください。
にアクセスするとPermission Denied
が表示されます。/var/run/docker.sock
Dockerのexecutorを使用したい場合、サーバにインストールされたDocker Engineに接続すると、Permission Denied
のエラーが表示されます。 最も可能性の高い原因は、システムがSELinux(CentOS、Fedora、RHELではデフォルトで有効)を使用していることです。 あなたのシステムのSELinuxポリシーを確認して、拒否の可能性がないか確認してください。
Javaプロジェクトのビルド時にDocker executorがタイムアウトする問題
これは、AUFSストレージ・ドライバが壊れているために起こる可能性が高いです。
Dockerの設定と実行についてはこちらの記事を、systemdによる制御と設定についてはこちらの記事をご覧ください。
アーティファクトのアップロード中に411が表示されます。
これはrunnerがTransfer-Encoding: chunked
。これはNGINXの初期バージョン(https://serverfault.com/questions/164220/is-there-a-way-to-avoid-nginx-411-content-length-required-errors)では壊れています。
NGINXを新しいバージョンにアップグレードしてください。 詳細については、このイシューを参照してください:https://gitlab.com/gitlab-org/gitlab-runner/-/issues/1031
warning: You appear to have cloned an empty repository.
HTTP(s) を使ってgit clone
を実行するとき(GitLab Runner を使うか、手動でテストするとき)、次のような出力が表示されます:
$ git clone https://git.example.com/user/repo.git
Cloning into 'repo'...
warning: You appear to have cloned an empty repository.
GitLabサーバーのインストールでHTTP Proxyの設定が正しく行われていることを確認してください。 特に、独自の設定を持つHTTP Proxyを使用している場合は、GitLabのリクエストがGitLabUnicornソケットではなく、GitLab Workhorseソケットにプロキシされることを確認してください。
HTTP(S) 経由のGitプロトコルはGitLab Workhorseによって解決されるので、これがGitLabの主なエントリポイントです。
Omnibus GitLabを使用しているが、バンドルされているNGINXサーバーを使用したくない場合は、バンドルされていないWebサーバーを使用するをお読みください。
GitLab Recipesリポジトリには、ApacheとNGINXのウェブサーバー設定例があります。
ソースからインストールしたGitLabを使用している場合は、上記のドキュメントと例も読み、すべてのHTTP(S) トラフィックがGitLab Workhorseを経由していることを確認してください。
ユーザーのイシューの例をご覧ください。
zoneinfo.zip: no such file or directory
エラーは、Timezone
またはOffPeakTimezone
[[docker.machine.autoscaling]]
この機能は、ほとんどのUnixシステムですぐに動作するはずです。しかし、いくつかのUnixシステム、そしておそらくほとんどの非Unixシステム(Runnerのバイナリを提供しているWindowsを含む)では、Runnerを使用すると、開始時に次のようなエラーでクラッシュします:
Failed to load config Invalid OffPeakPeriods value: open /usr/local/go/lib/time/zoneinfo.zip: no such file or directory
このエラーはGoのtime
パッケージが原因です。 Goは指定されたタイムゾーンの設定をロードするためにIANAタイムゾーンデータベースを使用します。 ほとんどのUnixシステムでは、このデータベースはよく知られたパス(/usr/share/zoneinfo
,/usr/share/lib/zoneinfo
,/usr/lib/locale/TZ/
)のいずれかにすでに存在します。 Goのtime
パッケージは、これら3つのパスすべてからタイムゾーンデータベースを探します。 そのどれもが見つからなかった場合でも、マシンにGo開発環境が設定されている場合は、$GOROOT/lib/time/zoneinfo.zip
ファイルにフォールバックします。
これらのパスが1つも存在しない場合(たとえば、本番Windowsホスト上)、上記のエラーが発生します。
お使いのシステムがIANAタイムゾーンデータベースをサポートしているが、デフォルトでは利用できない場合は、インストールしてみてください。 Linuxシステムの場合は、例えば以下の方法でインストールできます:
# on Debian/Ubuntu based systems
sudo apt-get install tzdata
# on RPM based systems
sudo yum install tzdata
# on Linux Alpine
sudo apk add -U tzdata
お使いのシステムがこのデータベースを_ネイティブな_方法で提供していない場合は、以下の手順でOffPeakTimezone
を動作させることができます:
-
zoneinfo.zip
のダウンロード . バージョンv9.1.0から、タグ付きパスからファイルをダウンロードできるようになりました。その場合、zoneinfo.zip
のダウンロードURLで、latest
をタグ名(例えば、v9.1.0
)に置き換えてください。 -
このファイルをよく知られているディレクトリに保存します。
config.toml
ファイルが存在するのと同じディレクトリを使用することをお勧めします。例えば、WindowsマシンでRunnerをホストしていて、設定ファイルがC:\gitlab-runner\config.toml
に保存されている場合、zoneinfo.zip
をC:\gitlab-runner\zoneinfo.zip
に保存します。 -
zoneinfo.zip
ファイルへのフルパスを含むZONEINFO
環境変数を設定します。run
コマンドを使用して Runner を起動する場合は、次のようにします:ZONEINFO=/etc/gitlab-runner/zoneinfo.zip gitlab-runner run <other options ...>
またはWindowsを使用している場合:
C:\gitlab-runner> set ZONEINFO=C:\gitlab-runner\zoneinfo.zip C:\gitlab-runner> gitlab-runner run <other options ...>
システムサービスとしてRunnerを起動している場合、サービスマネージャーソフトウェア(UNIXシステム)またはシステム設定(Windows)からRunnerのユーザーが使用できる環境変数のリストに
ZONEINFO
変数を追加して、サービス設定を更新/上書きする必要があります。
なぜ Runner のインスタンスを複数実行できないのですか?
可能ですが、同じconfig.toml
ファイルを共有することはできません。
同じ設定ファイルを使用して複数のRunnerインスタンスを実行すると、予期しない動作やデバッグしにくい動作が発生することがあります。 GitLabRunner 12.2では、一度に特定のconfig.toml
ファイルを使用できるRunnerインスタンスは1つだけです。
Job failed (system failure): preparing environment:
このエラーは多くの場合、shellがプロファイルを読み込んでいて、スクリプトの1つが失敗の原因になっています。
失敗の原因となることが知られているドットファイルの例:
.bash_logout
.condarc
.rvmrc
Windowsのトラブルシューティング
以下は、Windows上のRunnerのトラブルシューティングに関するものです。
Windows でビルド中に PathTooLongException が発生します。
これは、npm
のようなツールが、260文字以上のパスを持つディレクトリ構造を生成してしまうために起こります。この問題を解決するために、2つの修正が考えられます。
a) core.longpathsを有効にしてgitを使用します。
まずコマンドラインからgit config --system core.longpaths true
を実行し、GitLab CI のプロジェクト設定ページからgit fetch
を使うようにプロジェクトを設定してください。
b) PowerShell用のNTFSSecurityツールを使用します。
NTFSSecurityPowerShellモジュールは、長いパスをサポートするRemove-Item2メソッドを提供します。 GitLab CI Multi Runnerは、それが利用可能な場合、それを検出し、自動的にそれを使用します。
WindowsのBashスクリプトを実行できません。The system cannot find the batch label specified - buildscript
call C:\path\to\test.bat
のように見えるように、.gitlab-ci.yml
のバッチファイル行の先頭にcall
を追加する必要があります。以下は、より完全な例です:
before_script:
- call C:\path\to\test.bat
詳細はイシュー#1025をご覧ください。
ウェブターミナルで色のついた出力を得るにはどうすればよいですか?
短い答えです:
プログラムの出力にANSIカラーコードがあることを確認してください。 テキストのフォーマットのために、UNIXのANSIターミナルエミュレータで実行していると仮定してください(WebUIの出力がそうなっているからです)。
長い答えです:
GitLab CI のウェブインターフェイスは UNIX ANSI ターミナルを(少なくとも部分的に)エミュレートしています。gitlab-runner
はビルドからの出力をウェブインターフェイスに直接パイプします。 つまり、ANSI カラーコードがあれば、それに従います。
Windows の CMD 端末の古いバージョン(Win10 バージョン 1511 以前)は ANSI カラーコードをサポートしていません - 代わりに win32 (ANSI.SYS
) 呼び出しを使いますが、これは表示する文字列には存在しません。 クロスプラットフォームのプログラムを書く場合、開発者は通常デフォルトで ANSI カラーコードを使い、Windows システム上で実行するときに win32 呼び出しに変換します(例:Colorama)。
もし、あなたのプログラムが上記のことを行っているのであれば、ANSIコードが文字列の中に残るように、CIビルドではその変換を無効にする必要があります。
PowerShell を使った例については GitLab CI YAML ドキュメントを、詳細についてはイシュー#332を参照してください。
The service did not start due to a logon failure
サービス開始時のエラー
WindowsでGitLab Runnerサービスをインストールして起動すると、このようなエラーが発生することがあります:
gitlab-runner install --password WINDOWS_MACHINE_PASSWORD
gitlab-runner start
FATA[0000] Failed to start GitLab Runner: The service did not start due to a logon failure.
このエラーは、サービスの実行に使用されるユーザーにSeServiceLogonRight
権限がない場合に発生する可能性があります。このような場合は、選択したユーザーにこの権限を追加してから、サービスを再度起動してみてください。
SeServiceLogonRight
、2つの方法で追加できます:
- 管理ツールを手動で使用します:
- コントロールパネル」>「システムと_セキュリティ」>「管理ツール_」を開きます、
- _ローカルセキュリティポリシーツールを_開きます、
- 左側のリストで、[セキュリティ_設定] > [ローカルポリシー] > [ユーザー権限の割り当て_] を選択します、
- 右側のリストにある「サービスとしてログオン」を開きます、
- ユーザーまたはグループの追加…ボタンをクリックします、
-
ユーザーを追加し(「手入力」または「詳細設定…」ボタンを使用)、設定を適用します。
Windows Vista、Windows Server 2008、Windows 7、Windows 8.1、Windows Server 2008 R2、Windows Server 2012 R2、Windows Server 2012、Windows 8。
注意:Windowsのバージョンによっては、_ローカルセキュリティポリシーツールが_利用できない場合があります。
- コマンドラインから、
Ntrights.exe
ツールを使用します:- マイクロソフトのダウンロードサイトからツールをダウンロードしてください、
-
ntrights.exe ntrights +r SeServiceLogonRight -u USER_NAME_HERE
を実行します(ntrights.exe
実行ファイルのフルパスを指定するか、システムのPATH
環境変数にそのパスを追加する必要があることを覚えておいてください)。注意:このツールは2003年に作成され、当初はWindows XPとWindows Server 2003で使用するように設計されていました。マイクロソフトのサイトでは、Windows 7とWindows Server 2008 R2に適用する使用例
Ntrights.exe
。この解決策はテストされておらず、ソフトウェアの古さのため、最新のWindowsバージョンでは動作しない可能性があります。
サービス・コンフィギュレーションで使用されているユーザーのSeServiceLogonRight
を追加した後、コマンドgitlab-runner start
は失敗することなく終了し、サービスは正しく開始されるはずです。
Kubernetesのexecutorを使用して、成功としてマークされたジョブが途中で終了した場合
ジョブ実行をご覧ください。
MacOSトラブルシューティング
以下は、MacOS上のRunnerのトラブルシューティングに関するものです。
"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を使用しているときにRunnerが上記のメッセージで止まってしまう場合、2つの原因が考えられます:
-
ユーザーがUIインタラクションを実行できるようにしましょう:
DevToolsSecurity -enable sudo security authorizationdb remove system.privilege.taskport is-developer
最初のコマンドは開発者ツールへのアクセスを可能にし、2番目のコマンドは開発者グループのメンバーであるユーザがUIインタラクション、例えばiOSシミュレータを実行することを可能にします。
-
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インスタンスに接続できることを確認してください。 接続がブロックされている可能性があります:
- ファイアウォール
- 代理人
- 権限
- ルーティング設定