【问题标题】:gitlab-ci: exclude merge requests from specific branchgitlab-ci:排除来自特定分支的合并请求
【发布时间】:2021-05-21 15:13:02
【问题描述】:
我希望 gitlab-ci 忽略来自特定分支的合并。
示例:我有 3 个分支。 大师、开发和测试。
如果我直接推送代码或将代码从任何分支合并到主/开发,管道就会被执行。
现在,当我专门从 test 分支合并时,我不希望管道开始运行。
我想排除从 test 分支到 development 或 master 的合并。
【问题讨论】:
标签:
continuous-integration
gitlab
gitlab-ci
gitlab-ci-runner
【解决方案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"))'
CI_MERGE_REQUEST_SOURCE_BRANCH_NAME 和 CI_MERGE_REQUEST_TARGET_BRANCH_NAME 2 个变量仅在合并请求的情况下为 automatically defined。
【解决方案2】:
Gitlab CI 不必验证正在合并的“什么”,只需验证正在合并的“位置”。
您可以使用使用git 命令的脚本来执行此操作(它允许检查父母双方的合并提交)。但是,我建议你不要这样做。原因是您可能会错过从非“测试”分支合并的更改的构建。
例如
- dev 将功能分支合并到 master
- Gitlab CI 开始构建,因为它不是“测试”分支
- 在构建运行时,dev 将“test”合并到 master
- Gitlab CI 将取消之前的管道并开始新的管道
- 脚本将检测“test”发生的合并并退出
此时,从 p2 开始的构建被 Gitlab 取消,在 p2 开始的构建被您的脚本取消。因此,缺少所需的构建。