高度な設定

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ログレベルを定義します。オプションは、debuginfowarnerrorfatalpanicです。この設定は、コマンドライン引数--debug-l、または--log-levelによって設定されたレベルよりも優先順位が低くなります。
log_formatログ形式を指定します。オプションはrunnertext 、およびjson です。この設定は、コマンドライン引数--log-formatで設定される形式よりも優先順位が低くなります。デフォルト値はrunnerで、色付け用の ANSI エスケープ・コードが含まれています。
check_intervalランナーが新しいジョブをチェックする間隔の長さを秒単位で定義します。デフォルト値は3 です。0 以下に設定すると、デフォルト値が使用されます。
sentry_dsnSentryへのすべてのシステムレベルエラーの追跡を有効にします。
listen_addressPrometheus メトリクス 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-1runner-2) がある場合、10 秒ごとにリクエストが行われます。この場合のループの例を示します:

  1. check_interval の値 (10s) を取得します。
  2. ランナーのリストを取得 (runner-1,runner-2).
  3. 睡眠間隔の計算 (10s / 2 = 5s).
  4. 無限ループを開始します:
    1. runner-1 のジョブをリクエスト。
    2. 5s
    3. runner-2 のジョブをリクエスト。
    4. 5s
    5. 繰り返します。

この例では、Runner のプロセスからのリクエストは 5 秒ごとに行われます。runner-1runner-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] セクションを削除します。

note
Runnerインスタンスがすでに実行されている場合、[session_server] セクションの変更を有効にするには、gitlab-runner restart

GitLab Runner Docker イメージを使っている場合は、docker run コマンド-p 8093:8093 を追加して8093 ポートを公開する必要があります。

[[runners]] セクション

[[runners]] セクションは1つのランナーを定義します。

