今回はGitLabのパイプラインの種類について紹介します。
Branch pipeline
パイプラインの中には、特定のブランチにコミットするたびに起動するものがあり、そういうパイプラインをBranch pipelineと呼びます。デフォルトではBranch pipelineを利用することになり、以下のような特徴があります。
- ブランチに新しいコミットをPushすることで起動する
- CI/CD Predefined variablesにアクセスできる
- Protected variables / Protected runners にアクセスできる
Merge request pipeline
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から起動することも可能です。
Merged results pipeline
Merged results pipelineは、Source / Target branchをマージした結果に対して実行されるパイプラインです。GitLabではマージした結果を内部コミットとして作成し、パイプラインはそのコミットに対して実行します。パイプラインはTarget branchに対して実行されます。
Merged results pipelineを起動する条件は以下の通りです。
- Premiumプランを利用する
- GitLab UIの設定からMerged result pipelineを有効化する
.gitlab-ci.yml
にMerge request pipelineで起動するJobが定義されている- GitLabリポジトリを利用する
Merge train
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
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