如何在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
相关产品推荐
相关产品推荐

