我正在使用TFS2018 API来获取所有构建定义。我想知道上次更改构建定义(如果构建步骤已更改)。
更好地解释这一点。我正在使用API批量更新构建定义,例如100基于模板的构建定义。如果我更改模板,我将删除所有定义并根据模板创建一个新定义。但是,如果使用Web管理页面手动更改特定的构建模板,我不想删除它,因为它已经过自定义。
我假设修订版仅在构建期间创建。但是,用户可能会在不构建构建定义的情况下更改构建定义。
因此,我希望每当构建定义中的某些内容发生更改时,都会有修改日期?
更新:在调用修订REST API时,我总是得到相同的respone,一个空数组 “{\” 计数\ “:0,\” 值\ “:[]}” “https://mytfsdomain/tfs/DefaultCollection/MyTeamProject/_apis/build/definitions/7332/revisions?api-version=2.0”
即使我更改了构建定义7332,我仍然得到相同的响应。知道为什么没有修改?
答案 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)