設定説明
nameランナーの説明。情報提供のみ。
urlGitLab インスタンスの URL。
tokenランナー登録時に取得したランナーの認証トークン。登録トークンとは異なります。
tls-ca-fileHTTPSを使用する場合、相手を検証するための証明書を含むファイル。自己署名証明書またはカスタム認証局のドキュメントを参照してください。
tls-cert-fileHTTPS を使用する場合、ピアと認証するための証明書を含むファイル。
tls-key-fileHTTPS を使用する場合、相手と認証するための秘密鍵が含まれるファイル。
limitこの登録ランナーが同時に処理できるジョブの数を制限します。 0 (デフォルト)は制限しないことを意味します。この設定が Docker Machine Executor (自動スケーリング用) でどのように機能するかをご覧ください。
executorプロジェクトのビルド方法を選択します。
shellスクリプトを生成するシェルの名前。デフォルト値はプラットフォーム依存です。
builds_dir選択したExecutorのコンテキストでビルドが保存されるディレクトリへの絶対パス。例えば、ローカル、Docker、SSHなど。
cache_dir選択したExecutorのコンテキストでビルドキャッシュが保存されるディレクトリへの絶対パス。例えば、ローカル、Docker、SSHなど。docker Executorを使用する場合は、このディレクトリをvolumes パラメータに含める必要があります。
environment環境変数を追加または上書きします。
request_concurrencyGitLab からの新規ジョブの同時リクエスト数を制限します。デフォルトは1
output_limitビルドログの最大サイズ(キロバイト)。デフォルトは4096 (4MB)。
pre_clone_scriptDEPRECATED - 代わりにpre_get_sources_script を使ってください。
pre_get_sources_scriptGit リポジトリの更新やサブモジュールの更新の前に Runner で実行するコマンドです。Git クライアントの設定を最初に調整するときなどに使います。複数のコマンドを挿入するには、(三重引用符で囲まれた)複数行の文字列か\n 文字を使います。
post_clone_scriptDEPRECATED - 代わりにpost_get_sources_script を使ってください。
post_get_sources_scriptGit リポジトリの更新とサブモジュールの更新後に Runner で実行するコマンド。複数のコマンドを挿入するには、(三重引用符で囲まれた)複数行の文字列か\n 文字を使います。
pre_build_scriptビルドを実行する前にランナーで実行するコマンド。複数のコマンドを挿入するには、(三重引用符で囲まれた)複数行の文字列または\n 文字を使用します。
post_build_scriptビルドを実行した直後、after_script を実行する前に、ランナーで実行するコマンド。複数のコマンドを挿入するには、(三重引用符で囲まれた)複数行の文字列または\n 文字を使用します。
clone_urlGitLab インスタンスの URL を上書きします。Runner が GitLab URL に接続できない場合にのみ使用します。
debug_trace_disabled CI_DEBUG_TRACE 機能を無効にします。true に設定すると、ユーザーによってCI_DEBUG_TRACEtrue に設定されても、デバッグログ(トレース)は無効のままになります。
refereesGitLab にジョブのアーティファクトとして結果を渡す追加のジョブ監視ワーカー。
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_urlhttp://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] andDockerEngineWindows 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説明
bashBash(Bourne-shell)スクリプトを生成します。すべてのコマンドは Bash コンテキストで実行されます。すべての Unix システムのデフォルトです。
shSh (Bourne-shell) スクリプトを生成します。Sh コンテキストで実行されるすべてのコマンド。すべての Unix システムのbash のフォールバック。
powershellPowerShell スクリプトを生成します。すべてのコマンドはPowerShell Desktopコンテキストで実行されます。GitLab Runner 12.0-13.12では、これはWindowsのデフォルトです。
pwshPowerShellスクリプトを生成します。すべてのコマンドは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_dirDockerキャッシュを保存するディレクトリ。このパスは絶対パスでも、現在の作業ディレクトリからの相対パスでもかまいません。詳細はdisable_cache を参照してください。
cap_addコンテナにLinux機能を追加します。
cap_dropコンテナから追加の Linux 機能を削除します。
cpuset_cpusコントロールグループのCpusetCpus.文字列です。
cpu_shares相対的な CPU 使用率を設定するために使用される CPU シェア数。デフォルトは1024
cpusCPU数(Docker 1.13以降で利用可能)。文字列。
devices追加のホストデバイスをコンテナと共有します。
device_cgroup_rulesカスタムデバイスcgroup ルール(Docker 1.28以降で利用可能)。
disable_cacheDockerエクゼキュータには2つのレベルのキャッシュがあります: グローバルキャッシュ(他のエクゼキュータと同様)とDockerボリュームに基づくローカルキャッシュです。この設定フラグは、自動的に作成された(ホストディレクトリにマッピングされていない)キャッシュボリュームの使用を無効にするローカルなものにのみ作用します。言い換えると、ビルドの一時ファイルを保持するコンテナを作成しないようにするだけで、ランナーが分散キャッシュモードで設定されている場合はキャッシュを無効にしません。
disable_entrypoint_overwriteイメージのエントリポイントの上書きを無効にします。
dnsコンテナが使用する DNS サーバーのリスト。
dns_searchDNS 検索ドメインのリスト。
extra_hostsコンテナ環境で定義されるべきホスト。
gpusDockerコンテナ用の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
hostnameDockerコンテナのカスタムホスト名。
imageジョブを実行するイメージ。
linksジョブを実行するコンテナとリンクするコンテナ。
memoryメモリ制限。文字列。
memory_swapメモリの総量制限。文字列。
memory_reservationメモリのソフトリミット。文字列。
network_modeコンテナをカスタムネットワークに追加します。
mac_addressコンテナのMACアドレス(例:92:d0:c6:0a:29:33)。
oom_kill_disableメモリ不足(OOM) エラーが発生した場合は、コンテナ内のプロセスを強制終了しないでください。
oom_score_adjustOOM スコアの調整。正の場合は早くkill。
privilegedコンテナを特権モードで実行。安全ではありません。
services_privileged特権モードでサービスを実行できるようにします。未設定(デフォルト)の場合、privileged の値が代わりに使用されます。DockerExecutorで使用します。安全ではありません。
pull_policyイメージのプルポリシー:never if-not-present またはalways (デフォルト)。詳細は、プルポリシーのドキュメントを参照してください。複数のプルポリシーを追加したり、失敗したプルを再試行したり、プルポリシーを制限したりすることもできます。
runtimeDockerコンテナのランタイム。
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_verifyDockerデーモンへの接続の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_timeoutDockerサービスの待機時間。無効にするには-1 。デフォルトは30
container_labelsRunner が作成する各コンテナに追加するラベルのセット。ラベルの値には、拡張のための環境変数を含めることができます。

