You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过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

火山引擎 最新活动