Gitlab 在合并请求被合并时运行管道作业

问题描述 投票:0回答:4

我有一个 gitlab 管道,其中有两个阶段,一个是构建,另一个是部署。构建阶段在提交时运行。我想要一种在合并请求合并到 master 时运行部署作业的方法。我尝试了几件事但没有运气。有人可以帮忙吗?

stages:
  - build
  - deploy

dotnet:
script: "echo This builds!"
stage: build


production:
script: "echo This deploys!"
stage: deploy

only:
  refs:
    - master
gitlab gitlab-ci-runner
4个回答
31
投票

尝试使用

gitlab-ci.yml
“规则”功能来检查合并请求事件。

您当前的

gitlab-ci.yml
将在每次提交、合并请求、计划和手动触发管道时运行您的“dotnet”作业。

https://docs.gitlab.com/ee/ci/yaml/#workflowrules

dotnet:
  script: "echo This builds!"
  stage: build
  rules:
    - if: '$CI_COMMIT_REF_NAME != "master" && $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "merge_request_event"'

production:
  script: "echo This deploys!"
  stage: deploy
  rules:
    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_REF_NAME == "master"'

7
投票

如果您希望作业仅在合并合并请求后运行,那么您可以根据提交消息触发作业,如下所示。

rules:
    - if: '$CI_COMMIT_MESSAGE =~ /See merge request/'

基本上,所有合并请求都带有“查看合并请求”提交消息,因此您可以依赖该消息来触发您的作业。


1
投票

CI_MERGE_REQUEST_APPROVED 变量似乎是为检查批准状态而设计的,而不是为了触发管道。 (问题,https://gitlab.com/gitlab-org/gitlab/-/issues/375908

当您使用合并请求预定义变量时,gitlab 在创建合并请求时创建管道,而不是在批准合并请求时创建管道。

相反,使用带有正则表达式的 CI_COMMIT_BRANCH 预定义变量,并使用分支访问权限限制主分支上的提交。

stages:
  - build
  - deploy

dotnet:
  stage: build
  rules:
    - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "master"
  script: "echo This builds!"

production:
  stage: deploy
  rules:
    - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "master"
  script: "echo This deploys!"

编辑错误示例的答案。(编辑于2023年1月26日)

假设我们有 rc 和 master 分支。 我们可以将 master 分支配置为受保护,并且仅用于合并请求。

在这种情况下,我们可以像下面这样定义 gitlab-ci 文件。

stages:
  - build
  - deploy

dotnet:
  stage: build
  rules:
    - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "rc"
  script: "echo This builds!"

production:
  stage: deploy
  rules:
    - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "master"
  script: "echo This deploys!"

感谢您的通知@Kappacake


-3
投票

您可以在合并后使用 Gitlab ci 预定义变量 $CI_MERGE_REQUEST_APPROVED 运行管道,这将在合并后返回 true,并可从 gitlab v14.1 获取。

如果要在主分支创建合并请求时运行管道,可以将 $CI_MERGE_REQUEST_TARGET_BRANCH_NAME 与 $CI_MERGE_REQUEST_APPROVED 一起使用。

您可以在您的工作中添加这样的规则。

rules:
  - if: $CI_MERGE_REQUEST_APPROVED && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "main"
© www.soinside.com 2019 - 2024. All rights reserved.