如何通过Azure DevOps REST API查询发布管道状态并触发生产构建管道
可行方案:通过Azure DevOps REST API实现发布状态校验与生产阶段触发
核心结论
完全可以实现。你可以在生产构建管道里加个前置校验阶段,调用Azure DevOps REST API查询预生产发布管道的最新运行状态,根据返回结果决定是否启动后续的生产构建流程。
具体实现步骤
1. 在构建管道中添加API查询任务
用PowerShell或Bash任务调用发布管道状态查询API,拿到预生产发布的最新状态:
- REST API端点示例:
GET https://vsrm.dev.azure.com/{组织名}/{项目名}/_apis/release/releases?definitionId={预生产发布管道ID}&$top=1&api-version=7.1-preview.8 - 认证直接用管道内置的
$(System.AccessToken)当授权头就行,不用额外建服务连接,但要保证管道有读取发布管道的权限。
PowerShell脚本示例:
$orgName = "你的组织名" $projectName = "你的项目名" $releaseDefId = "预生产发布管道ID" $apiVersion = "7.1-preview.8" $headers = @{ Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN" } $url = "https://vsrm.dev.azure.com/$orgName/$projectName/_apis/release/releases?definitionId=$releaseDefId&`$top=1&api-version=$apiVersion" $response = Invoke-RestMethod -Uri $url -Headers $headers -Method Get # 提取最新发布的状态和结果 $latestReleaseStatus = $response.value[0].status $latestReleaseResult = $response.value[0].result # 把状态设为管道输出变量,给后面阶段用 Write-Host "##vso[task.setvariable variable=PreProdReleaseStatus;isOutput=true]$latestReleaseStatus" Write-Host "##vso[task.setvariable variable=PreProdReleaseResult;isOutput=true]$latestReleaseResult"
2. 配置生产阶段的触发条件
在生产构建阶段的触发条件里,引用上面输出的变量,只有预生产发布状态是completed且结果为succeeded时才执行:
- 在阶段的依赖设置里加条件:
and(succeeded(), eq(dependencies.前置校验阶段名.outputs['API查询任务名.PreProdReleaseStatus'], 'completed'), eq(dependencies.前置校验阶段名.outputs['API查询任务名.PreProdReleaseResult'], 'succeeded'))
3. 权限配置
要确保运行构建管道的服务主体(或项目集合构建服务帐户)有查看发布管道的权限:
- 进入预生产发布管道的安全设置,添加对应帐户并授予“查看发布”权限。
替代简化方案
如果不需要在生产管道里做校验,也可以直接在预生产发布管道的成功阶段加个任务,调用Azure DevOps的构建触发API直接启动生产构建管道,这样流程更直接,不用在生产管道里查状态。
- 触发构建的API端点示例:
POST https://dev.azure.com/{组织名}/{项目名}/_apis/build/builds?api-version=7.1-preview.7
内容的提问来源于stack exchange,提问作者Muhammad Saud Siraj
相关产品推荐
相关产品推荐

