セルフホストランナーのコンセプト

1+ year ago1 min read
Last updated • Read time
クラウド
This document is applicable to CircleCI クラウド
Server v4.x
This document is applicable to CircleCI Server v4.x
Server v3.x
This document is applicable to CircleCI Server v3.x

名前空間とリソースクラス

セルフホストランナーには名前空間とリソースクラスの両方が必要です。

名前空間 は、CircleCI 組織が要求する一意の識別子です。 各組織が要求できる一意の名前空間は 1 つだけで、後から変更することはできません。 通常、選択される名前空間は VCS の組織名を小文字で表したものです (推奨)。

リソースクラス は、CircleCI ジョブとそのジョブを処理するために識別されたランナーのタイプを一致させるためのラベルです。 リソースクラスの最初の部分は組織の名前空間です。 たとえば、 circleci/documentation などです。 リソースクラスは、セルフホストランナーのインストールプロセスを実行する際に作成されます。

リソースクラスを使用すると、セルフホストランナーのプールを特定して、特定の場所にジョブを送信するように設定できます。 たとえば、macOS を実行する複数のマシンと Linux を実行する複数のマシンがある場合、ぞれぞれに対して、 orgname/macOSorgname/linux のリソースクラスを作成することができます。 .circleci/config.yml のジョブレベルでは、リソースクラスに基づいて、ジョブの送信先となるセルフホストランナーのリソースを関連付けることができます。

オプションで、リソースクラスに説明をつけることもできます。

すでに Orb を使用されているお客様は、既存の名前空間があるのでこ注意ください。 セルフホストランナーの名前空間は、Orb で使用しているのと同じ名前空間です。 名前空間を変更する必要がある場合は、 サポート にお問い合わせください。

タスクエージェント

タスクエージェントは、コンテナランナーまたはマシンランナーが取得および設定したタスクの実行を処理します。 タスクエージェントは circleci と同じ権限で実行します。

コンテナエージェント

コンテナエージェントは、コンテナランナーを使ってインストールされます。 コンテナエージェントは、CircleCI にジョブをポーリングし、挿入されたタスクエージェントを使って一時的な Pod をスピンアップし、各 Pod 内の各ジョブを実行します。 Pod はジョブの完了後に破棄されます。

ローンチエージェント

ローンチエージェントは、マシンランナーを使ったタスクの実行 (1 つのジョブの並列実行) に必要な情報の収集と、タスクエージェントプロセスのダウンロードおよび起動を行います。

この仕組みにより、管理者は、タスクエージェントがローンチエージェントよりも低い権限レベルで実行されるように設定することができます。 ジョブの実行を許可したすべてのユーザーには、タスクエージェントと同等の権限が付与されます。 ローンチエージェントは root として実行しますが、タスクエージェントは circleci として実行します。

セルフホストランナーの同時実行

CircleCI セルフホストランナーは、登録済みセルフホストランナーの総数を制限するのではなく、組織全体のセルフホストランナージョブ (タスク) の総数を制限しています。

パブリックリポジトリ

CircleCI セルフホストランナーは、 フォークされたプルリクエストのビルド が有効になっているパブリックプロジェクトでは ご利用いただけません。 これはセキュリティー上の理由によるものです。 悪意のあるユーザーが、お客様のリポジトリをフォークし、コードをコミットしてプルリクエストを作成してマシンに変更を加え、コードを実行する可能性があります。 CircleCI セルフホストランナーで信頼されていないジョブが実行されると、ジョブ間で環境が永続化されている場合には特に、マシンやネットワーク環境に重大なセキュリティリスクが生じます。 これには次のようなリスクが含まれます。

  • 悪意のあるプログラムがマシンで実行される。

  • マシンのセルフホストランナーサンドボックスの外部で操作が行われる。

  • マシンのネットワーク環境に外部からアクセスされる。

  • 不要なデータや危険なデータがマシンに保持される。