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

GitLab CI:master分支构建时如何获取触发发布的合并请求ID?

解决GitLab master分支构建中获取触发发布的MR ID问题

方法1:解析合并提交的默认信息

GitLab合并MR时,会自动在合并提交的信息中添加MR的引用(格式通常为!MR_ID,比如!123)。你可以在master分支的构建脚本中解析当前HEAD提交的信息来提取MR ID:

  1. 获取当前合并提交的完整信息:
COMMIT_MESSAGE=$(git log -1 --pretty=%B)
  1. 提取MR ID:
MR_ID=$(echo "$COMMIT_MESSAGE" | grep -o "!\\d\+" | sed 's/!//')
  1. 拼接MR链接(替换为你的GitLab实例地址):
MR_LINK="https://your-gitlab-domain/${CI_PROJECT_PATH}/merge_requests/${MR_ID}"

这个方法无需额外权限,依赖GitLab默认的合并提交格式,兼容性好。

方法2:通过GitLab API查询提交关联的MR

如果提交信息格式不确定,可以用GitLab API查询当前提交关联的MR:

  1. 获取当前提交的SHA:
COMMIT_SHA=$(git rev-parse HEAD)
  1. 调用GitLab API查询关联的MR(使用CI内置的CI_JOB_TOKEN自动授权):
MR_INFO=$(curl --silent --header "PRIVATE-TOKEN: ${CI_JOB_TOKEN}" \
  "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/commits/${COMMIT_SHA}/merge_requests")
  1. 解析JSON提取MR链接(需确保构建环境安装jq工具):
MR_LINK=$(echo "$MR_INFO" | jq -r '.[0].web_url')

方法3:在MR构建阶段预存MR ID

如果MR构建和master构建流程联动,可在MR构建阶段将MR ID存入环境变量,供master构建读取:

  1. 在MR构建的.gitlab-ci.yml中添加步骤,将MR ID存入环境变量 artifact:
mr_prepare_job:
  only: merge_requests
  script:
    - echo "MR_ID=$CI_MERGE_REQUEST_IID" >> build.env
  artifacts:
    reports:
      dotenv: build.env
  1. 在master构建的job中直接使用$MR_ID变量:
master_release_job:
  only: master
  script:
    - MR_LINK="https://your-gitlab-domain/${CI_PROJECT_PATH}/merge_requests/${MR_ID}"
    - # 执行发送邮件等后续逻辑

内容的提问来源于stack exchange,提问作者Semyon Kirekov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:45:44