如何在GitLab中通过流水线实现仅允许sit→uat→master的合并请求?
GitLab流水线限制合并请求分支流向的实现方法
你可以通过GitLab CI/CD流水线添加分支流向检查任务,强制合并请求遵循sit → uat → master的规则,具体实现步骤如下:
1. 在.gitlab-ci.yml中添加分支检查任务
创建一个专门的检查job,仅在合并请求触发时运行,验证源分支与目标分支的匹配规则:
stages: - pre-merge check_merge_branch_flow: stage: pre-merge script: - | # 获取合并请求的源分支和目标分支 SOURCE_BRANCH="$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME" TARGET_BRANCH="$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" # 定义分支流向规则 if [ "$TARGET_BRANCH" = "uat" ]; then if [ "$SOURCE_BRANCH" != "sit" ]; then echo "错误:仅允许从sit分支合并到uat分支" exit 1 fi elif [ "$TARGET_BRANCH" = "master" ]; then if [ "$SOURCE_BRANCH" != "uat" ]; then echo "错误:仅允许从uat分支合并到master分支" exit 1 fi fi echo "分支流向符合规则,检查通过" rules: - if: $CI_PIPELINE_SOURCE == 'merge_request_event' when: always
2. 配置合并请求必须通过流水线验证
进入项目的Settings → Merge requests页面,找到Pipeline must succeed选项并勾选。这样只有当上述检查job通过时,合并请求才能被合并。
补充说明
- 该规则仅限制
uat和master分支的合并来源,其他分支(如开发分支合并到sit)不受影响,可根据需求扩展脚本逻辑。 - 确保GitLab CI/CD的预定义变量
CI_MERGE_REQUEST_SOURCE_BRANCH_NAME和CI_MERGE_REQUEST_TARGET_BRANCH_NAME能正常获取,这两个变量仅在合并请求触发的流水线中可用。
内容的提问来源于stack exchange,提问作者CHIU TZE CHEUNG
相关产品推荐
相关产品推荐

