GitLab CI:master分支构建时如何获取触发发布的合并请求ID?
解决GitLab master分支构建中获取触发发布的MR ID问题
方法1:解析合并提交的默认信息
GitLab合并MR时,会自动在合并提交的信息中添加MR的引用(格式通常为!MR_ID,比如!123)。你可以在master分支的构建脚本中解析当前HEAD提交的信息来提取MR ID:
- 获取当前合并提交的完整信息:
COMMIT_MESSAGE=$(git log -1 --pretty=%B)
- 提取MR ID:
MR_ID=$(echo "$COMMIT_MESSAGE" | grep -o "!\\d\+" | sed 's/!//')
- 拼接MR链接(替换为你的GitLab实例地址):
MR_LINK="https://your-gitlab-domain/${CI_PROJECT_PATH}/merge_requests/${MR_ID}"
这个方法无需额外权限,依赖GitLab默认的合并提交格式,兼容性好。
方法2:通过GitLab API查询提交关联的MR
如果提交信息格式不确定,可以用GitLab API查询当前提交关联的MR:
- 获取当前提交的SHA:
COMMIT_SHA=$(git rev-parse HEAD)
- 调用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")
- 解析JSON提取MR链接(需确保构建环境安装
jq工具):
MR_LINK=$(echo "$MR_INFO" | jq -r '.[0].web_url')
方法3:在MR构建阶段预存MR ID
如果MR构建和master构建流程联动,可在MR构建阶段将MR ID存入环境变量,供master构建读取:
- 在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
- 在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
相关产品推荐
相关产品推荐

