GitLab Runner は、GitLab CI/CD と連携してパイプラインでジョブを実行するアプリケーションです。Runnerは複数の実行形態(Excutor)があります。例えば、SSH, ShellのようなRunnerを導入した環境でそのままjobを実行するものと、Kubernetes, Docker, VirtualBoxのような仮想環境を利用してjobを実行することもできます。
GitLab Runnerは以下の3種類があります。
参考:https://docs.gitlab.com/ee/ci/runners/runners_scope.html
Runner登録方法及びGroup/Projectとの関係
具体的なRunner登録手順は 公式サイト をご参考ください。
Runnerごとに違うマシンを登録する方法以外に、点線で囲まれたようなイメージで、同じマシンに複数runnerの登録も可能です。
以下Group runnersとSpecific runnersを同一マシンにした場合を例として、各runnerの設定がconfig.tomlに定義されます。config.tomlの設定によって、同時に実行できるjobの上限数と、登録された3つのRunnerとして、それぞれの上限数が決まります。(参考:https://docs.gitlab.com/runner/configuration/advanced-configuration.html)
pipleline/jobの実行順序
Group runnersとSpecific runnersは、先入れ先出し (FIFO) のjob queueを使っているので、pipilineの実行順序と設定された同時実行可能なjob数によって、pipeline/jobの並列処理の順序が決まります。
例:
project-Aのpiplelineに2つのジョブがあり、config.tomlのconcurrent=4, limit=2と設定されたとします。3つのfeature branchが同時にプッシュされた場合、pipelineが3つ起動されるが、2つはすぐにrunningになり、もう1つはpendingになります。
同一Project、複数ブランチのpipelineが同時に起動された場合の動き
結論から言うと、複数pipelineが同時に動いたとしても、フォルダが分離されているため、互いに影響しません。
作業フォルダ構成:~builds/runner-name/連番/top-group/sub-group/project/
①:job実行のdefault directory、Excutorの種類によって違う。config.tomlにbuilds_dir追加することによって違うpathに変更可能。
②:Runner名。
③:CONCURRENT_ID。複数pipelineが同時実行の場合、0からの連番で自動作成。例えば、同時実行中のpipelineが3つある場合、以下のようになる:
④:top-group~projectのpath。
sub-group及びその中のprojectは違うrunnerを利用する場合、どのrunnerが優先的に利用されるかについて実際に試してみた結果:
この結果により、runner優先利用の指定がないと考えています。