合并请求的流水线
您可以配置流水线,每当您在合并请求的源分支上进行变更时,都会触发流水线运行。
被称之为合并请求的流水线,当您执行以下操作时运行:
- 从具有一个或多个提交的源分支创建合并请求。
- 推送新的提交到合并请求的源分支。
- 在合并请求的 流水线选项卡中选择 运行流水线 。
此外,合并请求流水线:
- 可以访问一些预定义的变量。
- 可以访问受保护的变量 和受保护的 runners。
这两种类型的流水线都可以出现在合并请求的 流水线 选项卡上。
合并请求流水线仅在内容的源分支上运行,忽略目标分支的内容。要运行一个能够测试源分支和目标分支合并结果的流水线,您可以使用合并结果流水线。
先决条件
使用合并请求流水线:
- 您的项目的 CI/CD 配置文件,必须配置为在合并请求流水线中运行作业。
- 您必须至少在源项目中拥有开发人员角色才能运行合并请求的流水线。
- 您的仓库必须是 GitLab 仓库,而不是外部仓库。
先决条件
使用合并请求流水线:
- 您项目的
.gitlab-ci.yml
文件必须配置了在合并请求流水线中运行的作业。 - 您必须至少在源项目中拥有开发人员角色才能运行合并请求的流水线。
- 您的仓库必须是 GitLab 仓库,而不是外部仓库。
向合并请求添加作业
您可以使用 rules
关键字将作业配置为在合并请求的流水线中运行。例如:
job1:
script:
- echo "This job runs in merge request pipelines"
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
您还可以使用 workflow: rules
关键字将整个流水线配置为在合并请求流水线中运行。例如:
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"
一个常规的 workflow
配置是让流水线在合并请求、标记和默认分支上运行。例如:
workflow:
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
- if: $CI_COMMIT_TAG
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
与派生项目一起使用
在派生项目中工作的外部贡献者不能在父项目中创建流水线。
来自提交给父项目的分支的合并请求会触发一个流水线:
- 在派生(源)项目中创建并运行,而不是在父(目标)项目中。
- 使用派生项目的 CI/CD 配置、资源和项目 CI/CD 变量。
用于派生项目的流水线在父项目中显示为带有 派生 标志:
在父项目中运行流水线
父项目中的项目成员可以从派生项目提交的合并请求触发运行合并请求流水线。此流水线:
- 在父(目标)项目中创建并运行,而不是在派生(源)项目中。
- 使用派生项目分支中的 CI/CD 配置。
- 使用父项目的 CI/CD 配置、资源和项目 CI/CD 变量。
- 使用触发流水线的父项目成员的权限。
在派生项目 MR 中运行流水线,确保合并后的流水线在父项目中通过。此外,如果您不信任派生项目的 runner,则在父项目中运行流水线会使用父项目的受信任 runner。
/rebase
快速操作触发流水线,极狐GitLab 会显示一条您必须在流水线运行之前接受的警告。否则,不会显示警告。先决条件:
- 父项目的 CI/CD 配置文件必须配置为在合并请求流水线中运行作业。
- 您必须是具有运行 CI/CD 流水线的权限的父项目的成员。如果分支受到保护,您可能需要额外的权限。
- 派生项目必须对运行流水线的用户可见。否则,合并请求中不会显示流水线选项卡。
要在父项目中,为来自派生项目的合并请求运行流水线:
- 在合并请求中,转到 流水线 选项卡。
- 选择 运行流水线。您必须阅读并接受警告,否则流水线不会运行。
您可以通过使用项目 API 禁用 ci_allow_fork_pipelines_to_run_in_parent_project
设置,来禁用此功能。该设置默认为 enabled
。
阻止流水线分叉项目Prevent pipelines from fork projects
- 自极狐Gitlab 15.3 引入。
为了在父项目中阻止用户为分叉项目运行流水线,可以使用项目 API来禁用 ci_allow_fork_pipelines_to_run_in_parent_project
设置。
可用的预定义变量
当您使用合并请求流水线时,您可以使用:
- 分支流水线中可用的所有相同预定义变量。
-
其它预定义变量仅适用于合并请求流水线中的作业。这些变量包含来自相关合并请求的信息。