web-dev-qa-db-ja.com

gitlabランナーの並行性はどのように機能しますか?

Q1:違いは何ですか

concurrent = 3

[[runners]]
  ..
  executor = "Shell"

そして

concurrent = 3

[[runners]]
  ...
  executor = "Shell"

[[runners]]
  ...
  executor = "Shell"

[[runners]]
  ...
  executor = "Shell"

Q2:意味がありますか...

グローバルconcurrent = 3を持つ単一のランナーに同じタイプの3つのエグゼキューター(workers)がいますまたは、グローバルconcurrent = 3を持つ単一のエグゼキュータが複数のジョブを安全に並行して実行できますか?

Q3:それらの関係...

runners.limitrunners.request_concurrencyおよびconcurrent

ありがとう

8
Slimer

Gitlabのランナーに関するドキュメントでは、ランナーについて次のように説明しています:

(...)GitLab CIのコーディネーターAPIを介してジョブを取得する分離(仮想)マシン

したがって、各ランナーは独立したプロセスであり、ジョブ実行の要求を取得し、事前定義された構成に従ってそれらを処理します。分離されたプロセスとして、各ランナーはジョブを実行するために「サブプロセス」(マシンとも呼ばれる)を作成する機能を備えています。

config.toml a [[runner]]セクション で定義する場合、ランナーを構成し、ジョブ実行要求を処理する方法を設定します。あなたの質問では、これらの「ジョブ実行要求への対処方法」の設定のうち2つについて言及しました。

  1. limit:「同時に処理できるジョブの数を制限する」。つまり、ジョブを同時に実行するためにランナーが作成できる「サブプロセス」の数。
  2. request_concurrency:「GitLabからの新しいジョブの同時リクエスト数を制限します」。つまり、ランナーがGitLab CIジョブキューから同時に実行できるジョブ実行リクエストの数です。

また、マシンにグローバルに適用されるいくつかの 設定があります 。あなたの質問であなたはそれらの1つに言及しました:

  1. concurrent: "グローバルに同時に実行できるジョブの数を制限します。これは、定義されたすべてのランナーを使用するジョブ数の上限です。"つまり、ジョブを同時に実行できる「サブプロセス」の最大量を制限します。

したがって、ランナーとそのサブプロセスの違い、および特定のランナー設定とグローバルマシン設定の違いに留意してください。

Q1:

違いは、1stの例では、1人のランナーとあなたの2nd3人のランナーがあります。どちらの例でも、マシンで同時に実行できるのは3つのジョブのみであることを言及しておく価値があります。

Q2:

1人のランナーで複数のジョブを安全に同時に実行できるだけでなく、(前述のlimit設定を使用して)実行するジョブの数を制御することもできます。

また、同じマシンで同様のランナーを実行しても問題はありません。ランナーの構成をどのように定義するかは、ユーザーとインフラストラクチャの能力次第です。

また、 an executor はジョブの実行方法のみを定義することに注意してください。ランナーを定義するのはそれだけではなく、「ワーカー」の同義語でもありません。動作しているのは、ランナーとそのサブプロセスです。

Q3:

要約すると、同じマシンで1人または複数のワーカーを定義できます。それぞれが独立したプロセスです。ランナーのlimitは、ジョブを同時に実行するために作成できるランナープロセスのサブプロセスの数です。ランナーのrequest_concurrencyは、Gitlab CIジョブキューからランナーが処理できるリクエストの数です。最後に、値をconcurrentに設定すると、マシンで実行されている1つ以上のランナーで、マシンで同時に実行できるジョブの数が制限されます。

参考文献

よりよく理解するために、 自動スケーリングのアルゴリズムとパラメーター について読むことを本当にお勧めします。

最後に、同じサーバーでランナーを 並列で実行する方法 に関するこの質問が役立つと思います。

13
Aurora Wang