GitLab CI/CD流水线如何获取Merge Request创建者/作者名称?
解决GitLab CI/CD中获取Merge Request创建者名称的问题
GitLab预定义变量里没有直接提供MR创建者名称的字段,你可以通过以下两种可靠方式获取:
方法1:调用GitLab API查询(推荐)
利用流水线内置的CI_JOB_TOKEN访问GitLab API,直接获取MR的创建者信息,准确率最高。
示例脚本:
# 提取当前MR的项目内ID MR_INTERNAL_ID=$CI_MERGE_REQUEST_IID # 调用API获取MR详情,用jq解析出创建者名称 MR_AUTHOR_NAME=$(curl --header "Job-Token: $CI_JOB_TOKEN" "$CI_API_V4_URL/projects/$CI_PROJECT_ID/merge_requests/$MR_INTERNAL_ID" | jq -r '.author.name') echo "Merge Request创建者:$MR_AUTHOR_NAME"
注意事项:
- 确保流水线环境已安装
jq工具,可在before_script中添加安装命令:# Debian/Ubuntu环境 apt-get update && apt-get install -y jq # Alpine环境 apk add --no-cache jq - 该方法仅在MR触发的流水线中生效,可通过
rules限定job运行条件:get_mr_author: script: - # 上述API调用脚本 rules: - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
方法2:通过Git提交记录提取(有局限性)
如果MR的源分支是直接从目标分支分出,且第一个提交者就是MR创建者,可通过git命令提取:
# 拉取源分支的完整提交记录 git fetch origin $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME # 筛选出源分支独有的提交,取第一个提交的作者名称 MR_AUTHOR_NAME=$(git log origin/$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME --not origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME --pretty=format:"%an" | tail -n 1) echo "Merge Request创建者:$MR_AUTHOR_NAME"
局限性:若源分支基于其他分支创建,或分支内有多个提交者,可能获取到的不是MR创建者。
内容的提问来源于stack exchange,提问作者Utsav Songara
相关产品推荐
相关产品推荐

