流水线结束后将工作项关联至Azure DevOps构建,为何未显示在相关工作项中
解决流水线结束后关联工作项至构建并显示在相关列表的方法
为什么手动添加"Integrated in Build"链接不生效
构建详情的"Related Work Items"列表是构建实体自身维护的关联集合,而工作项上添加的"Integrated in Build"链接只是反向关联记录,不会自动触发构建端的关联数据同步,所以手动操作后不会显示在目标列表里。
可行解决方案:使用Azure DevOps REST API主动关联
通过调用官方REST API直接更新构建的关联工作项集合,步骤如下:
- 获取目标构建ID:从构建详情页URL中提取,例如
https://dev.azure.com/你的组织/你的项目/_build/results?buildId=1234中的1234就是构建ID。 - 准备个人访问令牌(PAT):需授予**Build(读取和写入)以及Work Items(读取和写入)**权限。
- 发送PATCH请求到API端点:
端点地址:https://dev.azure.com/{你的组织}/{你的项目}/_apis/build/builds/{构建ID}/workitems?api-version=7.1-preview.2
请求头:添加Content-Type: application/json和Authorization: Basic {Base64编码的PAT}(编码方式:将空用户名与PAT用冒号拼接后做Base64编码)
请求体示例(JSON格式,包含要关联的工作项信息):[ { "id": 5678, "url": "https://dev.azure.com/你的组织/你的项目/_apis/wit/workItems/5678" } ] - 调用API后刷新构建详情页,即可看到新增的关联工作项。
可选的批量/自动化方式
如果需要批量处理或在流水线结束时自动关联,可在流水线中添加PowerShell/Azure CLI任务,调用上述API完成操作。例如PowerShell脚本示例:
$org = "你的组织" $proj = "你的项目" $buildId = "$(Build.BuildId)" $pat = "你的PAT" $encodedPat = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$pat")) $workItems = @( @{ id = 5678; url = "https://dev.azure.com/$org/$proj/_apis/wit/workItems/5678" } ) $body = $workItems | ConvertTo-Json Invoke-RestMethod -Uri "https://dev.azure.com/$org/$proj/_apis/build/builds/$buildId/workitems?api-version=7.1-preview.2" ` -Method Patch ` -Headers @{ Authorization = "Basic $encodedPat" } ` -Body $body ` -ContentType "application/json"
内容的提问来源于stack exchange,提问作者dan
相关产品推荐
相关产品推荐

