gitlab-ci: 从 specific 分支排除合并请求
gitlab-ci: exclude merge requests from specific branch
我希望 gitlab-ci 忽略来自 specific 分支的合并。
示例:我有 3 个分支。 master, development & test.
如果我直接推送代码或将代码从任何分支合并到 master/development,管道将被执行。
现在,当我从 test 分支 specifically 合并时,我不希望管道得到 运行。
我想排除从 test 分支合并到 development 或 master。
Gitlab CI 不必验证合并的是“什么”,只需要合并的是“哪里”。
您可以使用使用 git
命令的脚本来完成它(它允许检查两个 parents 以进行合并提交)。但是,我建议您不要这样做。原因是您可能会错过从非“测试”分支合并的更改的构建。
例如
- dev 将功能分支合并到 master
- Gitlab CI 开始构建,因为它不是“测试”分支
- 虽然构建是 运行,但开发人员将“测试”合并到主服务器
- Gitlab CI 将取消以前的管道并开始新的
- 脚本将检测从“测试”发生的合并并退出
此时,从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_NAME
和 CI_MERGE_REQUEST_TARGET_BRANCH_NAME
这两个变量 automatically defined 仅在合并请求的情况下。
我希望 gitlab-ci 忽略来自 specific 分支的合并。
示例:我有 3 个分支。 master, development & test.
如果我直接推送代码或将代码从任何分支合并到 master/development,管道将被执行。
现在,当我从 test 分支 specifically 合并时,我不希望管道得到 运行。
我想排除从 test 分支合并到 development 或 master。
Gitlab CI 不必验证合并的是“什么”,只需要合并的是“哪里”。
您可以使用使用 git
命令的脚本来完成它(它允许检查两个 parents 以进行合并提交)。但是,我建议您不要这样做。原因是您可能会错过从非“测试”分支合并的更改的构建。
例如
- dev 将功能分支合并到 master
- Gitlab CI 开始构建,因为它不是“测试”分支
- 虽然构建是 运行,但开发人员将“测试”合并到主服务器
- Gitlab CI 将取消以前的管道并开始新的
- 脚本将检测从“测试”发生的合并并退出
此时,从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_NAME
和 CI_MERGE_REQUEST_TARGET_BRANCH_NAME
这两个变量 automatically defined 仅在合并请求的情况下。