如何通过Azure DevOps REST API获取部署作业发布信息并验证云端版本一致性
如何通过Azure DevOps REST API获取已部署的发布名称?
当然可以!你完全可以借助Azure DevOps REST API的发布与部署相关端点,获取云端已部署的版本信息,进而和待部署版本做对比。下面是具体的实操方案:
1. 核心API端点推荐
根据你的需求,主要用到两个关键API:
- 获取特定发布管道的所有发布记录:用于查看该管道下的所有版本发布情况
GET https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/releases?definitionId={releaseDefinitionId}&api-version=7.1-preview.8 - 获取目标环境的最新部署记录:直接定位到你关心的环境(比如生产)的最近一次部署,效率更高
GET https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/deployments?definitionId={releaseDefinitionId}&environmentId={environmentId}&$top=1&api-version=7.1-preview.3
参数说明:
{organization}:你的Azure DevOps组织名称{project}:对应的项目名称{releaseDefinitionId}:发布管道的ID(可以在发布管道页面的URL中找到,比如https://dev.azure.com/xxx/xxx/_release?_a=releases&view=mine&definitionId=123里的123){environmentId}:目标部署环境的ID(进入环境设置页面,URL里的数字就是环境ID)
2. API认证方式
调用这些API需要认证,常用两种方式:
- 个人访问令牌(PAT):生成一个拥有
Release (Read)权限的PAT,请求时在Header中添加Authorization: Basic {base64编码的PAT字符串}(注意编码格式是:{你的PAT}后再转base64) - Pipeline内置令牌:在Azure Pipeline任务中,可以直接使用
$(System.AccessToken),但需要给项目的项目集合构建服务授予发布管理-读取权限
3. 实操示例(Pipeline中用PowerShell实现)
下面是一个完整的PowerShell任务示例,用来获取已部署版本并对比:
# 配置参数 $org = "你的组织名" $project = "你的项目名" $releaseDefId = "你的发布管道ID" $envId = "目标环境ID" $pat = "$(System.AccessToken)" $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f "", $pat))) # 调用API获取最新部署记录 $apiUrl = "https://vsrm.dev.azure.com/$org/$project/_apis/release/deployments?definitionId=$releaseDefId&environmentId=$envId&`$top=1&api-version=7.1-preview.3" $deploymentResponse = Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method Get # 提取已部署的发布名称(通常包含版本号) $deployedReleaseName = $deploymentResponse.value[0].release.name Write-Host "当前云端已部署的版本: $deployedReleaseName" # 对比待部署版本(假设待部署版本存在于Build.BuildNumber变量中) $targetVersion = "$(Build.BuildNumber)" if ($deployedReleaseName -eq $targetVersion) { Write-Host "✅ 版本一致,无需执行部署操作" # 设置变量让后续部署任务跳过 echo "##vso[task.setvariable variable=SkipDeployment]true" } else { Write-Host "🔄 版本不一致,继续执行部署流程" echo "##vso[task.setvariable variable=SkipDeployment]false" }
4. 额外提示
- 如果你的发布名称没有直接包含版本号,可以通过响应中的
release.build.id字段,调用Builds API获取对应的构建版本号:GET https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}?api-version=7.1-preview.7 - API版本可以根据你的Azure DevOps版本选择合适的,官方会持续更新版本支持,优先选择较新的预览版或正式版
内容的提问来源于stack exchange,提问作者Nisha




