如何在.gitlab-ci.yml中获取GitLab CI流水线的MR编号?
实现方案
GitLab已提供对应的预定义变量,仅当CI流水线为合并请求事件触发时会自动注入,你可以按以下场景使用:
场景1:流水线直接由MR事件触发
你可以直接使用内置变量CI_MERGE_REQUEST_IID,该变量的值就是当前MR在项目内的编号(即MR访问路径末尾的数字)。如果需要GitLab全局唯一的MR ID,可以使用CI_MERGE_REQUEST_ID变量。
配置示例
print_mr_iid: script: - echo "当前MR编号为 $CI_MERGE_REQUEST_IID" # 仅在MR事件触发的流水线中运行,确保变量存在 rules: - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
注意:
CI_MERGE_REQUEST_IID变量需要GitLab 11.6及以上版本支持。
场景2:普通分支推送流水线需要获取关联MR编号
如果你的流水线是推送到分支时触发,而非MR事件触发,需要调用GitLab OpenAPI查询当前分支关联的MR编号,操作步骤如下:
- 在GitLab项目设置中创建拥有项目只读权限的访问令牌,将其存为CI变量,命名为
PROJECT_API_TOKEN - 参考以下配置编写job:
query_mr_iid: script: # 查询当前打开的、源分支为当前分支的MR,提取MR编号 - MR_IID=$(curl --header "PRIVATE-TOKEN: $PROJECT_API_TOKEN" "https://<你的GitLab服务域名>/api/v4/projects/$CI_PROJECT_ID/merge_requests?source_branch=$CI_COMMIT_REF_NAME&state=opened" | jq '.[0].iid') - echo "当前分支关联的MR编号为 $MR_IID" only: - branches
内容的提问来源于stack exchange,提问作者TheWaterProgrammer
相关产品推荐
相关产品推荐

