如何在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
相关产品推荐
相关产品推荐

