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

如何在GitLab CI中将合并请求的目标分支传入触发流水线?

传递合并请求目标分支到GitLab CI下游流水线的解决方案

你遇到的问题核心是CI_MERGE_REQUEST_TARGET_BRANCH_NAME仅在合并请求触发的流水线中可用,且需要确保变量在触发器作业中被正确解析,以下是几种可行的解决方法:

方法1:通过规则限定MR场景并直接传递变量

在触发器作业中添加rules,限定仅在合并请求流水线中运行,确保CI_MERGE_REQUEST_TARGET_BRANCH_NAME变量能被正确读取并传递给下游:

trigger tests:
  stage: post-deploy
  trigger:
    project: my/project
    branch: master
    strategy: depend
  variables:
    STAGE: "TESTS"
    TARGET_BRANCH: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME
    CURRENT_BRANCH: $CI_COMMIT_REF_NAME
    DEV_VERSION: $CI_PIPELINE_IID
  allow_failure: true
  when: manual
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'

方法2:前置作业生成变量文件传递

如果直接传递变量存在解析时机问题,可以先通过前置作业生成包含目标分支的环境变量文件,再通过dotenv artifacts传递给触发器作业:

# 前置作业:获取MR目标分支并生成变量文件
get-mr-target-branch:
  stage: pre-deploy
  script:
    - echo "TARGET_BRANCH=$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" > mr_vars.env
  artifacts:
    reports:
      dotenv: mr_vars.env
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'

# 触发器作业:读取前置作业传递的变量
trigger tests:
  stage: post-deploy
  trigger:
    project: my/project
    branch: master
    strategy: depend
  variables:
    STAGE: "TESTS"
    CURRENT_BRANCH: $CI_COMMIT_REF_NAME
    DEV_VERSION: $CI_PIPELINE_IID
  needs: [get-mr-target-branch]
  allow_failure: true
  when: manual
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'

关键说明

CI_MERGE_REQUEST_TARGET_BRANCH_NAME这类变量仅在合并请求触发的流水线中存在,所以必须通过rules限定作业的运行场景,避免在非MR流水线中因变量不存在导致的错误。

内容的提问来源于stack exchange,提问作者Dmitry Kozin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 23:36:12