删除 Azure DevOps 工作项之间的关系并以编程方式提交

问题描述 投票:0回答:3

我将现有的 GIT 存储库推送到新的 DevOps 存储库,这无意中将消息上带有 #{number} 的所有提交链接到具有该 ID 的工作项。

我已成功识别(通过 REST API 和 CLI)所有工作项以及与提交的关系,但是...

  1. az boards work-item relation remove --id $workItemID --relation-type 'Artifact Link' --target-id $relationID --org $orgURL --yes
    无法抱怨 $relationID 不是有效的工作项,这很奇怪,因为 relation typeArtifact Link 所以我不明白为什么它试图获取工作项。

  2. 使用 REST API 似乎相当危险,因为请求是使用关系的索引完成的;不使用特定 ID 让我感到非常不舒服,我需要验证所有更改,这对于我所接触的门票数量来说几乎是不可能的。

如何通过合理的方法以编程方式删除所有这些关系?最好使用关系的 ID

azure-devops azure-cli azure-devops-rest-api
3个回答
1
投票

Azure Boards cli 扩展似乎假定 targetId 是一个工作项(如父项或子项),并且不支持其他关系)。 docs中并没有这么说,但给出的关系类型的唯一示例是父级和子级。

--关系类型

要创建的关系类型。例如:父母、孩子。

我知道基于索引的寻址并不理想,但为什么使用关系索引在实践中会成为问题?

如果您通过 获取工作项并检查该关系具有哪个索引来启动脚本,那么您可以继续通过 工作项更新删除该关系。

我看到这行不通的唯一原因是,如果有人修改工作项,使得工件链接的索引在 get 和 update 命令之间发生变化(例如删除与较低索引的关系),这看起来很严重考虑到命令之间的时间很短,这种情况不太可能发生。在下班时间或不允许其他活动的约定时间窗口执行脚本可以进一步降低风险。

如果您仍然希望验证更改是否正确执行,您也可以在脚本中自动执行此操作:

  • 第一次Get后,保存所有关系
  • 进行更新(删除与提交的关系)
  • 再次获取工作项
  • 确保关系中唯一的区别是提交关系已被删除。如果没有,发出警告/退出脚本等。

这里有一个类似的问题,可以提供进一步的见解:如何通过对 azure devops 的 HTTP 请求从子任务工作项中删除工作项关系(父级)?


1
投票

根据您的描述,我测试了az板工作项关系的Azure CLI命令| Microsoft Docs,它似乎只删除了工作项之间的关系,而不是提交链接。

我还测试了 Rest API 来删除工作项的链接,并同意整理要删除的链接的索引确实很烦人。

如果您希望删除受影响工作项的所有提交链接,Excel 插件Azure DevOps Office Integration 2019(免费)可能会有所帮助。

无论如何,我知道它不能以编程方式工作,如果您必须找出要删除的提交链接,这可能不是一个好的选择。只是友好的分享。欲了解更多信息,请参阅以下文档。

将 Azure Boards 连接到 Office 客户端以跟踪您的工作 - Azure Boards |微软文档

使用 Microsoft Excel 批量修改 Azure Boards 工作项 - Azure Boards |微软文档


0
投票

如果你一一删除链接,danielorn 推荐的基于索引的删除关系有一个问题。当每个补丁更改关系列表时,如果您从头开始遍历列表,它也会将具有较高索引的关系向下移动,从而导致索引中断。不过,逆序浏览列表效果很好。

© www.soinside.com 2019 - 2024. All rights reserved.