如何通过PowerShell调用Azure DevOps API获取指定环境最新发布版本?
当然可以通过API获取环境ID啦!这其实是Azure DevOps Release API的基础能力之一,我帮你梳理下具体步骤和PowerShell代码示例:
获取发布定义对应的环境ID(以Prod为例)
首先,你需要调用Release Definitions API来获取目标发布定义下的所有环境信息,从中筛选出你需要的环境(比如"prod")对应的ID。
1. 调用Release Definitions API
使用GET请求获取指定发布定义的详细信息,返回结果里会包含所有关联的环境配置:
# 配置变量 $orgName = "你的组织名" $projName = "你的项目名" $definitionId = "1" # 你的目标发布定义ID $patToken = "你的PAT令牌" # 确保PAT拥有Release相关的读写权限 $apiVersion = "6.0" # 构建API请求URL $defApiUrl = "https://dev.azure.com/$orgName/$projName/_apis/release/definitions/$definitionId?api-version=$apiVersion" # 发送请求并获取发布定义详情 $releaseDefinition = Invoke-RestMethod -Uri $defApiUrl ` -Headers @{Authorization = "Basic $([Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$patToken")))"} ` -Method Get
2. 筛选目标环境的ID
从返回的environments数组中,根据环境名称精准筛选出对应ID:
# 筛选名称为"prod"的环境ID(注意名称要和Azure DevOps门户里的完全一致,大小写敏感) $prodEnvId = ($releaseDefinition.environments | Where-Object { $_.name -eq "prod" }).id Write-Host "Prod环境ID: $prodEnvId"
这样你就不用硬编码环境ID了,完全通过API动态获取,既灵活又能避免环境ID变更导致的脚本失效。
后续步骤:获取Prod最新发布并部署到UAT/DEV
拿到$prodEnvId后,就可以结合你之前的部署API获取最新的Prod发布:
# 获取Prod环境的最新发布记录 $deploymentsApiUrl = "https://dev.azure.com/$orgName/$projName/_apis/release/deployments?api-version=$apiVersion&definitionId=$definitionId&definitionEnvironmentId=$prodEnvId&`$top=1" $latestProdDeployment = Invoke-RestMethod -Uri $deploymentsApiUrl ` -Headers @{Authorization = "Basic $([Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$patToken")))"} ` -Method Get $targetReleaseId = $latestProdDeployment.value[0].release.id
接着用同样的方法从$releaseDefinition.environments里拿到UAT/DEV的环境ID,再调用Release Environments API触发部署:
# 假设已获取UAT环境ID $uatEnvId $deployTriggerUrl = "https://dev.azure.com/$orgName/$projName/_apis/release/releases/$targetReleaseId/environments/$uatEnvId?api-version=$apiVersion" $requestBody = @{ status = "inProgress" } | ConvertTo-Json Invoke-RestMethod -Uri $deployTriggerUrl ` -Headers @{Authorization = "Basic $([Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$patToken")))"} ` -Method Patch ` -Body $requestBody ` -ContentType "application/json"
小提示
- 确保你的PAT令牌拥有Release管理的权限(至少需要"读取"和"编辑"权限)
- 环境名称要严格匹配Azure DevOps里的显示名称,大小写敏感
- API版本可以根据需求调整,6.0是稳定版,也可以尝试更高的预览版比如7.1-preview
内容的提问来源于stack exchange,提问作者BobbyS
相关产品推荐
相关产品推荐

