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

Hus*_*oiz 5 gitlab gitlab-ci-runner

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

stages:
  - build
  - deploy

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


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

only:
  refs:
    - master
Run Code Online (Sandbox Code Playgroud)

amB*_*ear 9

尝试使用 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_BUILD_REF_NAME != "master" && $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "merge_request_event"'

production:
  script: "echo This deploys!"
  stage: deploy
  rules:
    rules:
    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_BUILD_REF_NAME == "master"'
Run Code Online (Sandbox Code Playgroud)

  • 我已经尝试过这个,但这是行不通的。该规则是说根据合并请求运行作业。我想在合并请求合并到 master 时运行部署。 (5认同)
  • 您可以通过以下方式改进您的答案: - 从您发布的代码中删除倒数第二行(“rules:”) - 用 $CI_DEFAULT_BRANCH 替换“master”,这将使您的解决方案在项目使用不同的默认分支名称时也可以工作(例如,“主要”) (3认同)
  • 我更新了我的答案。这次我测试了我们用于条件的环境变量。证明:提交:https://gitlab.com/atbeasley/problem-child/-/pipelines/189925730 合并:https://gitlab.com/atbeasley/problem-child/-/pipelines/189925811 (2认同)
  • 现在,当直接推送到 master 上时,如何避免它在 master 上运行?因为最终我有稍微相同的问题,但想将运行管道限制为合并的合并请求 (2认同)
  • 似乎“CI_BUILD_REF_NAME”已被弃用,应该使用“CI_COMMIT_REF_NAME”。 (2认同)
  • 有人设法做到这一点并且仍然知道源分支名称吗?就我而言,如果合并了 MR,并且 origin/main 和合并的分支(在特定文件夹中)之间存在差异,我希望部署我的 API。为此,我需要知道合并分支的名称,但我无法做到这一点 (2认同)

小智 6

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

rules:
    - if: '$CI_COMMIT_MESSAGE =~ /See merge request/'
Run Code Online (Sandbox Code Playgroud)

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