正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

Runnerコントローラー

  • プラン: Ultimate
  • 提供形態: GitLab Self-Managed、GitLab Dedicated
  • ステータス: 実験的機能

この機能の利用可否は、機能フラグによって制御されます。詳細については、履歴を参照してください。この機能はテストには利用できますが、本番環境での使用には適していません。

Runnerコントローラーは、ジョブルーター経由でルーティングされるCI/CDジョブの受付制御を有効にします。ジョブが実行されようとすると、ジョブルーターは接続されたRunnerコントローラーに受付リクエストを送信します。これは、カスタムポリシーに基づいてジョブを受け付けまたは拒否できます。

Runnerコントローラーはインスタンスレベルにあり、スコープに応じてジョブに適用できます。

Runnerコントローラーは、下記に使用できます:

  • イメージ許可リスト、リソースクォータ、セキュリティ要件などのカスタム受付ポリシーを適用します。
  • キャパシティ管理のために、ジョブのキューイングとリソース割り当てを制御します。
  • コンプライアンスの実施のために、実行前にジョブが組織ポリシーを満たしていることを確認します。
  • コスト管理のために、予算またはリソースの制約に基づいてジョブの実行を制限します。

受付制御ワークフロー

ジョブルーターでrunnerコントローラーを設定すると、受付制御ワークフローは次のように動作します:

  1. Runnerコントローラーがジョブルーターに接続します。
  2. コントローラーが自身を登録し、受付リクエストの処理を開始します。
  3. ジョブに受付が必要な場合、ジョブルーターは接続されたコントローラーにジョブの詳細を送信します。
  4. コントローラーは、カスタムポリシーに対してジョブを評価します。
  5. コントローラーは、受付決定(理由付きで許可または拒否)を送信します。
  6. ジョブルーターはジョブの実行を続行するか、拒否をレポートします。

拒否理由の表示

Runnerコントローラーがジョブを拒否すると、ジョブはjob_router_failureという失敗理由で失敗します。ジョブの詳細ページには、次のメッセージが表示されます:

  • ジョブルーター情報
  • Runnerコントローラー情報
  • Runnerコントローラーによって提供される拒否理由

Runnerコントローラーの拒否理由を示すジョブ拒否メッセージ

ドライランモードのロギング

Runnerコントローラーがdry_run状態の場合、拒否の決定は強制されませんが、ジョブルーター (KAS)バックエンドログに情報メッセージとして記録されます。これらのログを使用して、強制を有効にする前に、コントローラーの動作を検証します。

Runnerコントローラーの状態

Runnerコントローラーは、次の3つの状態のいずれかになります:

ステート説明
disabledRunnerコントローラーは受付リクエストを受信しません。これはデフォルトの状態です。これがデフォルトの状態です。
enabledRunnerコントローラーは受付リクエストを受信し、その決定はジョブの実行に影響を与えます。
dry_runRunnerコントローラーは受付リクエストを受信します。ジョブルーターは決定をログに記録しますが、決定は強制されません。この状態は、戦略的なロールアウトに使用して、強制を有効にする前に、コントローラーの動作を検証し、デプロイのリスクを軽減します。

スコープ

Runnerコントローラーは、アクティブにするためにスコープを設定する必要があります。スコープのないRunnerコントローラーは、その状態がenabledまたはdry_runであっても、受付リクエストを受信しません。

Runnerコントローラーは、相互に排他的な2種類のスコープをサポートしています:

スコープ説明
インスタンスRunnerコントローラーは、GitLabインスタンス内のすべてのRunnerのジョブを評価します。このスコープはRunnerスコープと組み合わせることはできません。
RunnerRunnerコントローラーは、特定のRunnerのジョブのみを評価します。1つまたは複数のRunnerにコントローラーのスコープを設定できます。RunnerはインスタンスRunnerである必要があります。

追加のスコープタイプ(グループ、プロジェクト)は、イシュー586419で提案されています。

Runnerコントローラーのスコープを管理するには、RunnerコントローラーAPIを参照してください。

Runnerコントローラーの管理

Runnerコントローラーは、REST APIを通じて管理されます。Runnerコントローラーを管理するためのUIはまだありません。

前提条件:

  • GitLabインスタンスへの管理者アクセス権が必要です。

Runnerコントローラーの実装

ステップごとのガイドについては、チュートリアル: Runner受付コントローラーをビルドするを参照してください。

独自のrunnerコントローラーを実装するには、以下の手順を実行する必要があります:

  1. GitLabでrunnerコントローラーを作成します。
  2. Runnerコントローラーのスコープを設定します。
  3. Runnerコントローラートークンを取得します。
  4. トークンを使用してジョブルーターに接続します。
  5. ジョブルーターにコントローラーを登録します。
  6. 受付リクエストを処理し、決定を送信します。

技術仕様とprotobuf定義については、Kubernetes向けGitLabエージェントのリポジトリにあるrunnerコントローラーのドキュメントを参照してください。