gitlab-ci: 从 specific 分支排除合并请求

gitlab-ci: exclude merge requests from specific branch

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

示例:我有 3 个分支。 master, development & test.

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

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

我想排除从 test 分支合并到 developmentmaster

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

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

例如

  1. dev 将功能分支合并到 master
  2. Gitlab CI 开始构建,因为它不是“测试”分支
  3. 虽然构建是 运行,但开发人员将“测试”合并到主服务器
  4. Gitlab CI 将取消以前的管道并开始新的
  5. 脚本将检测从“测试”发生的合并并退出

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

这可以通过为要排除的作业指定 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"))'

CI_MERGE_REQUEST_SOURCE_BRANCH_NAMECI_MERGE_REQUEST_TARGET_BRANCH_NAME 这两个变量 automatically defined 仅在合并请求的情况下。