Вы не можете использовать тип ссылки Integrated in Build
в запросах рабочего элемента, потому что эта ссылка не на рабочий элемент. В запросах рабочих элементов вы можете использовать только фильтры для ссылок и полей рабочих элементов. В нашем проекте Azure DevOps Services мы добавляем настраиваемый шаг PowerShell в сборки CI. На этом этапе номер сборки добавляется в поле Integration Build
рабочих элементов, связанных в GIT commit:
$user = ""
$token = "$(System.AccessToken)"
$teamProject = "$(System.TeamProject)"
$orgUrl = "$(System.CollectionUri)"
$buildDefinitionName = "$(Build.DefinitionName)"
$buildNumber = "$(Build.BuildNumber)"
$repoName = "$(Build.Repository.Name)"
$bodyWorkItemInt = "[{op: `"add`", path: `"/fields/Microsoft.VSTS.Build.IntegrationBuild`", value: `"{value}`"}]"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))
$uriSearchCommit = "$orgUrl/$teamProject/_apis/git/repositories/$repoName/commits?api-version=5.1&searchCriteria.toCommitId={commitId}&searchCriteria.fromCommitId={commitId}&searchCriteria.includeWorkItems=true"
$last_commit = & git show --format=%H HEAD
Write-Host $last_commit
if ($last_commit.Count -gt 0)
{
$uriSearchCommit = $uriSearchCommit -replace "{commitId}", $last_commit[0]
Write-Host $uriSearchCommit
$resultCommit = Invoke-RestMethod -Uri $uriSearchCommit -Method Get -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
if ($resultCommit.count -eq 1)
{
if ($resultCommit[0].value[0].workItems.Count -gt 0)
{
foreach ($workItem in $resultCommit[0].value[0].workItems)
{
Write-Host "Work item:" $workItem
$resultWorkItem = Invoke-RestMethod -Uri $workItem.url -Method Get -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
$int_value = $buildDefinitionName + "_" + $buildNumber
if ($resultWorkItem.fields.'Microsoft.VSTS.Build.IntegrationBuild' -ne $null)
{
if ($resultWorkItem.fields.'Microsoft.VSTS.Build.IntegrationBuild'.Contains($buildDefinitionName))
{
Write-Host "Work item contains the label:" $buildDefinitionName
$int_value = ""
}
else
{
$int_value += ";" + $resultWorkItem.fields.'Microsoft.VSTS.Build.IntegrationBuild'
}
}
if ($int_value -ne "")
{
$bodyWorkItemInt = $bodyWorkItemInt -replace "{value}", $int_value
$uriUpdateWI = "$orgUrl/$teamProject/_apis/wit/workitems/{id}?api-version=5.1" -replace "{id}", $resultWorkItem.id
Invoke-RestMethod -Uri $uriUpdateWI -Method Patch -ContentType "application/json-patch+json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Body $bodyWorkItemInt
}
}
}
}
}
Затем вы можете искать номер сборки в поле Integration Build
с помощью запроса рабочего элемента.