concurrent = 3
[[runners]]
..
executor = "Shell"
そして
concurrent = 3
[[runners]]
...
executor = "Shell"
[[runners]]
...
executor = "Shell"
[[runners]]
...
executor = "Shell"
グローバルconcurrent = 3
を持つ単一のランナーに同じタイプの3つのエグゼキューター(workers
)がいますまたは、グローバルconcurrent = 3
を持つ単一のエグゼキュータが複数のジョブを安全に並行して実行できますか?
runners.limit
とrunners.request_concurrency
およびconcurrent
ありがとう
Gitlabのランナーに関するドキュメントでは、ランナーについて次のように説明しています:
(...)GitLab CIのコーディネーターAPIを介してジョブを取得する分離(仮想)マシン
したがって、各ランナーは独立したプロセスであり、ジョブ実行の要求を取得し、事前定義された構成に従ってそれらを処理します。分離されたプロセスとして、各ランナーはジョブを実行するために「サブプロセス」(マシンとも呼ばれる)を作成する機能を備えています。
config.toml
a [[runner]]
セクション で定義する場合、ランナーを構成し、ジョブ実行要求を処理する方法を設定します。あなたの質問では、これらの「ジョブ実行要求への対処方法」の設定のうち2つについて言及しました。
limit
:「同時に処理できるジョブの数を制限する」。つまり、ジョブを同時に実行するためにランナーが作成できる「サブプロセス」の数。request_concurrency
:「GitLabからの新しいジョブの同時リクエスト数を制限します」。つまり、ランナーがGitLab CIジョブキューから同時に実行できるジョブ実行リクエストの数です。また、マシンにグローバルに適用されるいくつかの 設定があります 。あなたの質問であなたはそれらの1つに言及しました:
concurrent
: "グローバルに同時に実行できるジョブの数を制限します。これは、定義されたすべてのランナーを使用するジョブ数の上限です。"つまり、ジョブを同時に実行できる「サブプロセス」の最大量を制限します。したがって、ランナーとそのサブプロセスの違い、および特定のランナー設定とグローバルマシン設定の違いに留意してください。
違いは、1stの例では、1人のランナーとあなたの2nd例3人のランナーがあります。どちらの例でも、マシンで同時に実行できるのは3つのジョブのみであることを言及しておく価値があります。
1人のランナーで複数のジョブを安全に同時に実行できるだけでなく、(前述のlimit
設定を使用して)実行するジョブの数を制御することもできます。
また、同じマシンで同様のランナーを実行しても問題はありません。ランナーの構成をどのように定義するかは、ユーザーとインフラストラクチャの能力次第です。
また、 an executor
はジョブの実行方法のみを定義することに注意してください。ランナーを定義するのはそれだけではなく、「ワーカー」の同義語でもありません。動作しているのは、ランナーとそのサブプロセスです。
要約すると、同じマシンで1人または複数のワーカーを定義できます。それぞれが独立したプロセスです。ランナーのlimit
は、ジョブを同時に実行するために作成できるランナープロセスのサブプロセスの数です。ランナーのrequest_concurrency
は、Gitlab CIジョブキューからランナーが処理できるリクエストの数です。最後に、値をconcurrent
に設定すると、マシンで実行されている1つ以上のランナーで、マシンで同時に実行できるジョブの数が制限されます。
よりよく理解するために、 自動スケーリングのアルゴリズムとパラメーター について読むことを本当にお勧めします。
最後に、同じサーバーでランナーを 並列で実行する方法 に関するこの質問が役立つと思います。