なぜパイプラインは最初の gitlab-runner のみを実行するのですか?

なぜパイプラインは最初の gitlab-runner のみを実行するのですか?

6 つの gitlab-runner を登録し、gitlab サーバーにプッシュすると、パイプラインは最初の gitlab-runner のみを実行します。なぜこのようなことが起こるのでしょうか。パイプラインは 6 つのサーバーで実行されることを期待しています。ありがとうございます。

答え1

これは ssh サービスではよく知られている動作ですが、ツールの実装が詳細に説明されていないため、これが同様の問題であるかどうかはわかりません。

ssh の場合、問題は、ローカル サービスがリモート サービスがローカル マシンから stdin を読み取ると想定していることです。そのため、ローカル データを事前に読み取り、リモートにブロックを送信して起動時間を改善します。

リモート呼び出しのループ内にある場合、ループ制御からすべての入力が取り出され、2 番目のループ サイクルで EOF が取得されます。

ssh での修正は、(a) -n オプションを使用してローカル データの送信を禁止するか、(b) ssh 入力を /dev/null からリダイレクトして、とにかく読み取れないようにすることです。

また、データをエコーとして ssh コマンド自体に入力したり、ファイルまたは別のローカル コマンドからの入力をパイプして、ローカル stdin をバイパスすることもできます。

strace で git-lab-runner を実行して、予期せず stdin を読み取っているかどうかを検出できるはずです。

関連情報