Azure Pipeline是否存在内置变量可检测构建运行次数,用以跳过指定步骤?
Azure Pipeline 没有直接对应这个场景的内置变量。你提到的 System.JobAttempt 和 System.StageAttempt 仅适用于单构建内部的失败重试场景,无法统计同一个 Commit Hash 跨多次构建的运行次数。
实现方案
你可以通过调用 Azure DevOps 内置的 REST API 来实现需求,步骤如下:
前置准备
- 给当前流水线的构建服务账号授予「项目读取」权限,确保流水线有权限调用项目级别的 REST API
- 开启流水线的
System.AccessToken权限,允许脚本访问内置令牌
具体YAML示例
- 新增统计构建次数的步骤
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的构建总次数
- 给需要跳过的步骤添加条件判断
- 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
相关产品推荐
相关产品推荐

