You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure DevOps多流水线编排与实时状态监控问题排查

Azure DevOps Pipeline 特定构建号状态监控脚本修改方案

核心思路

不再查询流水线的最新构建,而是基于Trigger Pipeline捕获到的特定Build Number,通过Azure DevOps REST API定位到对应构建,循环监控其状态直至进入终止状态(成功/失败/取消等)。

修改后的PowerShell脚本

param(
    [string]$OrganizationName = "你的组织名",
    [string]$ProjectName = "你的项目名",
    [string]$PipelineId = "流水线A/B的ID", # 可在流水线编辑页URL中找到
    [string]$TargetBuildNumber = "$(PipelineABuildNumber)", # Trigger Pipeline中捕获到的目标构建号
    [string]$Pat = "$(System.AccessToken)" # 使用系统内置令牌,需开启Pipeline的OAuth权限
)

# 1. 通过Build Number查询目标构建的详情
$apiUrl = "https://dev.azure.com/$OrganizationName/$ProjectName/_apis/build/builds?api-version=7.1-preview.7&buildNumber=$TargetBuildNumber"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$Pat"))
$buildResponse = Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization = "Basic $base64AuthInfo"} -Method Get
$targetBuild = $buildResponse.value | Select-Object -First 1

if (-not $targetBuild) {
    Write-Error "未找到Build Number为 $TargetBuildNumber 的构建"
    exit 1
}

$buildId = $targetBuild.id
$currentStatus = $targetBuild.status
$currentResult = $targetBuild.result

# 2. 定义构建终止状态
$completedStatuses = @("completed")
$terminationResults = @("succeeded", "failed", "canceled", "partiallySucceeded")

# 3. 循环监控直至构建完成
while ($currentStatus -notin $completedStatuses -or $currentResult -notin $terminationResults) {
    Write-Host "构建 $TargetBuildNumber 当前状态: $currentStatus,结果: $currentResult,10秒后重试..."
    Start-Sleep -Seconds 10

    # 更新状态
    $statusUrl = "https://dev.azure.com/$OrganizationName/$ProjectName/_apis/build/builds/$buildId?api-version=7.1-preview.7"
    $updatedBuild = Invoke-RestMethod -Uri $statusUrl -Headers @{Authorization = "Basic $base64AuthInfo"} -Method Get
    $currentStatus = $updatedBuild.status
    $currentResult = $updatedBuild.result
}

# 4. 输出最终结果并设置任务状态
Write-Host "构建 $TargetBuildNumber 已完成,最终结果: $currentResult"
if ($currentResult -eq "succeeded") { exit 0 } else { exit 1 }

使用说明

  1. 参数配置:
    • 替换OrganizationName、ProjectName、PipelineId为实际值
    • TargetBuildNumber直接引用Trigger Pipeline中捕获到的变量(比如$(PipelineABuildNumber)、$(PipelineBBuildNumber))
  2. 权限设置:
    • 在Trigger Pipeline的编辑页,进入「变量」→「流水线变量」,开启「允许脚本访问OAuth令牌」
  3. 批量监控:
    • 若需同时监控Pipeline A和B,可将脚本封装为函数,分别传入两个流水线的ID和Build Number调用

注意事项

  • 可根据实际需求调整Start-Sleep的等待时长(比如改为30秒)
  • 可添加try-catch块处理API调用失败的异常情况
  • 确保System.AccessToken拥有「读取构建」的权限(可在项目设置的权限页配置)

内容的提问来源于stack exchange,提问作者Dheeman Das

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 12:17:37