我正在尝试获取TFS定义的最新版本。 但是我获得了所有的sourceBranch值,并且我希望在与TeamCity上相同的查询中进行过滤。 这在TFS中是否可行?
我正在使用的查询类似于:
URL /构建statusFilter =完成&安培; resultFilter =成功&安培;定义= 10安培; API-版本= 2.0
根据提供的文档https://www.visualstudio.com/en-us/docs/integrate/api/build/builds#get-a-build找不到在同一请求中查询的简便方法。
之前有人做过吗?我认为这在TFS中很基本但很难。
答案 0 :(得分:5)
默认情况下,REST API的分支过滤器没有Get a list of builds。
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
答案 1 :(得分:0)
自 Andy Li-MSFT
提供 this answer 以来,官方 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