[[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] セクションのボリューム

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が実行するステップをまとめると、次のようになります:

  1. 画像名からレジストリ名を検索します。
  2. この値が空でなければ、 Executor はこのレジストリの認証設定を検索します。
  3. 指定したレジストリに対応する認証が見つかった場合は、 それを使用します。

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を認可することができます。適切なレジストリを見つけるために、以下の優先順位が考慮されます:

  1. DOCKER_AUTH_CONFIG で設定された認証情報。
  2. GitLab Runner ホスト上で~/.docker/config.json または~/.dockercfg ファイルを使ってローカルに設定された認証情報(例えば、ホスト上でdocker login を実行することで)。
  3. ジョブのペイロードと一緒にデフォルトで送信される認証情報(例えば、前述のインテグレーションレジストリ用の認証情報)。

レジストリに対して最初に見つかったクレデンシャルが使われます。たとえば、DOCKER_AUTH_CONFIG 変数で内部レジストリのクレデンシャルを追加すると、デフォルトのクレデンシャルがオーバーライドされます。

[runners.parallels] セクション

以下のパラメータは Parallels 用です。

パラメータ説明
base_nameクローンされる Parallels VM の名前です。
template_nameParallels 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_typeVM 起動時のグラフィカル・フロントエンド・タイプ。

使用例:

[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_vm1allowed_vm2 のみが許可されます。これ以外の場合はエラーになります。

[runners.ssh] セクション

以下のパラメータは SSH 接続を定義します。

パラメータ説明
host接続先
portポート。デフォルトは22
userユーザー名。
passwordパスワード
identity_fileSSH 秘密鍵 (id_rsa,id_dsa, またはid_edcsa) へのファイルパス。ファイルは暗号化せずに保存する必要があります。
disable_strict_host_key_checkingGitLab 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 ドキュメントを参照してください。

パラメータ説明
MaxGrowthRateRunnerに並行して追加できるマシンの最大数。デフォルトは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一意の**マシン識別子に置き換えられます。
MachineDriverDocker MachinedriverDocker Machine設定セクションで詳細をご覧ください。
MachineOptionsDocker 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_instance1つのインスタンスで同時に実行できるジョブの数。
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 形式の文字列の配列です。デフォルト: * * * * * timezoneunix-cron 期間を評価するときに使用されるタイムゾーン。デフォルト:システムのローカルタイムゾーン。 idle_countジョブにすぐに利用できるようにしたい目標アイドル容量。idle_timeインスタンスが終了する前にアイドル状態にできる時間。scale_factorジョブのためにすぐに利用可能にしたい目標アイドル容量。idle_countの上に、現在の使用容量の倍数として指定します。デフォルトは0.0です。 scale_factor_limitscale_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_execcleanup_exec が終了した場合の待ち時間(秒単位)(ジョブのキャンセル時など)。このタイムアウトの後、プロセスは強制終了されます。デフォルトは600秒(10分)。
force_kill_timeout整数。kill シグナルがスクリプトに送られてからの待ち時間 (秒単位)。デフォルトは 600 秒 (10 分) です。

[runners.cache] セクション

GitLab Runner 1.1.0 で導入されました。

以下のパラメータがディストリビューションキャッシュ機能を定義します。詳細はRunner autoscale ドキュメントをご覧ください。

パラメータ種類説明
Type文字列です。のいずれか:s3 gcs,azure.
Path文字列です。キャッシュ URL の前に追加するパスの名前。
Sharedbooleanランナー間のキャッシュ共有を有効にします。デフォルトはfalse です。
MaxUploadedArchiveSizeint64クラウドストレージにアップロードされるキャッシュアーカイブのバイト数。悪意のある行為者はこの制限を回避できるので、GCS アダプタは署名付き URL の X-Goog-Content-Length-Range ヘッダを通してこの制限を強制します。また、クラウドストレージプロバイダの制限を設定する必要があります。
caution
GitLab Runner 11.3では、S3に関連する設定パラメータは専用の[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リージョンの名前。
InsecurebooleanS3 サービスがHTTP で利用可能な場合、true に設定します。デフォルトはfalse です。
AuthenticationType文字列です。GitLab 14.4以降では、iam またはaccess-key. access-keyに設定します。access-keyデフォルトは access-keyServerAddress,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"

例:ServerAddressAccessKeySecretKey のいずれかが指定されず、AuthenticationType が提供されない場合、S3 クライアントはgitlab-runner インスタンスで利用可能な IAM インスタンスプロファイルを使用します。オートスケール設定では、これはジョブが実行されるオンデマンドマシンではありません。ServerAddressAccessKeySecretKey がすべて指定されていて、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これは、鍵が安全に保たれないジョブに鍵の材料を渡すことを意味します。これは復号鍵を漏洩させる可能性があります。この問題に関する議論はこのマージリクエストにあります。

note
AWS S3 キャッシュにアップロードできる単一のファイルの最大サイズは 5 GB です。この動作に対する潜在的な回避策についての議論は、このイシューにあります。

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ロールを作成できます。

  1. Create Role]ウィンドウの[Select type of trusted entity]で[Windows Identity]を選択します。
  2. ロールの「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.createtrueに設定されている場合に作成されるデフォルトのサービスアカウントが必要です:

      条件キー
      StringEqualsoidc.eks.<AWS_REGION>.amazonaws.com/id/<OIDC_ID>:subsystem: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で直接設定されているAccessIDPrivateKey よりも優先されます。
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ジョブを実行する名前空間。
privilegedboolean特権フラグを有効にしてすべてのコンテナを実行します。
allow_privilege_escalationbooleanオプション。allowPrivilegeEscalation フラグが有効なすべてのコンテナを実行します。
node_selectorテーブル key=valuestring=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 以降では、alpinealpine3.18 のエイリアスです。

alpine-latest フレーバーはベースイメージとしてalpine:latest を使っています。

GitLab RunnerがDEB/RPMパッケージからインストールされると、サポートされているアーキテクチャのイメージがホストにインストールされます。Runnerがジョブの実行を準備するとき、指定されたバージョン(RunnerのGitリビジョンに基づく)のイメージがDocker Engineに見つからない場合は、自動的にロードされます。dockerdocker+machine の両 Executor はこの方法で動作します。

alpine フレーバーについては alpinealpine デフォルトの 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をご覧ください。

ヘルパーイメージを上書き

場合によっては、ヘルパー画像を上書きする必要があるかもしれません。これを行う理由はたくさんあります:

  1. ジョブの実行速度を上げるため:インターネット接続が遅い環境では、同じイメージを何度もダウンロードすると、ジョブの実行時間が長くなる可能性があります。gitlab/gitlab-runner-helper:XYZ の正確なコピーが保存されている内部レジストリからヘルパーイメージをダウンロードすることで、スピードアップできます。

  2. セキュリティ上の問題:事前にチェックされていない外部の依存関係をダウンロードしたくない場合があります。レビューされ、ローカルリポジトリに保存された依存関係のみを使用するというビジネスルールがあるかもしれません。

  3. インターネットアクセスのないビルド環境:場合によっては、ジョブは専用の閉じたネットワークがある環境で実行されます。これはkubernetes Executorには当てはまらず、Kubernetesクラスタが利用可能な外部レジストリからイメージをダウンロードする必要があります。

  4. 追加ソフトウェア:git+http の代わりにgit+ssh でアクセスできるサブモジュールをサポートするためにopenssh のように、ヘルパーイメージにいくつかの追加ソフトウェアをインストールしたい場合があります。

このような場合、dockerdocker+machinekubernetes のエクゼキューターで利用できる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 で導入されました

このセクションではカスタムビルドディレクトリのパラメータを定義します。

この機能は、明示的に設定されていない場合、kubernetesdockerdocker+machine のエクゼキュータではデフォルトで有効になっています。その他のエクゼキュータでは、デフォルトで無効になっています。

この機能には、GIT_CLONE_PATHrunners.builds_dir で定義されたパス内にあることが必要です。builds_dir を使用するには、$CI_BUILDS_DIR 変数を使用します。

デフォルトでは、この機能はdockerkubernetes のエクゼキュータに対してのみ有効になっています。この機能はどのエクゼキュータでも明示的に有効にすることができますが、builds_dir を共有し、concurrent > 1 を持つエクゼキュータで使用する場合には注意が必要です。

パラメータ種類説明
enabledbooleanユーザーがジョブのカスタムビルドディレクトリを定義できるようにします。

使用例:

[runners.custom_build_dir]
  enabled = true

デフォルトのビルドディレクトリ

GitLab Runnerは、_Builds Directoryとして_よく知られているベースパスの下に存在するパスにリポジトリをクローンします。このベースディレクトリのデフォルトの場所は Executor によって異なります。例えば

使用する_Builds Directory_はbuilds_dir の設定でユーザーが明示的に定義できます。

note
また 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 refereesを使用して、GitLabに追加のジョブモニタリングデータを渡します。レフリーは、ジョブに関連する追加データをクエリして収集するRunnerマネージャのワーカーです。結果はジョブのアーティファクトとして GitLab にアップロードされます。

メトリクスRunnerレフリーを使う

ジョブを実行しているマシンやコンテナがPrometheusメトリクスを公開している場合、GitLab Runnerはジョブ期間中ずっとPrometheusサーバにクエリを発行することができます。メトリクスを受信した後、後で分析に使用できるジョブのアーティファクトとしてアップロードされます。

docker-machine Executor だけがレフェリーをサポートしています。

GitLab Runner用のメトリクスRunnerレフリーの設定

config.toml ファイルの[[runner]] セクション内に[runner.referees][runner.referees.metrics] を定義し、以下のフィールドを追加します:

設定説明
prometheus_addressGitLab 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} を持つことになります。