【发布时间】:2022-11-04 13:18:57
【问题描述】:
我希望 GitLab CI 在合并请求合并后运行作业。我不希望它在创建新的合并请求时运行,也不希望它在目标分支更新时运行。 (因为可以直接提交到目标分支,并且在这种情况下不应该运行作业。)
那可能吗?
如果是,我还想知道有关触发作业的合并请求的信息。
(实际上我想在合并请求时更新我的项目管理系统。因此我需要知道哪个合并请求被合并(或批准)。)
提前致谢。
【问题讨论】:
标签: gitlab-ci
我希望 GitLab CI 在合并请求合并后运行作业。我不希望它在创建新的合并请求时运行,也不希望它在目标分支更新时运行。 (因为可以直接提交到目标分支,并且在这种情况下不应该运行作业。)
那可能吗?
如果是,我还想知道有关触发作业的合并请求的信息。
(实际上我想在合并请求时更新我的项目管理系统。因此我需要知道哪个合并请求被合并(或批准)。)
提前致谢。
【问题讨论】:
标签: gitlab-ci
我希望 GitLab CI 在合并请求合并后运行作业。
不幸的是,GitLab 不提供“合并请求合并”触发器。
您可以做的是让管道为某个分支中的任何推送运行,并使用分支保护来确保推送只能来自合并请求。要做到这一点:
- 将您的管道设置为仅运行,例如对于分支主要:
# if you want to use "only": my_job: only: - main # or alternatively if you want to use rules you can do the same with: my_job: rules: - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_REF_NAME == "master"'
- 启用 Branch protection 以禁用直接推送到 main 并且只允许 MR:
【讨论】:
if: '$CI_PIPELINE_SOURCE == "push" && $CI_BUILD_REF_NAME == "master"' 不起作用。对我来说什么都没有触发。我错过了什么?
if: $CI_COMMIT_BRANCH == "main"
您可以在合并后使用 Gitlab ci 预定义变量 $CI_MERGE_REQUEST_APPROVED 运行管道,这将在合并后返回 true,并且在 gitlab v14.1 之后可用,但在使用此预定义变量之前,您必须启用 merged results pipeline。
rules:
- if: $CI_MERGE_REQUEST_APPROVED
【讨论】: