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

能否使用Powershell导出Azure DevOps流水线运行历史并生成统计报告

实现方案说明

可以实现近一个月Azure DevOps流水线运行统计报告的生成,你现有脚本已经完成了调用Azure DevOps Build REST API拉取运行记录的基础逻辑,只需补充时间过滤、字段解析、统计计算、报告导出的逻辑即可,具体操作方法如下:


1 前置准备

  • 你使用的身份(个人访问令牌PAT或流水线内置服务账号)需要有目标项目的生成读取权限
  • 如果是在本地运行脚本,需要把$env:SYSTEM_ACCESSTOKEN替换为你自己的Azure DevOps个人访问令牌(PAT),令牌范围勾选Build (Read)即可

2 完善后的完整脚本

# 配置基础参数
$organization = "chealey"
$project = "personal test"
$apiVersion = "5.1"
# 计算近一个月的UTC起始时间
$startTime = (Get-Date).AddMonths(-1).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")
$strURL = "https://dev.azure.com/$organization/$([Uri]::EscapeDataString($project))/_apis/build/builds?api-version=$apiVersion&minFinishTime=$startTime&`$top=1000"

# 授权配置:本地运行替换为自己的PAT,流水线运行保留环境变量即可
$token = $env:SYSTEM_ACCESSTOKEN
# 本地运行示例:$token = "你的PAT字符串"
$headers = @{   
 Authorization = "Bearer $token"
}

# 拉取构建记录
$buildRecords = Invoke-RestMethod -Uri $strURL -Headers $headers -Method GET

# 处理单条构建记录,生成结构化统计数据
$pipelineStats = $buildRecords.value | ForEach-Object {
    $runDuration = if ($_.finishTime -and $_.startTime) {
        [datetime]$_.finishTime - [datetime]$_.startTime
    } else { $null }
    [PSCustomObject]@{
        流水线ID = $_.definition.id
        流水线名称 = $_.definition.name
        运行ID = $_.id
        运行状态 = $_.status
        运行结果 = $_.result
        启动时间 = [datetime]$_.queueTime
        完成时间 = if ($_.finishTime) { [datetime]$_.finishTime } else { $null }
        运行时长_分钟 = if ($runDuration) { [math]::Round($runDuration.TotalMinutes,2) } else { $null }
        触发人 = $_.requestedBy.displayName
    }
}

# 导出明细数据到CSV,可直接用Excel打开生成可视化报告
$outputPath = "D:\pipeline_stats.csv"
$pipelineStats | Export-Csv -Path $outputPath -Encoding UTF8 -NoTypeInformation

# 生成按流水线聚合的汇总统计
$summary = $pipelineStats | Group-Object 流水线名称 | ForEach-Object {
    $failedRuns = $_.Group | Where-Object { $_.运行结果 -eq "failed" } | Measure-Object | Select-Object -ExpandProperty Count
    $successRuns = $_.Group | Where-Object { $_.运行结果 -eq "succeeded" } | Measure-Object | Select-Object -ExpandProperty Count
    $avgDuration = $_.Group | Where-Object { $_.运行时长_分钟 -ne $null } | Measure-Object 运行时长_分钟 -Average | Select-Object -ExpandProperty Average
    [PSCustomObject]@{
        流水线名称 = $_.Name
        总运行次数 = $_.Count
        成功次数 = $successRuns
        失败次数 = $failedRuns
        成功率 = if ($_.Count -gt 0) { [math]::Round($successRuns / $_.Count * 100,2) } else { 0 }
        平均运行时长_分钟 = [math]::Round($avgDuration,2)
    }
}

# 导出汇总报告
$summaryPath = "D:\pipeline_summary.csv"
$summary | Export-Csv -Path $summaryPath -Encoding UTF8 -NoTypeInformation

# 控制台输出汇总结果验证
Write-Host "近一个月流水线统计汇总:"
$summary | Format-Table -AutoSize

3 报告使用说明

  • 运行脚本后会生成两个文件:pipeline_stats.csv 是所有运行的明细数据,pipeline_summary.csv 是按流水线聚合的统计数据,包含你需要的运行时长、失败次数、成功率等核心信息
  • 你可以用Excel打开CSV文件,插入数据透视表、柱状图、折线图等可视化元素,生成正式的统计报告
  • 如果需要定期自动生成报告,可以把这个脚本配置成Azure DevOps定时运行的流水线,生成的CSV可以作为流水线产物留存,或者自动发送邮件给相关人员

4 补充说明

  • 如果拉取的记录超过1000条,需要处理API分页逻辑,在请求中添加continuationToken参数循环拉取即可
  • 若需要包含发布流水线的运行数据,把请求地址替换为发布管理的REST API接口即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:36:03