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

Azure Pipeline是否存在内置变量可检测构建运行次数,用以跳过指定步骤?

Azure Pipeline 没有直接对应这个场景的内置变量。你提到的 System.JobAttempt 和 System.StageAttempt 仅适用于单构建内部的失败重试场景,无法统计同一个 Commit Hash 跨多次构建的运行次数。

实现方案

你可以通过调用 Azure DevOps 内置的 REST API 来实现需求,步骤如下:

前置准备

  • 给当前流水线的构建服务账号授予「项目读取」权限,确保流水线有权限调用项目级别的 REST API
  • 开启流水线的 System.AccessToken 权限,允许脚本访问内置令牌

具体YAML示例

  1. 新增统计构建次数的步骤
steps:
- powershell: |
    $headers = @{
        Authorization = "Bearer $(System.AccessToken)"
        "Content-Type" = "application/json"
    }
    # 取当前构建对应的Commit Hash
    $currentCommit = "$(Build.SourceVersion)"
    # 调用构建查询API,筛选同一个Commit的所有构建记录
    $apiUrl = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/build/builds?sourceVersion=$currentCommit&api-version=7.1-preview.7"
    $buildResponse = Invoke-RestMethod -Uri $apiUrl -Headers $headers -Method Get
    # 统计构建总数
    $totalBuilds = $buildResponse.value.Count
    # 将次数写入输出变量,供后续步骤调用
    Write-Host "##vso[task.setvariable variable=CommitBuildTotal;isOutput=true]$totalBuilds"
  name: CountCommitBuilds
  displayName: 统计当前Commit的构建总次数
  1. 给需要跳过的步骤添加条件判断
- script: echo "该步骤仅在当前Commit第一次构建时执行"
  # 当构建次数等于1时才运行,大于1自动跳过
  condition: eq(dependencies.CountCommitBuilds.outputs['CommitBuildTotal'], 1)
  displayName: 仅首次构建执行的步骤

可选优化

如果不需要统计已取消/已删除的构建,可以在API请求的URL中添加statusFilter=completed参数,只统计正常完成的构建记录:

$apiUrl = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/build/builds?sourceVersion=$currentCommit&statusFilter=completed&api-version=7.1-preview.7"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 23:06:00