セルフホストランナーのコンセプト
名前空間とリソースクラス
セルフホストランナーには名前空間とリソースクラスの両方が必要です。
名前空間 は、CircleCI 組織が要求する一意の識別子です。 各組織が要求できる一意の名前空間は 1 つだけで、後から変更することはできません。 通常、選択される名前空間は VCS の組織名を小文字で表したものです (推奨)。
リソースクラス は、CircleCI ジョブとそのジョブを処理するために識別されたランナーのタイプを一致させるためのラベルです。 リソースクラスの最初の部分は組織の名前空間です。 たとえば、 circleci/documentation
などです。 リソースクラスは、セルフホストランナーのインストールプロセスを実行する際に作成されます。
リソースクラスを使用すると、セルフホストランナーのプールを特定して、特定の場所にジョブを送信するように設定できます。 たとえば、macOS を実行する複数のマシンと Linux を実行する複数のマシンがある場合、ぞれぞれに対して、 orgname/macOS
と orgname/linux
のリソースクラスを作成することができます。 .circleci/config.yml
のジョブレベルでは、リソースクラスに基づいて、ジョブの送信先となるセルフホストランナーのリソースを関連付けることができます。
オプションで、リソースクラスに説明をつけることもできます。
タスクエージェント
タスクエージェントは、コンテナランナーまたはマシンランナーが取得および設定したタスクの実行を処理します。 タスクエージェントは circleci
と同じ権限で実行します。
コンテナエージェント
コンテナエージェントは、コンテナランナーを使ってインストールされます。 コンテナエージェントは、CircleCI にジョブをポーリングし、挿入されたタスクエージェントを使って一時的な Pod をスピンアップし、各 Pod 内の各ジョブを実行します。 Pod はジョブの完了後に破棄されます。
ローンチエージェント
ローンチエージェントは、マシンランナーを使ったタスクの実行 (1 つのジョブの並列実行) に必要な情報の収集と、タスクエージェントプロセスのダウンロードおよび起動を行います。
この仕組みにより、管理者は、タスクエージェントがローンチエージェントよりも低い権限レベルで実行されるように設定することができます。 ジョブの実行を許可したすべてのユーザーには、タスクエージェントと同等の権限が付与されます。 ローンチエージェントは root
として実行しますが、タスクエージェントは circleci
として実行します。
セルフホストランナーの同時実行
CircleCI セルフホストランナーは、登録済みセルフホストランナーの総数を制限するのではなく、組織全体のセルフホストランナージョブ (タスク) の総数を制限しています。
パブリックリポジトリ
CircleCI セルフホストランナーは、 フォークされたプルリクエストのビルド が有効になっているパブリックプロジェクトでは ご利用いただけません。 これはセキュリティー上の理由によるものです。 悪意のあるユーザーが、お客様のリポジトリをフォークし、コードをコミットしてプルリクエストを作成してマシンに変更を加え、コードを実行する可能性があります。 CircleCI セルフホストランナーで信頼されていないジョブが実行されると、ジョブ間で環境が永続化されている場合には特に、マシンやネットワーク環境に重大なセキュリティリスクが生じます。 これには次のようなリスクが含まれます。
-
悪意のあるプログラムがマシンで実行される。
-
マシンのセルフホストランナーサンドボックスの外部で操作が行われる。
-
マシンのネットワーク環境に外部からアクセスされる。
-
不要なデータや危険なデータがマシンに保持される。
デフォルトでは、各組織が要求できる名前空間は 1 つに制限されています。 これは、名前空間の占拠や紛らわしさを制限するためのポリシーです。 名前空間を変更する必要がある場合は、 サポート にお問い合わせください。 |