TECHSTEP

ITインフラ関連の記事を公開してます。

GitLabパイプラインの種類と設定方法を整理する

今回はGitLabのパイプラインの種類について紹介します。

docs.gitlab.com

docs.gitlab.com

Branch pipeline

パイプラインの中には、特定のブランチにコミットするたびに起動するものがあり、そういうパイプラインをBranch pipelineと呼びます。デフォルトではBranch pipelineを利用することになり、以下のような特徴があります。

Merge request pipeline

docs.gitlab.com

Merge request pipelineは名前の通り、Merge requestのSource branchに対して変更が入るたびに起動するパイプラインです。Merge request pipelineは以下の条件で起動します。

  • 1つ以上のコミットを含むSource branchからMerge requestを作成した時
  • Merge request作成後、Source branchにコミットをPushした時
  • Merge request画面の Pipeline タブから手動で起動した時

またMerge request pipelineは以下の特徴があります。

  • Source branch上のファイルに対してのみ実行される
  • Branch pipelineに加えてより多くのPredefined variablesにアクセスできる
  • Protected variables / Protected runnersにはアクセスできない

Merge request pipelineが起動するには以下のような条件があります。

  • .gitlab-ci.yml にMerge request pipelineで起動するJobが定義されている
  • パイプラインを起動するユーザーが Developer Role以上の権限を持っている
  • GitLabリポジトリを利用する

Merge request pipelineで起動するJobとは、 rules / workflow キーワードを使うことを意味します。GitLabでは以下のような例を案内しています。

# rulesを使う場合
job1:
  script:
    - echo "This job runs in merge request pipelines"
  rules:
    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
# workflowを使う場合
workflow:
  rules:
    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'

job1:
  script:
    - echo "This job runs in merge request pipelines"

job2:
  script:
    - echo "This job also runs in merge request pipelines"

なお、Merge request pipelineはForkしたProjectから起動することも可能です。

docs.gitlab.com

Merged results pipeline

docs.gitlab.com

Merged results pipelineは、Source / Target branchをマージした結果に対して実行されるパイプラインです。GitLabではマージした結果を内部コミットとして作成し、パイプラインはそのコミットに対して実行します。パイプラインはTarget branchに対して実行されます。

Merged results pipelineを起動する条件は以下の通りです。

Merge train

docs.gitlab.com

Merge trainは、default branchに頻繁にマージするProjectで、Merge request間でConflictが発生するのを避けるために利用できます。Merge trainはMerge requestをキューに配置し、各Merge requestが自身より前に配置されたものと比較して、すべてが動作することを保証します。Merged results pipelineはdefault branch上の変更が機能することを保証するのに対し、Merge trainは同時期の異なる変更も機能することを保証します。

Merge trainを起動する条件は、Merged results pipelineの条件に加え、GitLab UIからMerge trainを有効化する ことです。

Downstream pipeline

docs.gitlab.com

Downstream pipelineは、別のパイプラインによって起動されるパイプラインを指します。Downstream pipelineは主に2種類存在します。

  • Parent-child pipeline: 同じProject上で起動するもの
  • Multi-project pipeline: 別のProject上で起動するもの

Downstream pipelineを起動する条件は、 .gitlab-ci.yml でDownstream pipelineを起動するよう trigger キーワードを使うことです。GitLabドキュメントでは、以下のようなParent-child pipeline / Multi-project pipelineの例を紹介しています。

trigger_job:
  trigger:
    include:
      - local: path/to/child-pipeline.yml
trigger_job:
  trigger:
    project: project-group/my-downstream-project