【GitLab 公式 を訳してみた】GitLab Runner FAQ

法律: IT 解説記事 GitLab CI フノス(訳者) マニュアル

GitLab Runner>GitLab Runner FAQ

 目次:
>「coordinator」の意味って?
>サービスを実行したときのログはどこに保管されているの?
>デバッグ(--debug)モードで動作させる方法は?
>Windowsでビルドする際に、PathTooLongExceptionを取得する
>「x509: certificate signed by unknown authority」という文字が表示されます。
>Javaプロジェクトをビルドしていると、Dockerエクゼキュータがタイムアウトする。
>アーティファクツをアップロードすると、411エラーが表示される。
>Windows BASHスクリプトが使えない! (『The system cannot find the batch label specified - buildscript』という文字が表示されていませんか?)
>GitLab RunnerをWindowsに導入しています。ウェブターミナルで出力する時に、色分けを可能にする方法を教えてください。
>"warning: You appear to have cloned an empty repository."と表示される
>「"launchctl" failed: exit status 112, Could not find domain for」が表示された
>「Failed to authorize rights (0x1) with status: -60007.」と表示された
>Windowsでランナーのサービスを開始したときに、「The service did not start due to a logon failure」とエラーが表示された
>OffPeakTimezoneを使っていたら、「zoneinfo.zip: no such file or directory error」というエラーが表示された




 
 

  このページはユーザーの皆様から頻繁にお寄せいただいている質問にお答えしています。

 

  「coordinator」の意味って?

  「coordinator」とは、jobを実行する時に必要とされるGitLabの装置です。

  ランナーは独立した(仮想)マシンにインストールされています。これがjobを実行する時に、jobに何が必要とされているかを抜き出してくれるのが、この装置です。

 

  サービスを実行したときのログはどこに保管されているの?

  GitLab Runnerが、LinuxもしくはOSXで動作している場合、デーモンのログはsyslogに保管されます。
 Windowsで動作している場合は、システムのイベントログに保管されます。


  デバッグ(--debug)モードで動作させる方法は?

  GitLab Runnerは、デバッグ(冗長)モードで動作させることが可能です。
 ターミナルから次のコマンドを打ってください。

======================
gitlab-runner --debug run
======================

 

  Windowsでビルドする際に、PathTooLongExceptionを取得する

  npmなどのツール群を使う際に、よく起こりがちなのが、ディレクトリ構造を生成するときに、パスが260文字以上になってしまう問題です。
 これには2つの解決方法があります。
 

 a) 「core.longpaths」を許可してから、Gitを使う。

  これにより、ディレクトリ構造を整理してからGitを使うことができます。
コマンドラインから「git config --system core.longpaths true」と打ち込んで、GitLab CIプロジェクトの「settings」ページから、この設定を適用したGitを使うようにセットします。
 

 b) パワーシェルからNTFSSecurityツールを使う。

  NTFSSecurityとは、パワーシェルのモジュールの一種で、文字数の多いパスに対応するための「Remove-Item2」メゾットに対応しています。
 このモジュールの動作を許可すると、Gitlab CI Multi Runner がそれが探知して自動的に適用してくれます。

 

  x509: certificate signed by unknown authority」という文字が表示されます。

  詳しくはself-signed certificates をご覧ください。

 

  「/var/run/docker.sock」にアクセスすると、「Permission Denied」という文字が表示された

  これは、Dockerをエクゼキュータに使用している場合に当てはまります。
 上のファイルは、サーバーにインストールされているDockerエンジンに接続しているときに使われます。
 「Permission Denied」エラーは、SELinux ( CentOS、Fedora、RHELなどのOSではデフォルトで許可されている。)が動作している場合に起こることが多いようです。
 現在ご使用なさっているOSのSeLinuxのルールをよく見て、SeLinuxを停止させられるかどうかを確認してください。

 

  Javaプロジェクトをビルドしていると、Dockerエクゼキュータがタイムアウトする。

  このような事例は、AUFSストレージドライバーが破損している際に発生することが多くあります。このドライバーはコンテナ内部で、Javaプロセスを掌握する役目があります。
 この場合の有効な解決策は、ストレージドライバーを他の種類のものに替えてしまうことです。この種のものには、OverlayFS (faster)や、DeviceMapper (slower)があります。

  こちらに、Dockerを運用するための設定について述べられた記事と、Dockerをsystemdで操作する方法について述べられた記事とがあります。ぜひご覧ください。

 

  アーティファクツをアップロードすると、411エラーが表示される。

  初期バージョンのNginxをシステムにしている場合、ランナーによって「Transfer-Encoding: chunked」が使用されます。これが何らかの理由で破損すると、411エラーが表示されます。
