- 設定の検証
- グローバルセクション
[session_server]
セクション-
[[runners]]
セクション - エクゼキューター
- シェル
-
[runners.docker]
セクション [runners.parallels]
セクション[runners.virtualbox]
セクション- ベース VM イメージのオーバーライド
[runners.ssh]
セクション-
[runners.machine]
セクション [runners.instance]
セクション (Alpha)[runners.autoscaler]
セクション[runners.autoscaler.plugin_config]
セクション[runners.autoscaler.connector_config]
セクション-
[[runners.autoscaler.policy]]
。 [runners.custom]
セクション-
[runners.cache]
セクション [runners.kubernetes]
セクション- ヘルパーイメージ
-
[runners.custom_build_dir]
セクション -
[runners.referees]
セクション
高度な設定
GitLab Runnerや個々の登録Runnerの動作を変更することができます。
これを行うには、config.toml
というTOMLフォーマットを使ったファイルを変更します。
GitLab Runnerはほとんどのオプションを変更しても再起動を必要としません。これには、[[runners]]
セクションのパラメータと、listen_address
を除くグローバルセクションのほとんどのパラメータが含まれます。ランナーがすでに登録されている場合は、再度登録する必要はありません。
GitLab Runnerは3秒ごとに設定の変更をチェックし、必要であればリロードします。GitLab Runner はまた、SIGHUP
シグナルに応答して設定をリロードします。
config.toml
ファイルは以下にあります:
-
/etc/gitlab-runner/
GitLab Runnerがrootとして実行されている場合(これはサービス設定のためのパスでもあります)。 -
~/.gitlab-runner/
GitLab Runnerをroot以外で実行した場合。 -
./
その他のシステムでは
設定の検証
GitLab Runner 15.10 で導入されました。
設定バリデーションはconfig.toml
ファイルの構造をチェックするプロセスです。設定バリデーターからの出力はinfo
レベルのメッセージのみを提供します。
設定検証は_ベストエフォート_であり、現在は情報提供のみを目的としています。ユーザーによるRunner設定の潜在的な問題の特定を支援します。可能性のあるすべての問題を検出できるわけではありませんし、メッセージがないからといって、config.toml
ファイルに欠陥がないことを保証するものでもありません。
時間の経過とともに、検証プロセスはより正確で包括的、かつ有用なフィードバックを提供できるように改良される予定です。最新の改善や拡張の恩恵を受けるために、GitLab Runnerを常にアップデートしておく必要があります。
グローバルセクション
これらの設定はグローバルです。すべてのランナーに適用されます。
設定 | 説明 |
---|---|
concurrent | 登録された Runner 全体で、同時に実行できるジョブの数を制限します。[[runners]] セクションはそれぞれ独自の制限を定義できますが、この値はそれらの値をすべて合わせた最大値を設定します。たとえば、値が10 の場合、同時に実行できるジョブは10件以下になります。0 は禁止されています。この値を使用すると、Runnerプロセスはクリティカルエラーで終了します。この設定がDocker Machine Executor (自動スケーリング用)でどのように機能するかをご覧ください。 |
log_level | ログレベルを定義します。オプションは、debug 、info 、warn 、error 、fatal 、panic です。この設定は、コマンドライン引数--debug 、-l 、または--log-level によって設定されたレベルよりも優先順位が低くなります。 |
log_format | ログ形式を指定します。オプションはrunner 、text 、およびjson です。この設定は、コマンドライン引数--log-format で設定される形式よりも優先順位が低くなります。デフォルト値はrunner で、色付け用の ANSI エスケープ・コードが含まれています。 |
check_interval | ランナーが新しいジョブをチェックする間隔の長さを秒単位で定義します。デフォルト値は3 です。0 以下に設定すると、デフォルト値が使用されます。 |
sentry_dsn | Sentryへのすべてのシステムレベルエラーの追跡を有効にします。 |
listen_address | Prometheus メトリクス HTTP サーバーがリッスンするアドレス (<host>:<port> ) を定義します。 |
shutdown_timeout | 強制シャットダウン・オペレーションがタイムアウトしてプロセスを終了するまでの秒数。 |
設定例:
concurrent = 4
log_level = "warning"
log_format
例 (切り捨て)
runner
Runtime platform arch=amd64 os=darwin pid=37300 revision=HEAD version=development version
Starting multi-runner from /etc/gitlab-runner/config.toml... builds=0
WARNING: Running in user-mode.
WARNING: Use sudo for system-mode:
WARNING: $ sudo gitlab-runner...
Configuration loaded builds=0
listen_address not defined, metrics & debug endpoints disabled builds=0
[session_server].listen_address not defined, session endpoints disabled builds=0
text
INFO[0000] Runtime platform arch=amd64 os=darwin pid=37773 revision=HEAD version="development version"
INFO[0000] Starting multi-runner from /etc/gitlab-runner/config.toml... builds=0
WARN[0000] Running in user-mode.
WARN[0000] Use sudo for system-mode:
WARN[0000] $ sudo gitlab-runner...
INFO[0000]
INFO[0000] Configuration loaded builds=0
INFO[0000] listen_address not defined, metrics & debug endpoints disabled builds=0
INFO[0000] [session_server].listen_address not defined, session endpoints disabled builds=0
json
{"arch":"amd64","level":"info","msg":"Runtime platform","os":"darwin","pid":38229,"revision":"HEAD","time":"2020-06-05T15:57:35+02:00","version":"development version"}
{"builds":0,"level":"info","msg":"Starting multi-runner from /etc/gitlab-runner/config.toml...","time":"2020-06-05T15:57:35+02:00"}
{"level":"warning","msg":"Running in user-mode.","time":"2020-06-05T15:57:35+02:00"}
{"level":"warning","msg":"Use sudo for system-mode:","time":"2020-06-05T15:57:35+02:00"}
{"level":"warning","msg":"$ sudo gitlab-runner...","time":"2020-06-05T15:57:35+02:00"}
{"level":"info","msg":"","time":"2020-06-05T15:57:35+02:00"}
{"builds":0,"level":"info","msg":"Configuration loaded","time":"2020-06-05T15:57:35+02:00"}
{"builds":0,"level":"info","msg":"listen_address not defined, metrics \u0026 debug endpoints disabled","time":"2020-06-05T15:57:35+02:00"}
{"builds":0,"level":"info","msg":"[session_server].listen_address not defined, session endpoints disabled","time":"2020-06-05T15:57:35+02:00"}
check_interval
の仕組み
config.toml
に[[runners]]
セクションが複数存在する場合、GitLab へのリクエスト間隔は予想以上に頻繁になります。GitLab Runnerには、設定されたGitLabインスタンスへのリクエストを常にスケジュールするループがあります。
GitLab Runnerは、各Runnerの後続のリクエストが指定された間隔で行われるようにします。そのために、check_interval
の値を[[runners]]
セクションの数で割ります。ループはすべてのセクションを繰り返し、それぞれのリクエストをスケジュールし、計算された時間スリープします。ランナーが別の GitLab インスタンスに結びついていると、面白いことが起こります。次の例を見てみましょう。
check_interval = 10
を設定し、2 つの Runner (runner-1
とrunner-2
) がある場合、10 秒ごとにリクエストが行われます。この場合のループの例を示します:
-
check_interval
の値 (10s
) を取得します。 - ランナーのリストを取得 (
runner-1
,runner-2
). - 睡眠間隔の計算 (
10s / 2 = 5s
). - 無限ループを開始します:
-
runner-1
のジョブをリクエスト。 -
5s
。 -
runner-2
のジョブをリクエスト。 -
5s
。 - 繰り返します。
-
この例では、Runner のプロセスからのリクエストは 5 秒ごとに行われます。runner-1
とrunner-2
が同じ GitLab インスタンスに接続されている場合、この GitLab インスタンスも 5 秒ごとにこの Runner からの新しいリクエストを受け取ります。
に対する最初のrunner-1
リクエストと2回目のリクエストの runner-1
間には、2つのスリープ期間があります。それぞれ5秒ずつかかるので、runner-1
に対するその後のリクエストの間はおよそ10秒です。runner-2
についても同様です。
より多くのRunnerを定義する場合、スリープ間隔はより小さくなります。しかし、ランナーへのリクエストは、他のランナーへのすべてのリクエストとそのスリープ期間が呼び出された後に繰り返されます。
[session_server]
セクション
[session_server]
セクションは、ユーザーが対話型ウェブターミナルなどでジョブと対話できるようにします。
[session_server]
セクションは、ランナーごとではなく、ルート・レベルで指定する必要があります。[[runners]]
セクションの内部で定義する必要があります。
[session_server]
listen_address = "[::]:8093" # listen on all available interfaces on port 8093
advertise_address = "runner-host-name.tld:8093"
session_timeout = 1800
[session_server]
セクションを設定する場合:
-
listen_address
およびadvertise_address
の場合、host:port
の形式を使用します。host
は IP アドレス (127.0.0.1:8093
) またはドメイン (my-runner.example.com:8093
) です。Runnerはこの情報を使用して、セキュア接続用のTLS証明書を作成します。 - ウェブブラウザが
advertise_address
に接続できることを確認してください。ライブセッションはウェブブラウザによって開始されます。 - アプリケーション設定
allow_local_requests_from_web_hooks_and_services
を有効にしていない限り、advertise_address
が公開 IP アドレスであることを確認してください。
設定 | 説明 |
---|---|
listen_address | セッションサーバーの内部URL。 |
advertise_address | セッションサーバーにアクセスするためのURL。GitLab RunnerがGitLabに公開します。定義されていない場合はlisten_address が使われます。 |
session_timeout | ジョブが完了した後、セッションがアクティビティを維持できる秒数。タイムアウトはジョブの終了をブロックします。デフォルトは1800 (30分)です。 |
セッション・サーバおよびターミナルのサポートを無効にするには、[session_server]
セクションを削除します。
[session_server]
セクションの変更を有効にするには、gitlab-runner restart
。GitLab Runner Docker イメージを使っている場合は、docker run
コマンド に-p 8093:8093
を追加して8093
ポートを公開する必要があります。
[[runners]]
セクション
各[[runners]]
セクションは1つのランナーを定義します。
設定 | 説明 |
---|---|
name | ランナーの説明。情報提供のみ。 |
url | GitLab インスタンスの URL。 |
token | ランナー登録時に取得したランナーの認証トークン。登録トークンとは異なります。 |
tls-ca-file | HTTPSを使用する場合、相手を検証するための証明書を含むファイル。自己署名証明書またはカスタム認証局のドキュメントを参照してください。 |
tls-cert-file | HTTPS を使用する場合、ピアと認証するための証明書を含むファイル。 |
tls-key-file | HTTPS を使用する場合、相手と認証するための秘密鍵が含まれるファイル。 |
limit | この登録ランナーが同時に処理できるジョブの数を制限します。 0 (デフォルト)は制限しないことを意味します。この設定が Docker Machine Executor (自動スケーリング用) でどのように機能するかをご覧ください。 |
executor | プロジェクトのビルド方法を選択します。 |
shell | スクリプトを生成するシェルの名前。デフォルト値はプラットフォーム依存です。 |
builds_dir | 選択したExecutorのコンテキストでビルドが保存されるディレクトリへの絶対パス。例えば、ローカル、Docker、SSHなど。 |
cache_dir | 選択したExecutorのコンテキストでビルドキャッシュが保存されるディレクトリへの絶対パス。例えば、ローカル、Docker、SSHなど。docker Executorを使用する場合は、このディレクトリをvolumes パラメータに含める必要があります。 |
environment | 環境変数を追加または上書きします。 |
request_concurrency | GitLab からの新規ジョブの同時リクエスト数を制限します。デフォルトは1 。 |
output_limit | ビルドログの最大サイズ(キロバイト)。デフォルトは4096 (4MB)。 |
pre_clone_script | DEPRECATED - 代わりにpre_get_sources_script を使ってください。 |
pre_get_sources_script | Git リポジトリの更新やサブモジュールの更新の前に Runner で実行するコマンドです。Git クライアントの設定を最初に調整するときなどに使います。複数のコマンドを挿入するには、(三重引用符で囲まれた)複数行の文字列か\n 文字を使います。 |
post_clone_script | DEPRECATED - 代わりにpost_get_sources_script を使ってください。 |
post_get_sources_script | Git リポジトリの更新とサブモジュールの更新後に Runner で実行するコマンド。複数のコマンドを挿入するには、(三重引用符で囲まれた)複数行の文字列か\n 文字を使います。 |
pre_build_script | ビルドを実行する前にランナーで実行するコマンド。複数のコマンドを挿入するには、(三重引用符で囲まれた)複数行の文字列または\n 文字を使用します。 |
post_build_script | ビルドを実行した直後、after_script を実行する前に、ランナーで実行するコマンド。複数のコマンドを挿入するには、(三重引用符で囲まれた)複数行の文字列または\n 文字を使用します。 |
clone_url | GitLab インスタンスの URL を上書きします。Runner が GitLab URL に接続できない場合にのみ使用します。 |
debug_trace_disabled |
CI_DEBUG_TRACE 機能を無効にします。true に設定すると、ユーザーによってCI_DEBUG_TRACE がtrue に設定されても、デバッグログ(トレース)は無効のままになります。 |
referees | GitLab にジョブのアーティファクトとして結果を渡す追加のジョブ監視ワーカー。 |
unhealthy_requests_limit | ランナーワーカーが無効になる、新しいジョブリクエストへのunhealthy レスポンスの数。 |
unhealthy_interval | ランナーワーカーが不健康なリクエストの制限を超えると無効になる時間。3600s’ や ‘1h30min’ などの構文をサポートします。 |
使用例:
[[runners]]
name = "ruby-2.7-docker"
url = "https://CI/"
token = "TOKEN"
limit = 0
executor = "docker"
builds_dir = ""
shell = ""
environment = ["ENV=value", "LC_ALL=en_US.UTF-8"]
clone_url = "http://gitlab.example.local"
clone_url
の仕組み
GitLab インスタンスが Runner が使えない URL で利用可能な場合は、clone_url
を設定します。
例えば、ファイアウォールによって Runner がその URL に到達できない場合があります。Runner が192.168.1.23
のノードに到達できる場合は、clone_url
をhttp://192.168.1.23
に設定します。
clone_url
が設定されている場合、Runnerはhttp://gitlab-ci-token:s3cr3tt0k3n@192.168.1.23/namespace/project.git
の形式でクローンURLを構築します。
エクゼキューター
以下のエクゼキューターがあります。
Executor | 必須設定 | ジョブの実行場所 | - | - | - | shell | ローカルシェル。デフォルトのエクゼキュータです。 |
docker |[runners.docker] 、Docker Engine|Dockerコンテナ。 | docker-windows |
[runners.docker] andDockerEngine | Windows Dockerコンテナ。 | ssh | [runners.ssh] | SSH、リモート。 | parallels |
[runners.parallels] および[runners.ssh]
| Parallels VM、ただし SSH で接続。 | virtualbox |
[runners.virtualbox] および[runners.ssh]
| VirtualBox VM、ただし SSH で接続。 | docker+machine |
[runners.docker] および[runners.machine]
|
docker と同様ですが、自動スケーリングされたDocker Machineを使用します。 | kubernetes | [runners.kubernetes] | Kubernetesポッド。 |
シェル
利用可能なシェルは異なるプラットフォーム上で動作します。
Shell | 説明 |
---|---|
bash | Bash(Bourne-shell)スクリプトを生成します。すべてのコマンドは Bash コンテキストで実行されます。すべての Unix システムのデフォルトです。 |
sh | Sh (Bourne-shell) スクリプトを生成します。Sh コンテキストで実行されるすべてのコマンド。すべての Unix システムのbash のフォールバック。 |
powershell | PowerShell スクリプトを生成します。すべてのコマンドはPowerShell Desktopコンテキストで実行されます。GitLab Runner 12.0-13.12では、これはWindowsのデフォルトです。 |
pwsh | PowerShellスクリプトを生成します。すべてのコマンドはPowerShell Coreコンテキストで実行されます。GitLab Runner 14.0以降では、Windowsのデフォルトです。 |
shell
オプションがbash
またはsh
に設定されている場合、Bash のANSI-C クォートがジョブスクリプトのシェルエスケープに使用されます。
POSIX 準拠のシェルを使用してください。
GitLab Runner 14.9 以降では、FF_POSIXLY_CORRECT_ESCAPES
という機能フラグを有効にしてPOSIX 準拠のシェル(dash
のようなもの)を使うようにします。有効にすると、POSIX準拠のシェルのエスケープメカニズムである“二重引用符 “が使用されます。
[runners.docker]
セクション
以下の設定はDockerコンテナのパラメータを定義します。
サービスとしてのDocker-in-Docker、またはジョブ内で設定されたコンテナランタイムは、これらのパラメータを継承しません。
パラメータ | 説明 |
---|---|
allowed_images |
.gitlab-ci.yml ファイルに指定できる画像のワイルドカードリスト。存在しない場合は、すべてのイメージが許可されます(["*/*:*"] と同じ)。DockerまたはKubernetesエクゼキュータで使用します。 |
allowed_privileged_images |
privileged が有効な場合に特権モードで実行されるallowed_images のワイルドカードサブセット。存在しない場合、すべてのイメージが許可されます(["*/*:*"] と同等)。Dockerエクゼキュータで使用します。 |
allowed_pull_policies |
.gitlab-ci.yml ファイルまたはconfig.toml ファイルで指定できるプルポリシーのリスト。指定されていない場合、pull-policy で指定されたすべてのプルポリシーが許可されます。Dockerエクゼキュータと共に使用します。 |
allowed_services |
.gitlab-ci.yml ファイルで指定できるサービスのワイルドカードリスト。存在しない場合、すべてのイメージが許可されます(["*/*:*"] と同等)。DockerまたはKubernetesエクゼキュータで使用します。 |
allowed_privileged_services |
privileged またはservices_privileged が有効な場合に、特権モードでの実行を許可するallowed_services のワイルドカードサブセット。存在しない場合は、すべてのイメージが許可されます(["*/*:*"] と同等)。Dockerエクゼキュータで使用します。 |
cache_dir | Dockerキャッシュを保存するディレクトリ。このパスは絶対パスでも、現在の作業ディレクトリからの相対パスでもかまいません。詳細はdisable_cache を参照してください。 |
cap_add | コンテナにLinux機能を追加します。 |
cap_drop | コンテナから追加の Linux 機能を削除します。 |
cpuset_cpus | コントロールグループのCpusetCpus .文字列です。 |
cpu_shares | 相対的な CPU 使用率を設定するために使用される CPU シェア数。デフォルトは1024 。 |
cpus | CPU数(Docker 1.13以降で利用可能)。文字列。 |
devices | 追加のホストデバイスをコンテナと共有します。 |
device_cgroup_rules | カスタムデバイスcgroup ルール(Docker 1.28以降で利用可能)。 |
disable_cache | Dockerエクゼキュータには2つのレベルのキャッシュがあります: グローバルキャッシュ(他のエクゼキュータと同様)とDockerボリュームに基づくローカルキャッシュです。この設定フラグは、自動的に作成された(ホストディレクトリにマッピングされていない)キャッシュボリュームの使用を無効にするローカルなものにのみ作用します。言い換えると、ビルドの一時ファイルを保持するコンテナを作成しないようにするだけで、ランナーが分散キャッシュモードで設定されている場合はキャッシュを無効にしません。 |
disable_entrypoint_overwrite | イメージのエントリポイントの上書きを無効にします。 |
dns | コンテナが使用する DNS サーバーのリスト。 |
dns_search | DNS 検索ドメインのリスト。 |
extra_hosts | コンテナ環境で定義されるべきホスト。 |
gpus | Dockerコンテナ用のGPUデバイス。docker cliと同じフォーマットを使用します。詳細はDockerドキュメントをご覧ください。 |
helper_image | (詳細)リポジトリのクローンとアーティファクトのアップロードに使用されるデフォルトのヘルパーイメージ。 |
helper_image_flavor | ヘルパーイメージのフレーバー (alpine ,alpine3.15 ,alpine3.16 ,alpine3.17 ,alpine3.18 ,alpine-latest ,ubi-fips またはubuntu ) を設定します。デフォルトはalpine . この alpine フレーバーはalpine3.18 と同じバージョンを使用します。 |
host | カスタムDockerエンドポイント。デフォルトはDOCKER_HOST 環境またはunix:///var/run/docker.sock 。 |
hostname | Dockerコンテナのカスタムホスト名。 |
image | ジョブを実行するイメージ。 |
links | ジョブを実行するコンテナとリンクするコンテナ。 |
memory | メモリ制限。文字列。 |
memory_swap | メモリの総量制限。文字列。 |
memory_reservation | メモリのソフトリミット。文字列。 |
network_mode | コンテナをカスタムネットワークに追加します。 |
mac_address | コンテナのMACアドレス(例:92:d0:c6:0a:29:33)。 |
oom_kill_disable | メモリ不足(OOM) エラーが発生した場合は、コンテナ内のプロセスを強制終了しないでください。 |
oom_score_adjust | OOM スコアの調整。正の場合は早くkill。 |
privileged | コンテナを特権モードで実行。安全ではありません。 |
services_privileged | 特権モードでサービスを実行できるようにします。未設定(デフォルト)の場合、privileged の値が代わりに使用されます。DockerExecutorで使用します。安全ではありません。 |
pull_policy | イメージのプルポリシー:never if-not-present またはalways (デフォルト)。詳細は、プルポリシーのドキュメントを参照してください。複数のプルポリシーを追加したり、失敗したプルを再試行したり、プルポリシーを制限したりすることもできます。 |
runtime | Dockerコンテナのランタイム。 |
isolation | コンテナ分離技術(default ,hyperv andprocess )。Windowsのみ。 |
security_opt | セキュリティ・オプション (docker run の –security-opt)。: で区切られたキー/値のリストを受け取ります。 |
shm_size | 画像の共有メモリサイズ(バイト単位)。 |
sysctls |
sysctl オプション。 |
tls_cert_path |
ca.pem ,cert.pem またはkey.pem が保存され、DockerへのセキュアなTLS接続に使用されるディレクトリ。boot2docker で便利です。 |
tls_verify | Dockerデーモンへの接続のTLS検証を有効または無効にします。デフォルトでは無効になっています。 |
user | コンテナ内のすべてのコマンドを指定ユーザーとして実行。 |
userns_mode | ユーザーネームスペースリマッピングオプションが有効な場合のコンテナとDockerサービスのユーザーネームスペースモード。Docker 1.10以降で利用可能。 |
ulimit | コンテナに渡す値を制限します。Docker--ulimit フラグと同じ構文を使用します。 |
volumes | マウントする追加ボリューム。Docker-v フラグと同じ構文。 |
volumes_from | 別のコンテナから継承するボリュームのリストを<container name>[:<ro|rw>] の形式で指定します。アクセスレベルのデフォルトは読み書きですが、手動でro (読み込み専用) またはrw (読み書き可能) に設定できます。 |
volume_driver | コンテナに使用するボリューム・ドライバ。 |
wait_for_services_timeout | Dockerサービスの待機時間。無効にするには-1 。デフォルトは30 。 |
container_labels | Runner が作成する各コンテナに追加するラベルのセット。ラベルの値には、拡張のための環境変数を含めることができます。 |
[[runners.docker.services]]
セクション
ジョブとともに実行する追加サービスを指定します。利用可能なイメージのリストについてはDockerレジストリをご覧ください。各サービスは別のコンテナで実行され、ジョブにリンクされます。
パラメータ | 説明 |
---|---|
name | サービスとして実行するイメージの名前。 |
alias | サービスへのアクセスに使用できる追加のエイリアス名. |
entrypoint | コンテナのエントリポイントとして実行するコマンドまたはスクリプト。構文はDockerfile の ENTRYPOINTディレクティブに似ており、各シェルトークンは配列内の個別の文字列となります。GitLab Runner 13.6 で導入されました。 |
command | コンテナのコマンドとして使用するコマンドまたはスクリプト。構文はDockerfile の CMDディレクティブに似ており、各シェルトークンは配列内の個別の文字列となります。GitLab Runner 13.6 で導入。 |
environment | サービスコンテナの環境変数を追加または上書きします。 |
使用例:
[runners.docker]
host = ""
hostname = ""
tls_cert_path = "/Users/ayufan/.boot2docker/certs"
image = "ruby:2.7"
memory = "128m"
memory_swap = "256m"
memory_reservation = "64m"
oom_kill_disable = false
cpuset_cpus = "0,1"
cpus = "2"
dns = ["8.8.8.8"]
dns_search = [""]
privileged = false
userns_mode = "host"
cap_add = ["NET_ADMIN"]
cap_drop = ["DAC_OVERRIDE"]
devices = ["/dev/net/tun"]
disable_cache = false
wait_for_services_timeout = 30
cache_dir = ""
volumes = ["/data", "/home/project/cache"]
extra_hosts = ["other-host:127.0.0.1"]
shm_size = 300000
volumes_from = ["storage_container:ro"]
links = ["mysql_container:mysql"]
allowed_images = ["ruby:*", "python:*", "php:*"]
allowed_services = ["postgres:9", "redis:*", "mysql:*"]
[runners.docker.ulimit]
"rtprio" = "99"
[[runners.docker.services]]
name = "registry.example.com/svc1"
alias = "svc1"
entrypoint = ["entrypoint.sh"]
command = ["executable","param1","param2"]
environment = ["ENV1=value1", "ENV2=value2"]
[[runners.docker.services]]
name = "redis:2.8"
alias = "cache"
[[runners.docker.services]]
name = "postgres:9"
alias = "postgres-db"
[runners.docker.sysctls]
"net.ipv4.ip_forward" = "1"
[runners.docker]
セクションのボリューム
以下の例では、[runners.docker]
セクションでボリュームを指定する方法を示します。
例1:データボリュームの追加
データボリュームは、ユニオンファイルシステムをバイパスする1つまたは複数のコンテナ内の特別に指定されたディレクトリです。データボリュームは、コンテナのライフサイクルとは無関係にデータを永続化するように設計されています。
[runners.docker]
host = ""
hostname = ""
tls_cert_path = "/Users/ayufan/.boot2docker/certs"
image = "ruby:2.7"
privileged = false
disable_cache = true
volumes = ["/path/to/volume/in/container"]
この例では、コンテナ内に新しいボリュームを/path/to/volume/in/container
に作成します。
例2: ホストディレクトリをデータボリュームとしてマウントします。
コンテナの外にディレクトリを保存したい場合、Dockerデーモンのホストからコンテナにディレクトリをマウントすることができます:
[runners.docker]
host = ""
hostname = ""
tls_cert_path = "/Users/ayufan/.boot2docker/certs"
image = "ruby:2.7"
privileged = false
disable_cache = true
volumes = ["/path/to/bind/from/host:/path/to/bind/in/container:rw"]
この例では、コンテナ内のCI/CDホストの/path/to/bind/from/host
、/path/to/bind/in/container
。
GitLab Runner 11.11 以降では、定義されたサービスの ホストディレクトリもマウントします。
非公開コンテナレジストリを使う
ジョブのイメージソースとして非公開レジストリを使用するには、DOCKER_AUTH_CONFIG
という名前のCI/CD 変数に作成者設定を設定します。この変数は、プロジェクトの CI/CD 設定で型File
として設定するか、config.toml
ファイルで設定します。
if-not-present
プルポリシーで非公開レジストリを使用すると、セキュリティ上の問題が発生する可能性があります。プルポリシーがどのように機能するかを完全に理解するには、プルポリシーのドキュメントを読んでください。
詳細な例については、Using Docker imagesのドキュメントを参照してください。
Runnerが実行するステップをまとめると、次のようになります:
- 画像名からレジストリ名を検索します。
- この値が空でなければ、 Executor はこのレジストリの認証設定を検索します。
- 指定したレジストリに対応する認証が見つかった場合は、 それを使用します。
Runnerが非公開レジストリに対して認証するように設定されたので、そのレジストリを使用するために.gitlab-ci.yml
ファイル](https://docs.gitlab.com/ee/ci/yaml/index.html#image) を設定する方法を[。
GitLab 統合レジストリのサポート
GitLabはジョブのデータと一緒に統合レジストリの認証情報を送信します。これらの認証情報は自動的にレジストリの作成者パラメータリストに追加されます。
このステップの後、レジストリに対する作成者の認証はDOCKER_AUTH_CONFIG
変数で追加した設定と同様に行われます。
ジョブでは、GitLabインテグレーションレジストリから任意のイメージを使うことができます。たとえそのイメージが非公開であっても、保護されていてもです。ジョブがアクセスできるイメージについては、CI/CD ジョブ トークン ドキュメントドキュメントを読んでください。
Docker作成者の権限解決の優先順位
前述したように、GitLab Runnerは異なる方法で送信された認証情報を使ってレジストリに対してDockerを認可することができます。適切なレジストリを見つけるために、以下の優先順位が考慮されます:
-
DOCKER_AUTH_CONFIG
で設定された認証情報。 - GitLab Runner ホスト上で
~/.docker/config.json
または~/.dockercfg
ファイルを使ってローカルに設定された認証情報(例えば、ホスト上でdocker login
を実行することで)。 - ジョブのペイロードと一緒にデフォルトで送信される認証情報(例えば、前述のインテグレーションレジストリ用の認証情報)。
レジストリに対して最初に見つかったクレデンシャルが使われます。たとえば、DOCKER_AUTH_CONFIG
変数で内部レジストリのクレデンシャルを追加すると、デフォルトのクレデンシャルがオーバーライドされます。
[runners.parallels]
セクション
以下のパラメータは Parallels 用です。
パラメータ | 説明 |
---|---|
base_name | クローンされる Parallels VM の名前です。 |
template_name | Parallels VM リンクテンプレートのカスタム名。オプション。 |
disable_snapshots | 無効にすると、ジョブが完了したときに VM が破棄されます。 |
allowed_images | 許可されるimage /base_name 値のリスト。正規表現で表します。詳細はベース VM イメージの上書きセクションを参照してください。 |
使用例:
[runners.parallels]
base_name = "my-parallels-image"
template_name = ""
disable_snapshots = false
[runners.virtualbox]
セクション
以下のパラメータは VirtualBox 用です。この Executor は VirtualBox マシンを制御するためにvboxmanage
実行ファイルに依存しているので、Windows ホストではPATH
環境変数を調整する必要があります:PATH=%PATH%;C:\Program Files\Oracle\VirtualBox
。
パラメータ | 説明 |
---|---|
base_name | クローンされるVirtualBox VMの名前。 |
base_snapshot | リンクされたクローンを作成するVMの特定のスナップショットの名前またはUUID。この値が空または省略された場合は、現在のスナップショットが使用されます。現在のスナップショットが存在しない場合は、スナップショットが作成されます。disable_snapshots が true の場合を除き、ベース VM の完全なクローンが作成されます。 |
base_folder | 新しい VM を保存するフォルダ。この値が空または省略された場合、デフォルトのVMフォルダが使用されます。 |
disable_snapshots | 無効にすると、ジョブが完了したときに VM が破棄されます。 |
allowed_images | 許可されるimage /base_name 値のリスト。正規表現で表します。詳細はベース VM イメージの上書きセクションを参照してください。 |
start_type | VM 起動時のグラフィカル・フロントエンド・タイプ。 |
使用例:
[runners.virtualbox]
base_name = "my-virtualbox-image"
base_snapshot = "my-image-snapshot"
disable_snapshots = false
start_type = "headless"
例:start_type
パラメーターは、仮想イメージを起動するときに使用するグラフィカルフロントエンドを決定します。有効な値は、ホストとゲストの組み合わせでサポートされるheadless
(デフォルト)、gui
またはseparate
です。
ベース VM イメージのオーバーライド
GitLab Runner 14.2 で導入されました。
Parallels と VirtualBox の両 Executor では、base_name
で指定されたベース VM 名を上書きすることができます。これを行うには、.gitlab-ci.yml
ファイルでimageパラメータを使用します。
後方互換性のため、デフォルトではこの値をオーバーライドできません。base_name
で指定されたイメージのみが許可されます。
ユーザーが.gitlab-ci.yml
imageパラメータを使用して VM イメージを選択できるようにするには、次のようにします:
[runners.virtualbox]
...
allowed_images = [".*"]
この例では、既存の VM イメージを使用できます。
allowed_images
パラメーターは正規表現のリストです。設定は必要なだけ正確に行うことができます。例えば、特定のVMイメージだけを許可したい場合は、次のような正規表現を使用できます:
[runners.virtualbox]
...
allowed_images = ["^allowed_vm[1-2]$"]
この例では、allowed_vm1
とallowed_vm2
のみが許可されます。これ以外の場合はエラーになります。
[runners.ssh]
セクション
以下のパラメータは SSH 接続を定義します。
パラメータ | 説明 |
---|---|
host | 接続先 |
port | ポート。デフォルトは22 。 |
user | ユーザー名。 |
password | パスワード |
identity_file | SSH 秘密鍵 (id_rsa ,id_dsa , またはid_edcsa ) へのファイルパス。ファイルは暗号化せずに保存する必要があります。 |
disable_strict_host_key_checking | GitLab 14.3以降では、この値はランナーが厳密なホスト鍵チェックを使用するかどうかを決定します。デフォルトはtrue です。GitLab 15.0では、デフォルト値、または指定されていない場合の値はfalse になります。 |
使用例:
[runners.ssh]
host = "my-production-server"
port = "22"
user = "root"
password = "production-server-password"
identity_file = ""
[runners.machine]
セクション
GitLab Runner v1.1.0で追加されました。
以下のパラメータはDocker Machineベースのオートスケール機能を定義します。詳細については、別のRunner autoscale ドキュメントを参照してください。
パラメータ | 説明 |
---|---|
MaxGrowthRate | Runnerに並行して追加できるマシンの最大数。デフォルトは0 (制限なし)です。 |
IdleCount | _アイドル_状態で待機しているマシンの数。 |
IdleScaleFactor | (実験的)現在使用されているマシンの数に対する_アイドル・_マシンの数。浮動小数点数形式でなければなりません。詳細はautoscale のドキュメントを参照してください。デフォルトは0.0 。 |
IdleCountMin |
IdleScaleFactor が使用されているときに_アイドル_状態で作成および待機する必要があるマシンの最小数。デフォルトは 1 です。 |
IdleTime | マシンが削除されるまでの_アイドル_状態の時間(秒)。 |
[[runners.machine.autoscaling]] | 複数のセクションがあり、それぞれにオートスケーリング設定のオーバーライドが含まれています。現在の時刻に一致する式を持つ最後のセクションが選択されます。 |
OffPeakPeriods | 非推奨:スケジューラが OffPeak モードである時間帯。cronスタイルのパターン(後述)の配列。 |
OffPeakTimezone | 非推奨:OffPeakPeriodsで指定された時間帯のタイムゾーン。Europe/Berlin のようなタイムゾーン文字列。省略した場合や空の場合は、ホストのロケール設定がデフォルトとなります。GitLab Runner はZONEINFO 環境変数で指定されたディレクトリか解凍された zip ファイルからタイムゾーンデータベースを探し、次に Unix システムの既知のインストール場所を探し、最後に$GOROOT/lib/time/zoneinfo.zip . |
OffPeakIdleCount | 非推奨:IdleCount と同様ですが、_オフピーク_時間帯用です。 |
OffPeakIdleTime | 非推奨:IdleTime と同様ですが、_オフピーク_時間帯用です。 |
MaxBuilds | マシンが撤去されるまでの最大ジョブ(ビルド)数。 |
MachineName | マシンの名前。%s 一意の**マシン識別子に置き換えられます。 |
MachineDriver | Docker Machinedriver 。Docker Machine設定セクションで詳細をご覧ください。 |
MachineOptions | Docker Machineのオプション。Docker Machine設定セクションで詳細をご覧ください。 |
[[runners.machine.autoscaling]]
。
パラメータ | 説明 |
---|---|
Periods | このスケジュールがアクティビティとなる時間帯。cronスタイルのパターン(以下で説明)の配列。 |
IdleCount | _アイドル_状態で待機しているマシンの数。 |
IdleScaleFactor | (実験的)現在使用されているマシンの数に対する_アイドル・_マシンの数。浮動小数点数形式でなければなりません。詳細はautoscale のドキュメントを参照してください。デフォルトは0.0 。 |
IdleCountMin |
IdleScaleFactor が使用されているときに_アイドル_状態で作成および待機する必要があるマシンの最小数。デフォルトは 1 です。 |
IdleTime | マシンが削除されるまでの_アイドル_状態の時間(秒)。 |
Timezone |
Periods で指定された時間のタイムゾーン。Europe/Berlin のようなタイムゾーン文字列。省略または空の場合、ホストのロケールシステム設定がデフォルトとなります。GitLab Runnerはタイムゾーンデータベースを環境変数ZONEINFO で指定されたディレクトリか解凍されたzipファイルから探します。次にUnixシステム上の既知のインストール場所を探し、最後に$GOROOT/lib/time/zoneinfo.zip . |
使用例:
[runners.machine]
IdleCount = 5
IdleTime = 600
MaxBuilds = 100
MachineName = "auto-scale-%s"
MachineDriver = "google" # Refer to Docker Machine docs on how to authenticate: https://docs.docker.com/machine/drivers/gce/#credentials
MachineOptions = [
# Additional machine options can be added using the Google Compute Engine driver.
# If you experience problems with an unreachable host (ex. "Waiting for SSH"),
# you should remove optional parameters to help with debugging.
# https://docs.docker.com/machine/drivers/gce/
"google-project=GOOGLE-PROJECT-ID",
"google-zone=GOOGLE-ZONE", # e.g. 'us-central1-a', full list in https://cloud.google.com/compute/docs/regions-zones/
]
[[runners.machine.autoscaling]]
Periods = ["* * 9-17 * * mon-fri *"]
IdleCount = 50
IdleCountMin = 5
IdleScaleFactor = 1.5 # Means that current number of Idle machines will be 1.5*in-use machines,
# no more than 50 (the value of IdleCount) and no less than 5 (the value of IdleCountMin)
IdleTime = 3600
Timezone = "UTC"
[[runners.machine.autoscaling]]
Periods = ["* * * * * sat,sun *"]
IdleCount = 5
IdleTime = 60
Timezone = "UTC"
ピリオドの構文
Periods
設定には、cronスタイルのフォーマットで表現された期間の文字列パターンの配列が含まれます。行には以下のコンテナが含まれます:
[second] [minute] [hour] [day of month] [month] [day of week] [year]
標準的なcron設定ファイルのように、フィールドは単一の値、範囲、リスト、アスタリスクを含むことができます。構文の詳細な説明をご覧下さい。
[runners.instance]
セクション (Alpha)
以下のパラメータはインスタンスエグゼキュータの設定を定義します。
パラメータ | 種類 | 説明 |
---|---|---|
allowed_images | 文字列です。 | VM Isolationが有効な場合、allowed_images 、ジョブが指定できるイメージを制御します。 |
[runners.autoscaler]
セクション
GitLab Runner v15.10.0で追加されました。
以下のパラメータは、新しい実験的なオートスケーラ機能を設定するもので、インスタンスと Docker AutoscalerExecutorでのみ使用できます。
パラメータ | 説明 |
---|---|
capacity_per_instance | 1つのインスタンスで同時に実行できるジョブの数。 |
max_use_count | インスタンスが削除されるまでに使用できる最大回数。 |
max_instances | インスタンスの状態 (保留、実行中、削除) に関係なく許可されるインスタンスの最大数。デフォルト:0 (無制限)。 |
plugin | 使用するfleetingプラグイン。バイナリはPATH 環境変数で検出可能でなければなりません。 |
[runners.autoscaler.plugin_config]
セクション
このハッシュテーブルはJSONに再エンコードされ、設定されたプラグインに直接渡されます。
fleetingプラグインには通常、サポートされる設定に関する付属のドキュメントがあります。
[runners.autoscaler.connector_config]
セクション
fleetingプラグインは通常、サポートされている接続オプションに関する付属のドキュメントを持っています。
プラグインは自動的にコネクタ設定を更新します。[runners.autoscaler.connector_config]
を使用して、コネクタ設定の自動更新を上書きしたり、プラグインが判断できない空の値を埋めることができます。
パラメータ | 説明 |
---|---|
os | インスタンスのオペレーションシステム。 |
arch | インスタンスのアーキテクチャ。 |
protocol | 使用するプロトコル:ssh またはwinrm 。 |
username | 接続に使用するユーザー名。 |
password | 接続に使用するパスワード。 |
key_pathname | 接続に使用される TLS キー、またはクレデンシャルの動的プロビジョニングに使用される TLS キー。 |
use_static_credentials | 自動クレデンシャル・プロビジョニングを無効にします。デフォルト:false 。 |
keepalive | 接続キープアライブ期間。 |
timeout | 接続タイムアウト時間。 |
use_external_addr | プラグインが提供する外部アドレスを使用するかどうか。プラグインが内部アドレスしか返さない場合は、この設定にかかわらずこのアドレスが使われます。デフォルト:false 。 |
[[runners.autoscaler.policy]]
。
注- この文脈でのidle_count
はジョブの数を意味し、従来のオートスケーリング手法のようにオートスケールされたマシンの数を意味するものではありません。
periods | このポリシーが有効な期間を示す unix-cron 形式の文字列の配列です。デフォルト: * * * * *
| timezone | unix-cron 期間を評価するときに使用されるタイムゾーン。デフォルト:システムのローカルタイムゾーン。 | idle_count | ジョブにすぐに利用できるようにしたい目標アイドル容量。 | idle_time | インスタンスが終了する前にアイドル状態にできる時間。 | scale_factor | ジョブのためにすぐに利用可能にしたい目標アイドル容量。idle_count の上に、現在の使用容量の倍数として指定します。デフォルトは0.0 です。 | scale_factor_limit | scale_factor計算で得られる最大容量。 |
scale_factor
を設定すると、idle_count
が最小のidle
容量となり、scaler_factor_limit
が最大のidle
容量となります。
ピリオドの構文
periods
設定は、ポリシーが有効な期間を示す unix-cron 形式の文字列の配列を含みます。cron 形式は 5 つのフィールドで構成されます:
┌────────── minute (0 - 59)
│ ┌──────── hour (0 - 23)
│ │ ┌────── day of month (1 - 31)
│ │ │ ┌──── month (1 - 12)
│ │ │ │ ┌── day of week (1 - 7 or MON-SUN, 0 is an alias for Sunday)
* * * * *
-
-
は、範囲を指定するために2つの数値の間に使用できます。 -
*
を使用すると、そのフィールドの有効な値の全範囲を表すことができます。 -
/
の後に数値を続けるか、または範囲の後にその数値をスキップするために使用することができます。例えば、”hour “フィールドに “0-12/2 “を指定すると、”00:00 “から “00:12 “までの2時間ごとに期間を有効にします。 -
,
は、フィールドに有効な数値または範囲のリストを区切るために使用できます。例えば、1,2,6-9
.
このcronジョブは時間の範囲を表していることに留意してください。例えば
期間 | 影響 |
---|---|
1 * * * * * | 1時間ごとに1分間のルールが有効(あまり役に立ちません) |
* 0-12 * * * | 1日の始まりに12時間有効なルール |
0-30 13,16 * * SUN | 毎週日曜日の午後1時から30分間、午後4時から30分間のルールが有効。 |
[runners.custom]
セクション
以下のパラメータはカスタムエグゼキュータの設定を定義します。
パラメータ | 種類 | 説明 |
---|---|---|
config_exec | 文字列です。 | ジョブ開始前にユーザーがいくつかの設定を上書きできるようにするための実行ファイルへのパス。これらの値は[[runners]] セクションで設定されたものを上書きします。カスタムエグゼキュータのドキュメントに完全なリストがあります。 |
config_args | 文字列配列 |
config_exec 実行ファイルに渡される最初の引数のセット。 |
config_exec_timeout | 整数。 |
config_exec が実行を終了するまでのタイムアウト時間(秒)。デフォルトは3600秒(1時間)。 |
prepare_exec | 文字列です。 | 環境を準備する実行ファイルへのパス。 |
prepare_args | 文字列配列 |
prepare_exec 実行ファイルに渡される最初の引数のセット。 |
prepare_exec_timeout | 整数。 |
prepare_exec が実行を終了するまでのタイムアウト時間(秒)。デフォルトは3600秒(1時間)。 |
run_exec | 文字列です。 | 必須。環境でスクリプトを実行するための実行ファイルへのパス。たとえば、クローンやビルドのスクリプトです。 |
run_args | 文字列配列 |
run_exec 実行ファイルに渡される最初の引数のセット。 |
cleanup_exec | 文字列です。 | 環境をクリーンアップする実行ファイルへのパス。 |
cleanup_args | 文字列配列 |
cleanup_exec 実行ファイルに渡される最初の引数のセット。 |
cleanup_exec_timeout | 整数。 |
cleanup_exec が実行を終了するまでのタイムアウト時間(秒)。デフォルトは3600秒(1時間)。 |
graceful_kill_timeout | 整数。 |
prepare_exec とcleanup_exec が終了した場合の待ち時間(秒単位)(ジョブのキャンセル時など)。このタイムアウトの後、プロセスは強制終了されます。デフォルトは600秒(10分)。 |
force_kill_timeout | 整数。 | kill シグナルがスクリプトに送られてからの待ち時間 (秒単位)。デフォルトは 600 秒 (10 分) です。 |
[runners.cache]
セクション
GitLab Runner 1.1.0 で導入されました。
以下のパラメータがディストリビューションキャッシュ機能を定義します。詳細はRunner autoscale ドキュメントをご覧ください。
パラメータ | 種類 | 説明 |
---|---|---|
Type | 文字列です。 | のいずれか:s3 gcs ,azure . |
Path | 文字列です。 | キャッシュ URL の前に追加するパスの名前。 |
Shared | boolean | ランナー間のキャッシュ共有を有効にします。デフォルトはfalse です。 |
MaxUploadedArchiveSize | int64 | クラウドストレージにアップロードされるキャッシュアーカイブのバイト数。悪意のある行為者はこの制限を回避できるので、GCS アダプタは署名付き URL の X-Goog-Content-Length-Range ヘッダを通してこの制限を強制します。また、クラウドストレージプロバイダの制限を設定する必要があります。 |
[runners.cache.s3]
。[runners.cache]
で S3 を直接設定する設定は非推奨となりました。GitLab Runner 12.0では、この設定構文は削除され、サポートされなくなりました。キャッシュメカニズムは、キャッシュのアップロードとダウンロードに署名済みのURLを使用します。URLはGitLab Runner自身のインスタンスによって署名されます。ジョブのスクリプト(キャッシュのアップロード/ダウンロードスクリプトを含む)がローカルまたは外部のマシンで実行されるかは関係ありません。例えば、shell
またはdocker
の Executor は GitLab Runner プロセスが実行されている同じマシン上でスクリプトを実行します。同時に、virtualbox
またはdocker+machine
はスクリプトを実行するために別の VM に接続します。このプロセスはセキュリティ上の理由によるもので、キャッシュアダプターの認証情報が漏れる可能性を最小限にするためです。
S3 キャッシュアダプターがIAM インスタンスプロファイルを使うように設定されている場合、アダプターは GitLab Runner マシンにアタッチされているプロファイルを使います。GCSキャッシュアダプターについても同様に、CredentialsFile
を使用するように設定されている場合、そのファイルはGitLab Runnerマシンに存在する必要があります。
この表は、config.toml
、CLI オプション、register
の ENV 変数の一覧です。
設定 | TOMLフィールド | CLIオプションregister
| ENVregister
| |||
---|---|---|---|---|---|---|
Type | [runners.cache] -> Type | --cache-type | $CACHE_TYPE | |||
Path | [runners.cache] -> Path |
--cache-path 12.0以前 --cache-s3-cache-path
|
$CACHE_PATH 12.0以前 $S3_CACHE_PATH
| |||
Shared | [runners.cache] -> Shared |
--cache-shared 12.0以前 --cache-cache-shared
| $CACHE_SHARED | |||
S3.ServerAddress |
[runners.cache.s3] -> ServerAddress 12.0以前 [runners.cache] -> ServerAddress
| --cache-s3-server-address |
$CACHE_S3_SERVER_ADDRESS 12.0以前 $S3_SERVER_ADDRESS
| |||
S3.AccessKey |
[runners.cache.s3] -> AccessKey 12.0以前 [runners.cache] -> AccessKey
| --cache-s3-access-key |
$CACHE_S3_ACCESS_KEY 12.0以前 $S3_ACCESS_KEY
| |||
S3.SecretKey |
[runners.cache.s3] -> SecretKey 12.0以前 [runners.cache] -> SecretKey
| --cache-s3-secret-key |
$CACHE_S3_SECRET_KEY 12.0以前 $S3_SECRET_KEY
| |||
S3.BucketName |
[runners.cache.s3] -> BucketName 12.0以前 [runners.cache] -> BucketName
| --cache-s3-bucket-name |
$CACHE_S3_BUCKET_NAME 12.0以前 $S3_BUCKET_NAME
| |||
S3.BucketLocation |
[runners.cache.s3] -> BucketLocation 12.0以前 [runners.cache] -> BucketLocation
| --cache-s3-bucket-location |
$CACHE_S3_BUCKET_LOCATION 12.0以前 $S3_BUCKET_LOCATION
| |||
S3.Insecure |
[runners.cache.s3] -> Insecure 12.0以前 [runners.cache] -> Insecure
| --cache-s3-insecure |
$CACHE_S3_INSECURE 12.0以前 $S3_INSECURE
| |||
S3.AuthenticationType | [runners.cache.s3] -> AuthenticationType | --cache-s3-authentication_type | $CACHE_S3_AUTHENTICATION_TYPE | |||
S3.ServerSideEncryption | [runners.cache.s3] -> ServerSideEncryption | --cache-s3-server-side-encryption | $CACHE_S3_SERVER_SIDE_ENCRYPTION | |||
S3.ServerSideEncryptionKeyID | [runners.cache.s3] -> ServerSideEncryptionKeyID | --cache-s3-server-side-encryption-key-id | $CACHE_S3_SERVER_SIDE_ENCRYPTION_KEY_ID | |||
GCS.AccessID | [runners.cache.gcs] -> AccessID | --cache-gcs-access-id | $CACHE_GCS_ACCESS_ID | |||
GCS.PrivateKey | [runners.cache.gcs] -> PrivateKey | --cache-gcs-private-key | $CACHE_GCS_PRIVATE_KEY | |||
GCS.CredentialsFile | [runners.cache.gcs] -> CredentialsFile | --cache-gcs-credentials-file | $GOOGLE_APPLICATION_CREDENTIALS | |||
GCS.BucketName | [runners.cache.gcs] -> BucketName | --cache-gcs-bucket-name | $CACHE_GCS_BUCKET_NAME | |||
Azure.AccountName | [runners.cache.azure] -> AccountName | --cache-azure-account-name | $CACHE_AZURE_ACCOUNT_NAME | |||
Azure.AccountKey | [runners.cache.azure] -> AccountKey | --cache-azure-account-key | $CACHE_AZURE_ACCOUNT_KEY | |||
Azure.ContainerName | [runners.cache.azure] -> ContainerName | --cache-azure-container-name | $CACHE_AZURE_CONTAINER_NAME | |||
Azure.StorageDomain | [runners.cache.azure] -> StorageDomain | --cache-azure-storage-domain | $CACHE_AZURE_STORAGE_DOMAIN |
[runners.cache.s3]
セクション
以下のパラメータは、キャッシュ用のS3ストレージを定義します。
GitLab Runner 11.2以前では、これらの設定はグローバル[runners.cache]
。
パラメータ | 種類 | 説明 |
---|---|---|
ServerAddress | 文字列です。 | S3対応サーバーのhost:port 。AWS以外のサーバーを使用している場合は、ストレージ製品のドキュメントを参照して正しいアドレスを決定してください。DigitalOcean の場合、アドレスはspacename.region.digitaloceanspaces.com の形式でなければなりません。 |
AccessKey | 文字列です。 | S3インスタンスに指定されたアクセスキー。 |
SecretKey | 文字列です。 | S3インスタンスに指定されたシークレットキー。 |
BucketName | 文字列です。 | キャッシュが保存されるストレージバケットの名前。 |
BucketLocation | 文字列です。 | S3リージョンの名前。 |
Insecure | boolean | S3 サービスがHTTP で利用可能な場合、true に設定します。デフォルトはfalse です。 |
AuthenticationType | 文字列です。 | GitLab 14.4以降では、iam またはaccess-key . access-key に設定します。access-key デフォルトは access-key 、ServerAddress ,AccessKey ,SecretKey がすべて提供されている場合です。ServerAddress ,AccessKey ,SecretKey がない場合のデフォルトはiam です。 |
ServerSideEncryption | 文字列です。 | GitLab 15.3以降では、S3で使用されるサーバー側の暗号化タイプはS3 、またはKMS 。 |
ServerSideEncryptionKeyID | 文字列です。 | GitLab 15.3 以降では、KMS を使用する場合に暗号化に使用する KMS 鍵のエイリアスまたは ID。 |
使用例:
[runners.cache]
Type = "s3"
Path = "path/to/prefix"
Shared = false
[runners.cache.s3]
ServerAddress = "s3.amazonaws.com"
AccessKey = "AWS_S3_ACCESS_KEY"
SecretKey = "AWS_S3_SECRET_KEY"
BucketName = "runners-cache"
BucketLocation = "eu-west-1"
Insecure = false
ServerSideEncryption = "KMS"
ServerSideEncryptionKeyID = "alias/my-key"
例:ServerAddress
、AccessKey
、SecretKey
のいずれかが指定されず、AuthenticationType
が提供されない場合、S3 クライアントはgitlab-runner
インスタンスで利用可能な IAM インスタンスプロファイルを使用します。オートスケール設定では、これはジョブが実行されるオンデマンドマシンではありません。ServerAddress
、AccessKey
、SecretKey
がすべて指定されていて、AuthenticationType
が指定されていない場合、access-key
が認証タイプとして使用されます。
Helmチャートを使ってGitLab Runnerをインストールし、values.yaml
ファイルでrbac.create
をtrueに設定すると、ServiceAccountが作成されます。この ServiceAccount のアノテーションはrbac.serviceAccountAnnotations
セクションから取得されます。
Amazon EKS上のRunnerでは、サービスアカウントに割り当てるIAMロールを指定できます。具体的に必要なアノテーションは、eks.amazonaws.com/role-arn: arn:aws:iam::<ACCOUNT_ID>:role/<IAM_ROLE_NAME>
。
このロールの IAM ポリシーには、指定したバケットに対して以下のアクションを実行する権限が必要です:
- “s3:PutObject”
- “s3:GetObjectVersion”
- “s3:GetObject”
- “s3:DeleteObject”
KMS
タイプのServerSideEncryption
を使用する場合、このロールには、指定された AWS KMS キーに対して以下のアクションを実行する権限も必要です:
- “kms:Encrypt”
- “kms:復号化”
- “kms:ReEncrypt*”
- “kms:GenerateDataKey*”
- “kms:DescribeKey”
ServerSideEncryption
タイプのヘッダはSSE-C
現在サポートされていません。 SSE-C
これは、鍵が安全に保たれないジョブに鍵の材料を渡すことを意味します。これは復号鍵を漏洩させる可能性があります。この問題に関する議論はこのマージリクエストにあります。
Runner キャッシュ用の S3 バケットで KMS キー暗号化を使用します。
GenerateDataKey
API は、クライアント側暗号化 (https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) 用のデータキーを作成するために KMS 共通キーを使用します。KMSキーの設定は以下のようにする必要があります:
属性 | 説明 |
---|---|
キータイプ | 対称 |
起源 | AWS_KMS |
キースペック | SYMMETRIC_DEFAULT |
キーの使用 | 暗号化と復号化 |
rbac.serviceAccountName
で定義された ServiceAccount に割り当てられたロールの IAM ポリシーには、KMS Key に対して以下のアクションを実行する権限が必要です:
kms:GetPublicKey
kms:Decrypt
kms:Encrypt
kms:DescribeKey
kms:GenerateDataKey
Kubernetes ServiceAccountリソースに対するIAMロールの有効化
サービスアカウントにIAMロールを使用するには、クラスターにIAM OIDCプロバイダが存在する必要があります。IAM OIDCプロバイダがクラスターに関連付けられた後、Runnerのサービスアカウントに関連付けるIAMロールを作成できます。
- Create Role]ウィンドウの[Select type of trusted entity]で[Windows Identity]を選択します。
-
ロールの「Trusted Relationships」タブで、「Web Identity」を選択します:
-
Trusted entitiesセクションは、
arn:aws:iam::<ACCOUNT_ID>:oidc-provider/oidc.eks.<AWS_REGION>.amazonaws.com/id/<OIDC_ID>
の形式である必要があります。OIDC IDは、EKSクラスターの設定タブで確認できます。 -
Conditionセクションには、
rbac.serviceAccountName
で定義された GitLab Runner サービスアカウント、またはrbac.create
がtrue
に設定されている場合に作成されるデフォルトのサービスアカウントが必要です:条件 キー 値 StringEquals
oidc.eks.<AWS_REGION>.amazonaws.com/id/<OIDC_ID>:sub
system:serviceaccount:<GITLAB_RUNNER_NAMESPACE>:<GITLAB_RUNNER_SERVICE_ACCOUNT>
-
[runners.cache.gcs]
セクション
GitLab Runner 11.3.0 で導入されました。
以下のパラメータはGoogle Cloud Storageのネイティブサポートを定義します。これらの値の出典については、Google Cloud Storage(GCS) Authentication のドキュメントをご覧ください。
パラメータ | 種類 | 説明 |
---|---|---|
CredentialsFile | 文字列です。 | Google JSON キーファイルへのパス。service_account タイプのみがサポートされています。設定されている場合、この値はconfig.toml で直接設定されているAccessID やPrivateKey よりも優先されます。 |
AccessID | 文字列です。 | ストレージへのアクセスに使用するGCPサービスアカウントのID。 |
PrivateKey | 文字列です。 | GCS リクエストに署名するために使用される秘密鍵。 |
BucketName | 文字列です。 | キャッシュが保存されるストレージバケットの名前。 |
例:
** config.toml
ファイルで直接設定された認証情報:**
[runners.cache]
Type = "gcs"
Path = "path/to/prefix"
Shared = false
[runners.cache.gcs]
AccessID = "cache-access-account@test-project-123456.iam.gserviceaccount.com"
PrivateKey = "-----BEGIN PRIVATE KEY-----\nXXXXXX\n-----END PRIVATE KEY-----\n"
BucketName = "runners-cache"
GCP からダウンロードした JSON ファイルの資格情報:
[runners.cache]
Type = "gcs"
Path = "path/to/prefix"
Shared = false
[runners.cache.gcs]
CredentialsFile = "/etc/gitlab-runner/service-account.json"
BucketName = "runners-cache"
Application Default Credentials(ADC) GCP のメタデータサーバから:
GitLab RunnerをGoogle Cloud ADCで使う場合、通常はデフォルトのサービスアカウントを使います。その場合、インスタンス用の認証情報を提供する必要はありません:
[runners.cache]
Type = "gcs"
Path = "path/to/prefix"
Shared = false
[runners.cache.gcs]
BucketName = "runners-cache"
ADC を使う場合は、使うサービスアカウントがiam.serviceAccounts.signBlob
の権限を持っていることを確認してください。通常は、サービスアカウントに Service Account Token Creator ロールを付与します。
[runners.cache.azure]
セクション
GitLab Runner 13.4.0 で導入されました。
以下のパラメータは、Azure Blob Storageのネイティブサポートを定義します。詳細については、Azure Blob Storageのドキュメントを参照してください。S3 と GCS がbucket
という単語をオブジェクトのコレクションに使用するのに対し、Azure はcontainer
という単語を Blob のコレクションに使用します。
パラメータ | 種類 | 説明 |
---|---|---|
AccountName | 文字列です。 | ストレージへのアクセスに使用する Azure Blob Storage アカウントの名前。 |
AccountKey | 文字列です。 | コンテナへのアクセスに使用するストレージアカウントのアクセスキー。 |
ContainerName | 文字列です。 | キャッシュデータを保存するストレージコンテナの名前。 |
StorageDomain | 文字列です。 |
Azure ストレージエンドポイントのサービスに使用するドメイン名 (オプション)。デフォルトはblob.core.windows.net 。 |
使用例:
[runners.cache]
Type = "azure"
Path = "path/to/prefix"
Shared = false
[runners.cache.azure]
AccountName = "<AZURE STORAGE ACCOUNT NAME>"
AccountKey = "<AZURE STORAGE ACCOUNT KEY>"
ContainerName = "runners-cache"
StorageDomain = "blob.core.windows.net"
[runners.kubernetes]
セクション
GitLab Runner v1.6.0 で導入されました。
以下のパラメータがKubernetesの動作を定義します。その他のパラメータについては、Kubernetes Executor のドキュメントを参照してください。
パラメータ | 種類 | 説明 |
---|---|---|
host | 文字列です。 | オプション。KubernetesホストURL。指定されていない場合、Runnerは自動検出を試みます。 |
cert_file | 文字列です。 | オプション。Kubernetes認証証明書。 |
key_file | 文字列です。 | オプション。Kubernetes認証秘密鍵。 |
ca_file | 文字列です。 | オプション。Kubernetes auth ca 証明書。 |
image | 文字列です。 | 何も指定されていない場合にジョブに使用するデフォルトのDockerイメージ。 |
allowed_images | アレイ |
.gitlab-ci.yml で許可されるイメージのワイルドカードリスト。 存在しない場合、すべてのイメージが許可されます (["*/*:*"] と同じ)。DockerまたはKubernetesエクゼキュータで使用します。 |
allowed_services | アレイ |
.gitlab-ci.yml で許可されるサービスのワイルドカードリスト。 存在しない場合、すべてのイメージが許可されます(["*/*:*"] と同等)。DockerまたはKubernetesエクゼキュータで使用します。 |
namespace | 文字列です。 | Kubernetesジョブを実行する名前空間。 |
privileged | boolean | 特権フラグを有効にしてすべてのコンテナを実行します。 |
allow_privilege_escalation | boolean | オプション。allowPrivilegeEscalation フラグが有効なすべてのコンテナを実行します。 |
node_selector | テーブル |
key=value のstring=string のペアのtable 。すべてのkey=value のペアに一致する Kubernetes ノードにポッドの作成を制限します。 |
image_pull_secrets | アレイ | 非公開レジストリからのDockerイメージのプル認証に使用されるKubernetesdocker-registry シークレットネームを含むアイテムの配列。 |
使用例:
[runners.kubernetes]
host = "https://45.67.34.123:4892"
cert_file = "/etc/ssl/kubernetes/api.crt"
key_file = "/etc/ssl/kubernetes/api.key"
ca_file = "/etc/ssl/kubernetes/ca.crt"
image = "golang:1.8"
privileged = true
allow_privilege_escalation = true
image_pull_secrets = ["docker-registry-credentials", "optional-additional-credentials"]
allowed_images = ["ruby:*", "python:*", "php:*"]
allowed_services = ["postgres:9.4", "postgres:latest"]
[runners.kubernetes.node_selector]
gitlab = "true"
ヘルパーイメージ
docker
,docker+machine
,kubernetes
の Executor を使う場合、GitLab Runner は Git、アーティファクト、キャッシュオペレーションを処理するために特定のコンテナを使います。このコンテナはhelper image
という名前のイメージから作成されます。
このヘルパー・イメージは、amd64、arm、arm64、s390x、ppc64leの各アーキテクチャで利用できます。このコンテナには、GitLab Runnerバイナリを特別にコンパイルしたgitlab-runner-helper
バイナリが含まれています。利用可能なコマンドのサブセットと、Git、Git LFS、SSL証明書ストアが含まれています。
ヘルパーイメージにはいくつかの種類があります:alpine
alpine3.15
,alpine3.16
,alpine3.17
,alpine3.18
,alpine-latest
,ubi-fips
andubuntu
.alpine
イメージはフットプリントが小さいため、現在のところデフォルトですが、環境によってはDNSのイシューが発生することがあります。helper_image_flavor = "ubuntu"
を使用すると、ubuntu
のヘルパーイメージが選択されます。
GitLab Runner 16.1 以降では、alpine
はalpine3.18
のエイリアスです。
alpine-latest
フレーバーはベースイメージとしてalpine:latest
を使っています。
GitLab RunnerがDEB/RPMパッケージからインストールされると、サポートされているアーキテクチャのイメージがホストにインストールされます。Runnerがジョブの実行を準備するとき、指定されたバージョン(RunnerのGitリビジョンに基づく)のイメージがDocker Engineに見つからない場合は、自動的にロードされます。docker
とdocker+machine
の両 Executor はこの方法で動作します。
alpine
フレーバーについては alpine
、alpine
デフォルトの alpine
フレーバーalpine
イメージのみが alpine
パッケージに含まれています。その他のフレーバーはすべてレジストリからダウンロードされます。
GitLab Runnerのkubernetes
Executorと手動インストールでは動作が異なります。
- 手動インストールの場合、
gitlab-runner-helper
のバイナリは含まれていません。 -
kubernetes
Executorの場合、Kubernetes APIはgitlab-runner-helper
イメージをローカルアーカイブからロードすることを許可しません。
どちらの場合も、GitLab Runnerはヘルパーイメージをダウンロードします。GitLab Runnerのリビジョンとアーキテクチャによって、ダウンロードするタグが定義されます。
Arm上のKubernetesのヘルパーイメージ設定
Kubernetesクラarm64
スターでヘルパーイメージを arm64
使用するには、設定ファイルに以下の値を設定します。
[runners.kubernetes]
helper_image = "gitlab/gitlab-runner-helper:arm64-latest"
古いバージョンのAlpine Linuxを使用するRunnerイメージ
GitLab Runner 14.5 で導入されました。
イメージは複数のバージョンのAlpine Linuxでビルドされるので、新しいバージョンのAlpineを使いながら、同時に古いバージョンも使うことができます。
ヘルパーイメージについては、helper_image_flavor
を変更するか、ヘルパーイメージのセクションを読んでください。
GitLab Runnerイメージも同じように、alpine、alpine3.15、alpine3.16、alpine3.17、alpine3.18、またはalpine-latestをイメージのプレフィックスとして、バージョンの前に付けてください:
docker pull gitlab/gitlab-runner:alpine3.18-v16.1.0
アルパインpwshイメージ
GitLab Runner 16.1以降では、すべてのalpine
ヘルパーイメージにpwsh
。唯一の例外はalpine-latest
で、GitLab Runner のヘルパーイメージがベースにしているpwsh Docker イメージはalpine:latest
をサポートしていません。
使用例:
docker pull gitlab/gitlab-runner-helper:alpine3.18-x86_64-v16.1.0-pwsh
ヘルパーイメージのレジストリ
GitLab 15.0以降では、ヘルパーイメージはGitLabコンテナレジストリから取得されます。
GitLab 15.0以前では、Docker Hubからイメージを使うようにヘルパーイメージを設定します。GitLabレジストリからベースとなるgitlab-runner-helper
イメージを取得するには、helper-image
値を使用します:registry.gitlab.com/gitlab-org/gitlab-runner/gitlab-runner-helper:x86_64-v${CI_RUNNER_VERSION}
.
セルフマネージドインスタンスも、GitLab.comのGitLabコンテナレジストリからヘルパーイメージを取得します。GitLab Container Registryのステータスを確認するには、GitLab System Statusをご覧ください。
ヘルパーイメージを上書き
場合によっては、ヘルパー画像を上書きする必要があるかもしれません。これを行う理由はたくさんあります:
-
ジョブの実行速度を上げるため:インターネット接続が遅い環境では、同じイメージを何度もダウンロードすると、ジョブの実行時間が長くなる可能性があります。
gitlab/gitlab-runner-helper:XYZ
の正確なコピーが保存されている内部レジストリからヘルパーイメージをダウンロードすることで、スピードアップできます。 -
セキュリティ上の問題:事前にチェックされていない外部の依存関係をダウンロードしたくない場合があります。レビューされ、ローカルリポジトリに保存された依存関係のみを使用するというビジネスルールがあるかもしれません。
-
インターネットアクセスのないビルド環境:場合によっては、ジョブは専用の閉じたネットワークがある環境で実行されます。これは
kubernetes
Executorには当てはまらず、Kubernetesクラスタが利用可能な外部レジストリからイメージをダウンロードする必要があります。 -
追加ソフトウェア:
git+http
の代わりにgit+ssh
でアクセスできるサブモジュールをサポートするためにopenssh
のように、ヘルパーイメージにいくつかの追加ソフトウェアをインストールしたい場合があります。
このような場合、docker
、docker+machine
、kubernetes
のエクゼキューターで利用できるhelper_image
設定フィールドを使って、カスタムイメージを設定できます:
[[runners]]
(...)
executor = "docker"
[runners.docker]
(...)
helper_image = "my.registry.local/gitlab/gitlab-runner-helper:tag"
ヘルパーイメージのバージョンは、GitLab Runnerのバージョンと厳密に結合していると考えるべきです。これらのイメージを提供する主な理由の一つは、GitLab Runnerがgitlab-runner-helper
バイナリを使用していることです。このバイナリは GitLab Runner のソースの一部をコンパイルしたものです。このバイナリは、どちらのバイナリでも同じであることが期待される内部APIを使用しています。
デフォルトでは、GitLab Runner はgitlab/gitlab-runner-helper:XYZ
イメージを参照します。XYZ
は GitLab Runner のアーキテクチャと Git リビジョンに基づいています。GitLab Runner 11.3 以降では、バージョン変数の一つを使ってイメージのバージョンを定義することができます:
[[runners]]
(...)
executor = "docker"
[runners.docker]
(...)
helper_image = "my.registry.local/gitlab/gitlab-runner-helper:x86_64-v${CI_RUNNER_VERSION}"
この設定により、GitLab Runnerは実行者に、コンパイルデータに基づくバージョンx86_64-v${CI_RUNNER_VERSION}
、イメージを使用するように指示します。GitLab Runnerを新しいバージョンにアップデートした後、GitLab Runnerは適切なイメージをダウンロードしようとします。GitLab Runnerをアップグレードする前にイメージをレジストリにアップロードしておく必要があります。そうしないと、ジョブは “No such image “エラーで失敗し始めます。
GitLab Runner 13.2以降では、ヘルパーイメージは$CI_RUNNER_REVISION
に加えて$CI_RUNNER_VERSION
のタグが付けられます。どちらのタグも有効で、同じイメージを指しています。
[[runners]]
(...)
executor = "docker"
[runners.docker]
(...)
helper_image = "my.registry.local/gitlab/gitlab-runner-helper:x86_64-v${CI_RUNNER_VERSION}"
PowerShell Core を使う場合
GitLab 13.9 で導入されました。
PowerShell Core を含む Linux 用ヘルパーイメージの追加バージョンがgitlab/gitlab-runner-helper:XYZ-pwsh
タグで公開されています。
[runners.custom_build_dir]
セクション
GitLab Runner 11.10 で導入されました。
このセクションではカスタムビルドディレクトリのパラメータを定義します。
この機能は、明示的に設定されていない場合、kubernetes
、docker
、docker+machine
のエクゼキュータではデフォルトで有効になっています。その他のエクゼキュータでは、デフォルトで無効になっています。
この機能には、GIT_CLONE_PATH
がrunners.builds_dir
で定義されたパス内にあることが必要です。builds_dir
を使用するには、$CI_BUILDS_DIR
変数を使用します。
デフォルトでは、この機能はdocker
とkubernetes
のエクゼキュータに対してのみ有効になっています。この機能はどのエクゼキュータでも明示的に有効にすることができますが、builds_dir
を共有し、concurrent > 1
を持つエクゼキュータで使用する場合には注意が必要です。
パラメータ | 種類 | 説明 |
---|---|---|
enabled | boolean | ユーザーがジョブのカスタムビルドディレクトリを定義できるようにします。 |
使用例:
[runners.custom_build_dir]
enabled = true
デフォルトのビルドディレクトリ
GitLab Runnerは、_Builds Directoryとして_よく知られているベースパスの下に存在するパスにリポジトリをクローンします。このベースディレクトリのデフォルトの場所は Executor によって異なります。例えば
-
Kubernetes、Docker、Docker MachineExecutorの場合、コンテナ内部
/builds
。 -
Shellエクゼキュータ、それは
$PWD/builds
。 -
SSH、VirtualBox、ParallelsのExecutorは、
~/builds
、ターゲットマシンへのSSH接続を処理するように設定されたユーザーのホームディレクトリにあります。 - カスタムエグゼキュータの場合、デフォルトは提供されず、明示的に設定する必要があります。
使用する_Builds Directory_はbuilds_dir
の設定でユーザーが明示的に定義できます。
GIT_CLONE_PATH
を指定することもでき、その場合は以下のガイドラインは適用されません。GitLab Runnerは実行するすべてのジョブに_Buildsディレクトリを_使いますが、特定のパターン{builds_dir}/$RUNNER_TOKEN_KEY/$CONCURRENT_ID/$NAMESPACE/$PROJECT_NAME
を使ってネストします。例:/builds/2mn-ncv-/0/user/playground
.
GitLab Runnerは_Builds_ Directoryの中に何かを保存することを止めません。例えば、/builds/tools
の内部に CI 実行時に使用するツールを格納することができます。Builds_Directoryの_中には何も保存してはいけません。GitLab Runnerはそれを完全にコントロールする必要があり、そのようなケースでは安定性を提供しません。CIに必要な依存関係がある場合は、別の場所にインストールすることをお勧めします。
[runners.referees]
セクション
- GitLab Runner 12.7 で導入されました。
- GitLab v12.6以降が必要です。
GitLab Runner refereesを使用して、GitLabに追加のジョブモニタリングデータを渡します。レフリーは、ジョブに関連する追加データをクエリして収集するRunnerマネージャのワーカーです。結果はジョブのアーティファクトとして GitLab にアップロードされます。
メトリクスRunnerレフリーを使う
ジョブを実行しているマシンやコンテナがPrometheusメトリクスを公開している場合、GitLab Runnerはジョブ期間中ずっとPrometheusサーバにクエリを発行することができます。メトリクスを受信した後、後で分析に使用できるジョブのアーティファクトとしてアップロードされます。
docker-machine
Executor だけがレフェリーをサポートしています。
GitLab Runner用のメトリクスRunnerレフリーの設定
config.toml
ファイルの[[runner]]
セクション内に[runner.referees]
と[runner.referees.metrics]
を定義し、以下のフィールドを追加します:
設定 | 説明 |
---|---|
prometheus_address | GitLab Runnerインスタンスからメトリクスを収集するサーバーです。ジョブの終了時にRunnerマネージャがアクセスできる必要があります。 |
query_interval | ジョブに関連付けられている Prometheus インスタンスに時系列データをクエリする頻度を、間隔(秒)で定義します。 |
queries | 各インターバルで実行されるPromQLクエリの配列。 |
node_exporter
メトリクスの完全な設定例を示します:
[[runners]]
[runners.referees]
[runners.referees.metrics]
prometheus_address = "http://localhost:9090"
query_interval = 10
metric_queries = [
"arp_entries:rate(node_arp_entries{{selector}}[{interval}])",
"context_switches:rate(node_context_switches_total{{selector}}[{interval}])",
"cpu_seconds:rate(node_cpu_seconds_total{{selector}}[{interval}])",
"disk_read_bytes:rate(node_disk_read_bytes_total{{selector}}[{interval}])",
"disk_written_bytes:rate(node_disk_written_bytes_total{{selector}}[{interval}])",
"memory_bytes:rate(node_memory_MemTotal_bytes{{selector}}[{interval}])",
"memory_swap_bytes:rate(node_memory_SwapTotal_bytes{{selector}}[{interval}])",
"network_tcp_active_opens:rate(node_netstat_Tcp_ActiveOpens{{selector}}[{interval}])",
"network_tcp_passive_opens:rate(node_netstat_Tcp_PassiveOpens{{selector}}[{interval}])",
"network_receive_bytes:rate(node_network_receive_bytes_total{{selector}}[{interval}])",
"network_receive_drops:rate(node_network_receive_drop_total{{selector}}[{interval}])",
"network_receive_errors:rate(node_network_receive_errs_total{{selector}}[{interval}])",
"network_receive_packets:rate(node_network_receive_packets_total{{selector}}[{interval}])",
"network_transmit_bytes:rate(node_network_transmit_bytes_total{{selector}}[{interval}])",
"network_transmit_drops:rate(node_network_transmit_drop_total{{selector}}[{interval}])",
"network_transmit_errors:rate(node_network_transmit_errs_total{{selector}}[{interval}])",
"network_transmit_packets:rate(node_network_transmit_packets_total{{selector}}[{interval}])"
]
メトリクス・クエリはcanonical_name:query_string
形式です。クエリ文字列は、実行中に置換される 2 つの変数に対応しています:
設定 | 説明 |
---|---|
{selector} | 特定の GitLab Runner インスタンスによって Prometheus で生成されたメトリクスを選択するlabel_name=label_value ペアに置き換えられました。 |
{interval} | この referee の[runners.referees.metrics] 設定からquery_interval パラメータに置き換えられました。 |
例えば、docker-machine
Executor を使用する共有 GitLab Runner 環境では、node=shared-runner-123
のような{selector}
を持つことになります。