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

如何获取Azure DevOps中两个构建管道间的Git提交变更列表

获取两个Azure DevOps构建间的Git提交变更列表

Azure DevOps没有直接的API参数可以一步获取两个构建之间的所有变更,但可以通过组合几个API并配合脚本实现需求,具体步骤如下:

1. 获取两个目标构建对应的源码Commit ID

首先需要拿到两个构建各自对应的Git提交哈希值,调用构建详情API:

GET https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}?api-version=7.1-preview.7

在返回结果的sourceVersion字段中,即可提取出该构建对应的源码Commit ID。

2. 获取两个Commit之间的所有变更提交

使用Azure DevOps的Git仓库提交查询API,传入第一步得到的两个Commit ID,获取它们之间的所有提交:

GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/commits?searchCriteria.fromCommitId={旧构建的Commit ID}&searchCriteria.toCommitId={新构建的Commit ID}&api-version=7.1-preview.1

注意替换路径中的{repositoryId}为对应Git仓库的ID,可通过项目仓库列表API获取。

3. 脚本自动化示例(PowerShell)

以下是一个完整的PowerShell脚本,可直接复用(需替换占位符并配置PAT):

# 配置参数
$orgName = "你的组织名"
$projectName = "你的项目名"
$oldBuildId = "旧构建ID"
$newBuildId = "新构建ID"
$pat = "你的PAT令牌"
$encodedPat = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$pat"))

# 获取旧构建的Commit ID
$oldBuildUrl = "https://dev.azure.com/$orgName/$projectName/_apis/build/builds/$oldBuildId?api-version=7.1-preview.7"
$oldBuildResponse = Invoke-RestMethod -Uri $oldBuildUrl -Headers @{Authorization = "Basic $encodedPat"}
$oldCommitId = $oldBuildResponse.sourceVersion

# 获取新构建的Commit ID
$newBuildUrl = "https://dev.azure.com/$orgName/$projectName/_apis/build/builds/$newBuildId?api-version=7.1-preview.7"
$newBuildResponse = Invoke-RestMethod -Uri $newBuildUrl -Headers @{Authorization = "Basic $encodedPat"}
$newCommitId = $newBuildResponse.sourceVersion

# 获取仓库ID(假设构建基于默认仓库,可根据实际调整)
$repoUrl = "https://dev.azure.com/$orgName/$projectName/_apis/git/repositories?api-version=7.1-preview.1"
$repoResponse = Invoke-RestMethod -Uri $repoUrl -Headers @{Authorization = "Basic $encodedPat"}
$repoId = $repoResponse.value[0].id

# 获取两个Commit之间的所有提交
$commitsUrl = "https://dev.azure.com/$orgName/$projectName/_apis/git/repositories/$repoId/commits?searchCriteria.fromCommitId=$oldCommitId&searchCriteria.toCommitId=$newCommitId&api-version=7.1-preview.1"
$commits = Invoke-RestMethod -Uri $commitsUrl -Headers @{Authorization = "Basic $encodedPat"}

# 输出变更列表
Write-Host "两个构建之间的Git提交变更:"
$commits.value | ForEach-Object {
    Write-Host "Commit ID: $($_.commitId)"
    Write-Host "作者: $($_.author.name)"
    Write-Host "提交信息: $($_.comment)"
    Write-Host "-------------------------"
}

注意事项

  • 确保两个构建属于同一个管道且基于同一个Git仓库,否则对比结果无意义
  • PAT令牌需要具备Build (Read)和Git (Read)权限
  • 如果构建是基于分支的,需保证两个构建的分支一致,避免跨分支对比

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 08:57:16