(詳しくは:http://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


 

  Windows BASHスクリプトが使えない! (『The system cannot find the batch label specified - buildscript』という文字が表示されていませんか?)

  この場合皆さんは、.gitlab-ci.ymlでバッチファイルを「call」する必要があります(例:call C:\path\to\test.bat)。

  このコマンドは、.gitlab-ci.ymlファイルの「before_script」に配置してください。

======================
before_script:
  - call C:\path\to\test.bat
======================

  詳しくは、issue #1025に記載されています。

 

  GitLab RunnerをWindowsに導入しています。ウェブターミナルで出力する時に、色分けを可能にする方法を教えてください。

応急処置:プログラムをアウトプットする時に、ANSIカラーコードを使えるようにする。この方法でテキスト形式ファイルを表示する時には、UNIX ANSIターミナルエミュレータを使うようにしてください。(ウェブUIを出力できるように。)

 解説:

 gitlab-ciを表示するためのウェブインターフェイスには、UNIX ANSIターミナルを使うと書きましたね。(これ以外は推奨外)
 すると、gitlab-runnerはbuildディレクトリに出力されたものならすべて、インターフェイスに表示するようになります。このエミュレータと相性が良いのが、ANSIカラーコードなんですね。
 

  ただし、WindowsのCMDターミナル((つまり、Win10以前である →出典)の場合、ANSIカラーコードに対応していません。こういうときは、win32 (ANSI.SYS) を代わりに使うとよいでしょう。
 様々なプラットフォームでファイルを記述しているときには、デフォルトでANSIカラーコードを使うことが典型的です。しかし、Windowsで使っているシステムに応じて、win32に切り替える準備はしておくことをお勧めします。(例:Coloramaなど)

  上記のプログラムをお使いの場合は、ANSIコードのストリングを保つために、CIでのビルドは禁じる必要があります。

  詳しくはissue #332をご覧ください。


 

  "warning: You appear to have cloned an empty repository."と表示される

  git cloneする時にHTTP(s)を使っていると、次のエラーが表示されることがあります。
 これには、GitLab Runnerなどで自動的にgit cloneが行われた場合と、手動で行った場合との両方が含まれます。

======================
$ git clone https://git.example.com/user/repo.git

Cloning into 'repo'...
warning: You appear to have cloned an empty repository.
======================

  この場合、まずはGitLabサーバーをインストールする際に、正しくHTTPプロキシが設定されているかどうかを確認してください。
 特に、HTTPプロキシを設定していても、GitLab unicornソケットに接続してしまっている場合がありますが、これは誤りです。
 当方では、GitLab Workhorseソケットにプロキシを設定していただくことを推奨しています。

  Gitで利用するHTTP(S)プロトコルの問題は、GitLab WorkhorsをGitLabのメイン・エントリーポイント(main entrypoint)として使うことで解消します。

  Omnibus版をご利用の場合は、バンドルされたNginxサーバーを使わないようにしてください。詳しくは、 using a non-bundled web-serverをご覧ください。

  Apache と Nginxウェブサーバー用の設定例が、gitlab-recipes repositoryに掲載されていますので、ぜひご覧ください。

  GitLabをソースコードからインストールした場合にも、上の説明書と設定例があてはまります。いずれにせよ、その設定例に従えば、HTTP(S) トラフィックがGitLab Workhorseを介していきわたるようになります。

  こちらの「ユーザーからのイシュー」が参考になるかと思われます。


 

  "launchctl" failed: exit status 112, Could not find domain for」が表示された

  このメッセージは、OSXにインストールされたGitLab Runnerで発生するようです。
 SSHコネクションをやめた状態で、GitLab RunnerをGUIターミナル・アプリケーションで操作すると、うまくいく場合があります。

 

  Failed to authorize rights (0x1) with status: -60007.」と表示された

  このメッセージは、OSXにインストールされたGitLab Runnerで発生しますが、それにはおおよそ2つの原因が考えられます。

 どのユーザーが、UIを直接いじれるのかを設定していなかったため。

======================
DevToolsSecurity -enable

sudo security authorizationdb remove system.privilege.taskport is-developer
======================

  対策として、上記のコマンドを入力してください。
  最初のコマンドで、ユーザーが開発ツールにアクセスすることが許可されます。
 次のコマンドで、ユーザーのうち、どのグループのメンバーがUIと直接対話(たとえば、iOSシミュレーターを作動させる操作などが)できるかを設定します。

 Runnerが「SessionCreate = true」を利用していない状態なため。以前のOSバージョンでは、ランナーが「LaunchAgents」を作成する際には、「SessionCreate」を利用するように定められていました。しかし、OS X Mavericks以降から、この動作はコード署名の時にのみ使われるようになりました。セキュリティの関係上、更新版OSX El Capitanでもこの方式が採用されています。GitLab Runner 1.1から、LaunchAgentを作成するときに、SessionCreateをセットしていた従来の動作を廃止しました。GitLab Runner 1.1未満のバージョンからアップグレードする際には、LaunchAgentスクリプトの再インストール(手動)が必要となります。

======================
gitlab-runner uninstall

gitlab-runner install

gitlab-runner start
======================

  GitLab Runnerが正しいバージョンになっている場合は、「~/Library/LaunchAgents/gitlab-runner.plist」で「SessionCreate」が「false」に設定されていることがご確認いただけます。


 

  Windowsでランナーのサービスを開始したときに、「The service did not start due to a logon failure」とエラーが表示された

  これはWindowsでランナーのサービスを開始して早々に表示されることが多いようです。たとえば、次のように。

============================================
$ 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サーバーのシステムを全くよくわからずに書いています。)

 

  1. 手動で管理ツールを操作する方法
    • 「コントロールパネル>システムとセキュリティ>管理ツール」に移動
    • ローカルセキュリティーポリシーツールを開く
    • 左のリストから、「セキュリティの設定>ローカルポリシー>User Rights Assignment」を選択
    • 右側のリストから、「サービスとしてログオン」を開いて、
    • 「ユーザー/グループを追加」ボタンをクリック
    • ユーザーを追加("by hand"『手動』?⦆ あるいはAdvanced...⦅『さらに追加』?⦆ ボタンを押す)したら、設定を適用します。
    注: Microsoft's documentation の解説によると、上のような操作でユーザーに権限を与えるOSは、Windows Vista, Windows Server 2008, Windows 7, Windows 8.1, Windows Server 2008 R2, Windows Server 2012 R2, Windows Server 2012, Windows 8のみのようです。 注:ローカルセキュリティーポリシーツールは、"Home Edition"を含む多数のWindowsのバージョンで搭載されていません。ご注意ください。
  2. コマンドラインから、Ntrights.exeツールを起動する方法
    • Microsoftのダウンロードページから、Ntrights.exeツールをダウンロードします。
    • ntrights.exe ntrights +r SeServiceLogonRight -u USER_NAME_HERE」を実行します。(この前に、ntrights.exeが実行可能になるようにフルパスを与えてください。システムパスを環境変数に追加することで、フルパスを与える方法もあります。)
    注意:このツールは、2003年に制作されたものです。Windows XP、Windows Server 2003用に仕様が設計されています。 Microsoft sites サイトでは、Ntrights.exeをWindows 7やWindows Server 2008 R2で使用している事例を確認できます。 ですが、ソフト自体がかなり昔のものになりつつあることから、新しい版のWindowsでの動作は保証しかねます。

 

  「SeServiceLogonRight」権をユーザーに与えられたら、「gitlab-runner start」コマンドを入力してください。サービスが問題なく開始できたら、この設定は完了です。

 

 

 

  OffPeakTimezoneを使っていたら、「zoneinfo.zip: no such file or directory error」というエラーが表示された

 GitLab Runner v1.11.0 で、タイムゾーンを「OffPeakPeriods」から定義できるようになりました。
この機能は、主要なUnixシステムをはじめとする様々なプラットフォームで動作するはずです。
しかし、いくつかのUnixシステムや、主要な非Unix系システム(Windowsなどを含む、ランナーのバイナリが公開されているOS)では、クラッシュを起こして、次のようなエラーが表示される場合があります。

============================================
Failed to load config Invalid OffPeakPeriods value: open /usr/local/go/lib/time/zoneinfo.zip: no such file or directory
============================================

  このエラーは、Go言語のタイムパッケージの不具合が原因で発生します。

 Go言語は、IANAタイムゾーンデータベースからタイムゾーンを割り出しています。

 ほとんどのUnixシステムでは、このデータベースに与えられているパスが明示されています(/usr/share/zoneinfo, /usr/share/lib/zoneinfo, /usr/lib/locale/TZ/)。
 Goのタイムパッケージは、これら3つのパスを利用してタイムゾーンデータベースからデータを取得します。

 これら3つのうちどのデータも発見されなかった場合、マシンはGo開発環境の指示(ランナーのプロセスで使用される『$GOPATH』も同じもの)に従って、「$GOROOT/lib/time/zoneinfo.zip」ファイルをタイムゾーンとして代用します。

  ところが、その代用も効かなかった場合に(たとえばWindowsホストなどを制作に使っていた場合など)、上記のエラーが報告されます。

  この場合、現在開発にお使いのシステムが、IANAタイムゾーン・データベースに対応していなかったことが考えらえれます。
 システムがこのツールにデフォルトで対応していない場合でも、インストールを試みることは可能です。
  Linux系のシステムなら、以下のコマンドでインストールできます。

======================
#  Debian/Ubuntu系システムの場合
sudo apt-get install tzdata

# RPM系システムの場合
sudo yum install tzdata

# Linux Alpine系システムの場合
sudo apk add -U tzdata
======================

  これらの方法が失敗したり、最初から使えないシステムだった場合は、次の手順を踏んでOffPeakTimezoneを導入してください。

  1.  zoneinfo.zipをダウンロードします。リンク先のバージョンは「v9.1.0」となっていますが、このタグは変更できます。
    バージョンが記されている部分(タグ名)は、「latest」に書き換えて、新しいzoneinfo.zipがダウンロードできるURLに変更した方が、最適といえるでしょう。
  2.  このファイルをどこか分かりやすい所に格納してください。「config.toml」ファイルから、そのファイルを格納したディレクトリに、何らかのパスを送って使うことになるでしょう。
     たとえば、Windowsマシンで.toml設定ファイルを「C:\gitlab-runner\config.toml」に置いていた場合、「zoneinfo.zip」は「C:\gitlab-runner\zoneinfo.zip」に保管することになります。
  3.  そして、設定ファイルの「ZONEINFO」環境変数から、「zoneinfo.zip」ファイルにフルパスを送ります。
     ランナーの開始に「run」コマンドを使っている場合は、次のコマンドでZONEINFOを設定できます。
    ======================
    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 ...]
    ======================
     (¥はバックスラッシュの誤変換)

      次にランナーのサービスを開始したときには、サービスの設定をアップデート/上書きしてください。
     Unixシステムの場合は、サービスマネージャーソフトウェアから、
     Windowsの場合は、システムの設定から環境変数リストで、ランナーのユーザーにZONEINFO変数を追加してください。

 


Edit this page

 

  なお、原文ページのDisqusでは、このページでの質問・ご意見を受け付けております。
 それ以外のご用件や、より詳しい質問、サポートをお求めの方は、こちらのgetting helpを参考に、GitLabまでお問い合わせください。

 

 2018-03-23 21:36:26 / Hnoss
原文サイトを表示
[ 原文 ] https://docs.gitlab.com/runner/faq/README.html
原文ページプロジェクト並びにドキュメントファイルは、MIT Licenseのもと公開されています。(URL:https://gitlab.com/gitlab-com/gitlab-docs/blob/master/LICENSE) この記事の文章は、訳者の判断によりCreative Commons BY (version 3.0) を適用するものとします。