簡體   English   中英

TFS REST API 在分支上獲得最新的成功構建

[英]TFS REST API get latest successful build on a branch

我正在嘗試獲取 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 中非常基本但很困難。

默認情況下,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

在此處輸入圖片說明

自從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 文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM