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

Azure环境下如何从提交触发的构建中获取Pull Request ID

分支提交触发构建中获取Pull Request ID的解决方案

我明白你遇到的这个痛点:之前找到的通过BuildId获取PR ID的方案只适配Pull Request触发的构建,而当构建是由分支直接提交触发时,parameters对象是空的,根本拿不到PR相关参数。别担心,咱们换个思路,从构建的关联资源或者Azure DevOps API入手来解决这个问题。

方法一:通过构建详情API直接获取关联PR ID

分支提交触发的构建虽然不会在parameters里携带PR信息,但Azure DevOps会记录该构建关联的所有PR(比如这个提交被包含在某个PR的分支里)。你可以调用Builds - Get Build API来提取pullRequestIds字段:

举个PowerShell示例,你可以直接把这个集成到Pipeline里:

# 替换成你的组织、项目信息,PAT可通过Azure DevOps生成
$orgUrl = "https://dev.azure.com/your-org-name"
$projectName = "your-project-name"
$buildId = "$(Build.BuildId)" # 直接使用Pipeline预定义变量获取当前构建ID
$pat = "your-personal-access-token"

# 构建请求授权头
$headers = @{
    Authorization = "Basic $([Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$pat")))"
}

# 获取构建详情
$buildDetails = Invoke-RestMethod -Uri "$orgUrl/$projectName/_apis/build/builds/$buildId?api-version=7.1-preview.7" -Headers $headers -Method Get

# 提取并输出关联的PR ID
if ($buildDetails.pullRequestIds.Count -gt 0) {
    Write-Host "找到关联的Pull Request ID(s): $($buildDetails.pullRequestIds -join ', ')"
} else {
    Write-Host "当前构建没有关联任何Pull Request"
}

方法二:通过提交SHA查询关联PR

如果方法一返回空,可能是因为构建的提交还没被关联到任何PR,这时候你可以用构建的sourceVersion(也就是提交的SHA),调用Pull Requests - Get Pull Requests By Commit API,找到所有包含这个提交的PR:

同样是PowerShell示例,利用Pipeline预定义变量$(Build.SourceVersion)获取提交SHA:

# 替换成你的组织、项目、仓库名和PAT
$orgUrl = "https://dev.azure.com/your-org-name"
$projectName = "your-project-name"
$repoName = "your-repo-name"
$commitSha = "$(Build.SourceVersion)" # 直接使用Pipeline预定义变量获取当前提交SHA
$pat = "your-personal-access-token"

$headers = @{
    Authorization = "Basic $([Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$pat")))"
}

# 查询包含该提交的PR
$relatedPRs = Invoke-RestMethod -Uri "$orgUrl/$projectName/_apis/git/repositories/$repoName/pullrequests?commitId=$commitSha&api-version=7.1-preview.1" -Headers $headers -Method Get

if ($relatedPRs.value.Count -gt 0) {
    foreach ($pr in $relatedPRs.value) {
        Write-Host "关联Pull Request: ID=$($pr.pullRequestId) | 标题=$($pr.title)"
    }
} else {
    Write-Host "该提交未被任何Pull Request包含"
}

额外说明

  • 如果你的提交是完全独立的(没有被任何PR引用、也没有合并到PR分支),那确实无法获取到PR ID——因为本身就没有关联的PR存在,这是合理的情况。
  • 在Pipeline中使用这些脚本时,记得给服务账号或者PAT分配足够的权限(比如Build (Read)和Pull Request (Read)权限)。

内容的提问来源于stack exchange,提问作者Peter Boomsma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:55:40