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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 06:15:38