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

