gitlab-ci:排除来自特定分支的合并请求

时间:2021-02-18 16:15:56

标签: continuous-integration gitlab gitlab-ci gitlab-ci-runner

我希望 gitlab-ci 忽略来自特定分支的合并。

例如:我有 3 个分支。 掌握开发测试

如果我直接推送代码或将代码从任何分支合并到 master/development,管道就会执行。

现在,当我专门从 test 分支合并时,我不希望管道运行。

我想排除从 test 分支到 developmentma​​ster 的合并。

2 个答案:

答案 0 :(得分:1)

这可以通过为要排除的作业指定 if-rule 来完成。 例如:

docker build:
  script: docker build -t my-image:$CI_COMMIT_REF_SLUG .
  rules:
    - if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME != "test" || ($CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == "test" and ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME != "master" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME != "development"))'

2 个变量 CI_MERGE_REQUEST_SOURCE_BRANCH_NAMECI_MERGE_REQUEST_TARGET_BRANCH_NAME 仅在合并请求的情况下为 automatically defined

答案 1 :(得分:0)

Gitlab CI 不必验证合并的是“什么”,只需验证合并的是“在哪里”。

您可以使用使用 git 命令的脚本来完成(它允许检查两个父项的合并提交)。但是,我建议您不要这样做。原因是您可能会错过从非“测试”分支合并的更改的构建。

例如

  1. dev 将功能分支合并到 master
  2. Gitlab CI 开始构建,因为它不是“测试”分支
  3. 在构建运行时,dev 将“test”合并到 master
  4. Gitlab CI 将取消之前的管道并开始新的管道
  5. 脚本将检测从“test”发生的合并并退出

此时,从 p2 开始的构建被 Gitlab 取消,从 p2 开始的构建被您的脚本取消。因此,缺少所需的构建。