TFS REST API获取分支上最新成功的构建

4

我正在尝试获取TFS定义的最新版本。

但是我得到了所有的sourceBranch值,我想在同一查询中过滤,就像我在TeamCity中做的那样。

这在TFS中是否可行?

我使用的查询类似于:

url/builds?statusFilter=completed&resultFilter=succeeded&definitions=10&api-version=2.0

根据提供的文档https://www.visualstudio.com/en-us/docs/integrate/api/build/builds#get-a-build,不能找到在同一请求中查询的简单方法。

是否有人以前做过? 我觉得这很基础但在TFS中很难。

2个回答

7

默认情况下,REST API中没有“分支筛选器”用于获取构建列表。请参考获取构建列表

GET https://{instance}/DefaultCollection/{project}/_apis/build/builds?api-version={version}[&definitions={string}][&queues={string}][&buildNumber={string}][&type={string}][&minFinishTime={DateTime}][&maxFinishTime={DateTime}][&requestedFor={string}][&reasonFilter={string}][&statusFilter={string}][&tagFilters={string}][&propertyFilters={string}][&$top={int}][&continuationToken={string}]

如果您想要直接使用 REST API 查询特定分支上的构建,可以使用其他筛选器,比如 tagFilters 来创建在特定分支上排队的构建的标记。另一种解决方法是使用第三方工具(例如 PowerShell)来筛选分支。以下是可用于筛选特定分支上构建的 PowerShell 脚本(第一个构建应该是最新的):
$baseUrl = "http://server:8080/tfs/CollectionLC/0418Scrum/_apis/build/builds?api-version=2.0&statusFilter=completed&resultFilter=succeeded&definitions=57"  # Filter added.         
$builds = (Invoke-RestMethod -Uri $baseUrl -Method Get -UseDefaultCredential).value|where({$_.sourceBranch -eq '$/0418Scrum/web0418'}) # filter branch, just change '$/0418Scrum/web0418' to your branch.

$BuildResults = @()

foreach($build in $builds){

    $customObject = new-object PSObject -property @{
          "BuildDefinition" = $build.definition.name
          "BuildId" = $build.id
          "BuildNumber" = $build.buildNumber
          "status" = $build.status
          "result" = $build.result
          "finishTime" = $build.finishTime
          "sourceBranch" = $build.sourceBranch
        } 

    $BuildResults += $customObject      
}

$BuildResults | Select `
                BuildDefinition,
                BuildId, 
                BuildNumber, 
                status,
                result,
                finishTime,
                sourceBranch

enter image description here


谢谢,最终我使用了与您建议的方法非常相似的 Powershell 方法。 - Allan.C

0

自从 Andy Li-MSFT 提供的 此答案 以来,官方 API 已经发生了变化。

当前的 API 支持按分支名称过滤 - branchName

示例:

$buildsApi = "https://dev.azure.com/{organization}/{project}/_apis/build/builds"
$definitionId = 100
$urlWithFilters = "$buildsApi?api-version=6.0&statusFilter=completed&resultFilter=succeeded&branchName=refs/heads/main&definitions=$definitionId"  
$builds = (Invoke-RestMethod -Uri $urlWithFilters -Method Get -UseDefaultCredential).value

请参考API文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接