TFS2018获取构建定义修改日期

时间:2018-04-30 15:04:17

标签: tfs azure-devops

我正在使用TFS2018 API来获取所有构建定义。我想知道上次更改构建定义(如果构建步骤已更改)。

更好地解释这一点。我正在使用API​​批量更新构建定义,例如100基于模板的构建定义。如果我更改模板,我将删除所有定义并根据模板创建一个新定义。但是,如果使用Web管理页面手动更改特定的构建模板,我不想删除它,因为它已经过自定义。

我假设修订版仅在构建期间创建。但是,用户可能会在不构建构建定义的情况下更改构建定义。

因此,我希望每当构建定义中的某些内容发生更改时,都会有修改日期?

更新:在调用修订REST API时,我总是得到相同的respone,一个空数组 “{\” 计数\ “:0,\” 值\ “:[]}” “https://mytfsdomain/tfs/DefaultCollection/MyTeamProject/_apis/build/definitions/7332/revisions?api-version=2.0

即使我更改了构建定义7332,我仍然得到相同的响应。知道为什么没有修改?

3 个答案:

答案 0 :(得分:1)

这需要使用revisions API进行一些REST调用:

GET https://{url}/{project}/_apis/build/definitions/{definitionId}/revisions?api-version=4.1

修订号是检索构建定义时的可选参数之一,因此您可以检索构建定义的特定修订版并与最新版本进行比较。

答案 1 :(得分:1)

是的,您需要查询definition revisions。返回的JSON包含更改的详细信息。根据您用于解析输出的内容,抓取value数组的最后一个元素,然后抓取changedDate字段。我还相信返回的值是UTC。下面是一些PowerShell来帮助你。

$pat = "[Your PAT]"
$vstsServiceCredentials = ":$pat"

$encodedVstsServiceCredentials = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($vstsServiceCredentials))
$authorizationHeader = @{ Authorization=("Basic {0}" -f 
$encodedVstsServiceCredentials) }

$buildService = "https://[accountName].visualstudio.com/[projectName]/_apis/build/definitions/[BuildDefinitionId]/revisions?api-version=4.1"
$response = Invoke-RestMethod -Uri $buildService -Method Get -Headers 
$authorizationHeader

Write-Host $response
Write-Host $response.value[$response.value.Length - 1].changedDate

答案 2 :(得分:1)

api-version=4.1适用于VSTS。由于您使用的是TFS 2018,因此需要使用api-version=4.0

Get http://TFS2018:8080/tfs/DefaultCollection/TeamProject/_apis/build/definitions/{definitionId}/revisions?api-version=4.0

我也试过api-version=2.0,它也有效。查看下面的屏幕截图:

enter image description here

此外,您可以在修改构建定义时查看历史记录标签,也可以在此处更改日期:

enter image description here