使用REST API将构建链接添加到工作项

时间:2020-02-12 09:00:25

标签: azure-devops-rest-api

我有一个由另一个版本触发的版本。触发构建具有与其链接的工作项。 为了获得更好的可见性,我想将所有链接到触发构建的工作项目也链接到触发的构建。我已经准备就绪可以拉出工作项列表的所有内容,但是我找不到使用REST API将工作项链接到构建的方法 尝试使用工作项-更新添加链接选项 https://docs.microsoft.com/en-us/rest/api/azure/devops/wit/work%20items/update?view=azure-devops-rest-5.1#add-a-link

工作项关系类型-列表返回: https://docs.microsoft.com/en-us/rest/api/azure/devops/wit/work%20item%20relation%20types/list?view=azure-devops-rest-5.1

System.LinkTypes.Remote.Dependency-Forward
System.LinkTypes.Remote.Dependency-Reverse
System.LinkTypes.Duplicate-Forward
System.LinkTypes.Duplicate-Reverse
Microsoft.VSTS.TestCase.SharedParameterReferencedBy-Forward
Microsoft.VSTS.TestCase.SharedParameterReferencedBy-Reverse
Microsoft.VSTS.Common.Affects-Forward
Microsoft.VSTS.Common.Affects-Reverse
Microsoft.VSTS.TestCase.SharedStepReferencedBy-Forward
Microsoft.VSTS.TestCase.SharedStepReferencedBy-Reverse
Microsoft.VSTS.Common.TestedBy-Forward
Microsoft.VSTS.Common.TestedBy-Reverse
System.LinkTypes.Dependency-Forward
System.LinkTypes.Dependency-Reverse
System.LinkTypes.Hierarchy-Forward
System.LinkTypes.Hierarchy-Reverse
System.LinkTypes.Related
System.LinkTypes.Remote.Related
AttachedFile
Hyperlink
ArtifactLink

除了最后3个,所有似乎都是WI与WI之间的关系。如何添加到构建的链接?

2 个答案:

答案 0 :(得分:0)

当前无法实现。根据{{​​3}}文档中的描述,有三种外部链接类型(管道/内部,在内部找到,在内部集成)用于将工作项链接到内部。

但是,我发现上面的 Build 关系类型没有在上面返回的关系类型中列出。我尝试过并仅使其添加了作为 Hyperlink 的构建。

要解决此问题,您可以尝试将构建版本当前以 Link types 的形式添加到工作项中。

您可以将此问题报告给Microsoft开发团队Hyperlink。希望他们能研究这个问题。

here

答案 1 :(得分:0)

正确的关系类型是 ArtifactLink。

我在我的管道中使用了以下 powershell 代码来创建这些链接:

$personalToken = "<insert personal token here>"
 
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($personalToken)"))
$header = @{authorization = "Basic $token"}

$buildId = $(Build.BuildId)
$azureDevOpsOrg = "<insert your organization name here>"
$projectName = "<insert your project name here>"

$buildWorkItemsUrl = "https://dev.azure.com/${azureDevOpsOrg}/${projectName}/_apis/build/builds/${buildId}/workitems?api-version=5.0"

$body = "[
  {
    ""op"": ""add"",
    ""path"": ""/relations/-"",
    ""value"": {
      ""rel"": ""ArtifactLink"",
      ""url"": ""vstfs:///Build/Build/${buildId}"",
      ""attributes"": {
        ""name"": ""Integrated in build""
      }
    }
  }
]"

$workItems = Invoke-RestMethod -Uri $buildWorkItemsUrl -Method Get -ContentType "application/json" -Headers $header

$workItems.value | ForEach-Object {
  $workItemId = $_.id
  Write-Host $workItemId
  $updateWorkItemurl = "https://dev.azure.com/${azureDevOpsOrg}/${projectName}/_apis/wit/workitems/${workItemId}?api-version=6.0"
  Write-Host $updateWorkItemurl
  Invoke-RestMethod -Uri $updateWorkItemurl -Method Patch -ContentType "application/json-patch+json" -Headers $header -Body $body
}