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

如何在Azure DevOps中通过Bash任务获取Pull Request ID

在Azure DevOps Bash任务中提取Pull Request ID的实现方法

你截图对应的是Pull Request直接触发流水线的标准场景,可根据实际运行场景选择以下两种可直接落地的方案:

方案1:直接读取系统预定义变量(PR触发场景首选)

当流水线由Pull Request触发时,Azure DevOps会自动注入PR相关的预定义变量,不需要额外写解析逻辑,直接在Bash任务中调用即可:

# 提取PR ID
PR_ID=$(System.PullRequest.PullRequestId)

# 打印结果验证
echo "当前运行关联的Pull Request ID: $PR_ID"

# 如果需要让PR ID在后续流水线任务中可用,执行以下命令设置流水线全局变量
echo "##vso[task.setvariable variable=PrId]$PR_ID"

注意:该变量仅在PR触发的流水线上下文中有值,手动触发、分支直接推送触发的流水线中该变量为空。

方案2:调用REST API查询(非PR触发场景适用)

如果你的流水线不是PR直接触发,需要根据当前运行的分支、提交查询关联的PR,可以调用Azure DevOps官方REST接口获取,脚本直接使用流水线默认注入的鉴权Token,不需要手动配置个人访问令牌:

# 拼接API请求地址,所有参数均使用流水线自动注入的内置环境变量
REQUEST_URL="${SYSTEM_TEAMFOUNDATIONCOLLECTIONURI}${SYSTEM_TEAMPROJECTID}/_apis/git/repositories/${BUILD_REPOSITORY_ID}/pullrequests?api-version=7.1&searchCriteria.status=active&searchCriteria.sourceRefName=refs/heads/${BUILD_SOURCEBRANCHNAME}&$top=1"

# 发起请求并通过jq解析返回结果拿到PR ID
PR_ID=$(curl -s -H "Authorization: Bearer $(System.AccessToken)" $REQUEST_URL | jq -r '.value[0].pullRequestId')

echo "查询到的关联Pull Request ID: $PR_ID"

# 设置为后续任务可用的全局变量
echo "##vso[task.setvariable variable=PrId]$PR_ID"

注意:该方案依赖jq工具做JSON解析,微软官方托管的流水线代理默认预装该工具;如果使用自托管代理,需要提前在代理机器上安装jq。


内容的提问来源于stack exchange,提问作者MIHIR UPADHYAY

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:09:23