Runnerコントローラー
- プラン: Ultimate
- 提供形態: GitLab Self-Managed、GitLab Dedicated
- ステータス: 実験的機能
この機能の利用可否は、機能フラグによって制御されます。詳細については、履歴を参照してください。この機能はテストには利用できますが、本番環境での使用には適していません。
Runnerコントローラーは、ジョブルーター経由でルーティングされるCI/CDジョブの受付制御を有効にします。ジョブが実行されようとすると、ジョブルーターは接続されたRunnerコントローラーに受付リクエストを送信します。これは、カスタムポリシーに基づいてジョブを受け付けまたは拒否できます。
Runnerコントローラーはインスタンスレベルにあり、スコープに応じてジョブに適用できます。
Runnerコントローラーは、下記に使用できます:
- イメージ許可リスト、リソースクォータ、セキュリティ要件などのカスタム受付ポリシーを適用します。
- キャパシティ管理のために、ジョブのキューイングとリソース割り当てを制御します。
- コンプライアンスの実施のために、実行前にジョブが組織ポリシーを満たしていることを確認します。
- コスト管理のために、予算またはリソースの制約に基づいてジョブの実行を制限します。
受付制御ワークフロー
ジョブルーターでrunnerコントローラーを設定すると、受付制御ワークフローは次のように動作します:
- Runnerコントローラーがジョブルーターに接続します。
- コントローラーが自身を登録し、受付リクエストの処理を開始します。
- ジョブに受付が必要な場合、ジョブルーターは接続されたコントローラーにジョブの詳細を送信します。
- コントローラーは、カスタムポリシーに対してジョブを評価します。
- コントローラーは、受付決定(理由付きで許可または拒否)を送信します。
- ジョブルーターはジョブの実行を続行するか、拒否をレポートします。
拒否理由の表示
Runnerコントローラーがジョブを拒否すると、ジョブはjob_router_failureという失敗理由で失敗します。ジョブの詳細ページには、次のメッセージが表示されます:
- ジョブルーター情報
- Runnerコントローラー情報
- Runnerコントローラーによって提供される拒否理由
ドライランモードのロギング
Runnerコントローラーがdry_run状態の場合、拒否の決定は強制されませんが、ジョブルーター (KAS)バックエンドログに情報メッセージとして記録されます。これらのログを使用して、強制を有効にする前に、コントローラーの動作を検証します。
Runnerコントローラーの状態
Runnerコントローラーは、次の3つの状態のいずれかになります:
| ステート | 説明 |
|---|---|
disabled | Runnerコントローラーは受付リクエストを受信しません。これはデフォルトの状態です。これがデフォルトの状態です。 |
enabled | Runnerコントローラーは受付リクエストを受信し、その決定はジョブの実行に影響を与えます。 |
dry_run | Runnerコントローラーは受付リクエストを受信します。ジョブルーターは決定をログに記録しますが、決定は強制されません。この状態は、戦略的なロールアウトに使用して、強制を有効にする前に、コントローラーの動作を検証し、デプロイのリスクを軽減します。 |
スコープ
Runnerコントローラーは、アクティブにするためにスコープを設定する必要があります。スコープのないRunnerコントローラーは、その状態がenabledまたはdry_runであっても、受付リクエストを受信しません。
Runnerコントローラーは、相互に排他的な2種類のスコープをサポートしています:
| スコープ | 説明 |
|---|---|
| インスタンス | Runnerコントローラーは、GitLabインスタンス内のすべてのRunnerのジョブを評価します。このスコープはRunnerスコープと組み合わせることはできません。 |
| Runner | Runnerコントローラーは、特定のRunnerのジョブのみを評価します。1つまたは複数のRunnerにコントローラーのスコープを設定できます。RunnerはインスタンスRunnerである必要があります。 |
追加のスコープタイプ(グループ、プロジェクト)は、イシュー586419で提案されています。
Runnerコントローラーのスコープを管理するには、RunnerコントローラーAPIを参照してください。
Runnerコントローラーの管理
Runnerコントローラーは、REST APIを通じて管理されます。Runnerコントローラーを管理するためのUIはまだありません。
- Runnerコントローラーを作成、リスト表示、更新、または削除するには、RunnerコントローラーAPIを参照してください。
- Runnerコントローラーのスコープを作成、リスト表示、または削除するには、RunnerコントローラースコープAPIを参照してください。
- Runnerコントローラーの認証トークンを管理するには、RunnerコントローラートークンAPIを参照してください。
前提条件:
- GitLabインスタンスへの管理者アクセス権が必要です。
Runnerコントローラーの実装
ステップごとのガイドについては、チュートリアル: Runner受付コントローラーをビルドするを参照してください。
独自のrunnerコントローラーを実装するには、以下の手順を実行する必要があります:
- GitLabでrunnerコントローラーを作成します。
- Runnerコントローラーのスコープを設定します。
- Runnerコントローラートークンを取得します。
- トークンを使用してジョブルーターに接続します。
- ジョブルーターにコントローラーを登録します。
- 受付リクエストを処理し、決定を送信します。
技術仕様とprotobuf定義については、Kubernetes向けGitLabエージェントのリポジトリにあるrunnerコントローラーのドキュメントを参照してください。
