You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 03:45:35