Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020
添加团队或重新组织现有团队时,需要通过更新其区域路径将工作项从一个团队转移到另一个团队。 Azure DevOps 中的每个工作项都分配给一个区域路径,该路径确定哪个团队拥有该工作项,并影响工作项在任务积压和工作板上的显示方式。
“要求”类别下的工作项根据其所属的团队区域路径分配显示在团队待办事项中。 同样,将其他工作项分配给团队的地区路径可以支持基于团队所有权的查询和报告。
为什么在团队之间移动工作项
移动工作项的常见方案包括:
- 团队重组:组织重组团队或重新分配职责时
- 工作负荷均衡:重新分发工作项以平衡团队中的容量
- 技能对齐:将项目移动到具有适当专业知识的团队
- 功能所有权转让:当功能更改所有权时转移所有权
- 项目合并:将多个团队的工作合并到单个团队中
先决条件
| 类别 | 要求 |
|---|---|
| 权限 | - 若要查看、关注和编辑工作项:查看此节点中的工作项,并 编辑此节点中的工作项 权限设置为 “允许”。 默认情况下,参与者组具有这些权限。 有关详细信息,请参阅设置工作跟踪权限。 - 将标记添加到工作项:将项目级创建新标记定义权限设置为允许。 默认情况下,参与者组拥有此权限。 |
| 访问级别 |
-
项目成员。 - 将标记添加到工作项,或者查看或跟踪拉取请求:至少具有基本访问权限。 - 查看或跟踪工作项:至少具有利益干系人访问权限。 有关详细信息,请参阅 关于访问级别。 - 所有项目成员(包括 读者 组中的成员)都可以发送电子邮件,其中包含工作项。 |
| 区域路径权限 | “区域路径”节点下的查看和编辑工作项目。 有关详细信息,请参阅修改区域或迭代路径下的工作项。 |
| 配置的区域路径 | 目标团队已正确配置区域路径。 否则,在传输工作项之前设置所需的区域路径。 |
| 一致的进程模型 | 你的团队使用兼容的进程模型(继承的、托管的 XML 或本地 XML)来确保工作项的无缝移动。 |
| 备份的工作项目 | 建议在执行批量移动之前备份或导出工作项,以防止发生错误时数据丢失。 |
| 工具 | 若要使用 Azure CLI 命令:Azure DevOps CLI。 |
| 类别 | 要求 |
|---|---|
| 权限 | - 若要查看、关注和编辑工作项:查看此节点中的工作项,并 编辑此节点中的工作项 权限设置为 “允许”。 默认情况下,参与者组具有这些权限。 有关详细信息,请参阅设置工作跟踪权限。 - 将标记添加到工作项:将项目级创建新标记定义权限设置为允许。 默认情况下,参与者组拥有此权限。 |
| 访问级别 |
-
项目成员。 - 将标记添加到工作项,或者查看或跟踪拉取请求:至少具有基本访问权限。 - 查看或跟踪工作项:至少具有利益干系人访问权限。 有关详细信息,请参阅 关于访问级别。 - 所有项目成员(包括 读者 组中的成员)都可以发送电子邮件,其中包含工作项。 |
| 区域路径权限 | “区域路径”节点下的“查看”和“编辑”工作项目。 有关详细信息,请参阅修改区域或迭代路径下的工作项。 |
使用 Web 门户移动工作项
在团队之间移动多个工作项的最有效方法是在 Web 门户中进行批量编辑。
步骤 1:创建用于标识工作项的查询
创建查询以查找要移动到新团队的所有工作项:
- 导航到 问题板>查询>新查询
- 定义用于标识工作项的查询条件,例如:
- 区域路径 = 当前团队的区域路径
- 工作项类型 = 用户情景(或其他相关类型)
- 状态 = 活动(或其他相关状态)
- 运行查询以验证它是否返回正确的工作项
- 保存查询以供将来参考
步骤 2:批量编辑区域路径
将工作项移动到新团队:
为要重新分配的所有工作项创建查询。
多选属于每个团队的那些项目,并 批量编辑区域路径。
在批量编辑对话框中:
- 从字段下拉列表中选择区域路径
- 选择目标团队的区域路径
- (可选)更新其他字段,例如“分配给”或“迭代路径”
批量修改项后,批量保存它们。
步骤 3:验证转移
保存后,验证工作项现在是否显示在目标团队积压工作中:
- 导航至目标团队的待办事项
- 确认确保移动的工作项出现在正确的待办事项中
- 检查“区域路径”字段是否反映新的团队分配
使用 Azure CLI 移动工作项
可以使用 az boards 工作项更新 来通过更新其区域路径移动单个工作项。
az boards work-item update --id
[--area]
[--assigned-to]
[--description]
[--discussion]
[--fields]
[--iteration]
[--open]
[--reason]
[--state]
[--title]
参数
- id:必需。 要更新的工作项的 ID。
- area:可选。 区域的绝对路径。 示例:--area“\ProjectName\Area\AreaName”。
- assigned-to:可选。 工作项分配给的人员的名称,例如“Jamal”。
- description:可选。 工作项的说明。
- discussion:可选。 要添加到工作项中的讨论的注释。
- fields:可选。 要设置的自定义字段的空格分隔“字段=值”对。
- iteration:可选。 迭代的绝对路径。 示例:“\ProjectName\Iteration\IterationName”。
- open:可选。 在默认 Web 浏览器中打开工作项。
- reason:可选。 工作项状态的原因。
- state:可选。 工作项的状态,例如“激活”。
- title:可选。 工作项的标题。
示例
使用 Azure DevOps CLI 一次只能移动一个工作项。 在此示例中,我们移动 Fabrikam Fiber\Production Planning 区域路径下的工作项 ID=148。
az boards work-item update --id 148 --area "Fabrikam Fiber\Production Planning" --output yaml
下面的 YAML 输出提供了有关为工作项定义的各个字段的信息。
fields:
Microsoft.VSTS.Common.Priority: 2
Microsoft.VSTS.Common.StackRank: 1500000001.0
Microsoft.VSTS.Common.StateChangeDate: '2021-11-23T22:26:28.27Z'
Microsoft.VSTS.Common.ValueArea: Business
System.AreaPath: Fabrikam Fiber\Production Planning
System.AssignedTo:
_links:
avatar:
href: https://fabrikamprime.visualstudio.com/_apis/GraphProfile/MemberAvatars/aad.NDEwY2FkMDQtOWQyOS03NDFlLTk2MmEtNGZlYmU2NGE1NTM4
descriptor: aad.NDEwY2FkMDQtOWQyOS03NDFlLTk2MmEtNGZlYmU2NGE1NTM4
displayName: Jamal Hartnett
id: d291b0c4-a05c-4ea6-8df1-4b41d5f39eff
imageUrl: https://fabrikamprime.visualstudio.com/_apis/GraphProfile/MemberAvatars/aad.NDEwY2FkMDQtOWQyOS03NDFlLTk2MmEtNGZlYmU2NGE1NTM4
uniqueName: fabrikamfiber4@hotmail.com
url: https://spsprodeus27.vssps.visualstudio.com/A5d5b8da6-3db7-4829-baf9-1e500c21cc12/_apis/Identities/d291b0c4-a05c-4ea6-8df1-4b41d5f39eff
System.BoardColumn: Backlog
System.ChangedBy:
_links:
avatar:
href: https://fabrikamprime.visualstudio.com/_apis/GraphProfile/MemberAvatars/aad.NDEwY2FkMDQtOWQyOS03NDFlLTk2MmEtNGZlYmU2NGE1NTM4
descriptor: aad.NDEwY2FkMDQtOWQyOS03NDFlLTk2MmEtNGZlYmU2NGE1NTM4
displayName: Jamal Hartnett
id: d291b0c4-a05c-4ea6-8df1-4b41d5f39eff
imageUrl: https://fabrikamprime.visualstudio.com/_apis/GraphProfile/MemberAvatars/aad.NDEwY2FkMDQtOWQyOS03NDFlLTk2MmEtNGZlYmU2NGE1NTM4
uniqueName: fabrikamfiber4@hotmail.com
url: https://spsprodeus27.vssps.visualstudio.com/A5d5b8da6-3db7-4829-baf9-1e500c21cc12/_apis/Identities/d291b0c4-a05c-4ea6-8df1-4b41d5f39eff
System.ChangedDate: '2022-05-19T22:58:52.93Z'
System.CommentCount: 0
System.CreatedBy:
_links:
avatar:
href: https://fabrikamprime.visualstudio.com/_apis/GraphProfile/MemberAvatars/aad.NDEwY2FkMDQtOWQyOS03NDFlLTk2MmEtNGZlYmU2NGE1NTM4
descriptor: aad.NDEwY2FkMDQtOWQyOS03NDFlLTk2MmEtNGZlYmU2NGE1NTM4
displayName: Jamal Hartnett
id: d291b0c4-a05c-4ea6-8df1-4b41d5f39eff
imageUrl: https://fabrikamprime.visualstudio.com/_apis/GraphProfile/MemberAvatars/aad.NDEwY2FkMDQtOWQyOS03NDFlLTk2MmEtNGZlYmU2NGE1NTM4
uniqueName: fabrikamfiber4@hotmail.com
url: https://spsprodeus27.vssps.visualstudio.com/A5d5b8da6-3db7-4829-baf9-1e500c21cc12/_apis/Identities/d291b0c4-a05c-4ea6-8df1-4b41d5f39eff
System.CreatedDate: '2021-11-23T22:26:28.27Z'
System.Description: <div>This user story is for documentation purposes. </div>
System.IterationPath: Fabrikam Fiber\Release 2\Sprint 1
System.Reason: New
System.State: New
System.TeamProject: Fabrikam Fiber
System.Title: Test the Request feedback functionality
System.WorkItemType: User Story
WEF_10182DA5BCCD4CE2A43629FFBD290EF2_Kanban.Column: Backlog
id: 148
relations:
- attributes:
isLocked: false
name: Child
rel: System.LinkTypes.Hierarchy-Forward
url: https://fabrikamprime.visualstudio.com/854a3f67-9962-43d1-a968-2e5f2eb66c99/_apis/wit/workItems/152
- attributes:
isLocked: false
name: Child
rel: System.LinkTypes.Hierarchy-Forward
url: https://fabrikamprime.visualstudio.com/854a3f67-9962-43d1-a968-2e5f2eb66c99/_apis/wit/workItems/153
- attributes:
isLocked: false
name: Child
rel: System.LinkTypes.Hierarchy-Forward
url: https://fabrikamprime.visualstudio.com/854a3f67-9962-43d1-a968-2e5f2eb66c99/_apis/wit/workItems/151
- attributes:
isLocked: false
name: Child
rel: System.LinkTypes.Hierarchy-Forward
url: https://fabrikamprime.visualstudio.com/854a3f67-9962-43d1-a968-2e5f2eb66c99/_apis/wit/workItems/149
rev: 5
url: https://fabrikamprime.visualstudio.com/854a3f67-9962-43d1-a968-2e5f2eb66c99/_apis/wit/workItems/148
使用 Azure CLI 批量移动
若要使用 Azure CLI 移动多个工作项,需要编写多个单独的更新脚本。 下面是一个 PowerShell 脚本模式示例:
# Example: Move multiple work items to a new area path
$workItemIds = @(148, 149, 150, 151)
$newAreaPath = "Fabrikam Fiber\Production Planning"
foreach ($id in $workItemIds) {
az boards work-item update --id $id --area $newAreaPath
Write-Host "Moved work item $id to $newAreaPath"
}
移动工作项的最佳做法
在团队之间移动工作项时,请考虑以下准则:
计划搬迁
- 通信:在移动工作项之前通知受影响的团队成员
- 计时:在冲刺边界期间移动项目以最大程度地减少中断
- 依赖项:在移动之前检查工作项之间的依赖关系
- 容量:确保目标团队具有额外的工作容量
移动期间
- 批处理:将相关工作项一起移动以维护上下文
- 保留历史记录:移动项会保留其历史记录和关系
- 更新分配:考虑将工作项重新分配给目标团队的成员
- 查看迭代:如果团队使用不同的冲刺计划,请更新迭代路径
移动之后
- 验证可见性:确认工作项显示在正确的团队积压工作上
- 更新文档:更新引用已移动项的任何团队文档
- 查看报告:检查团队报表和仪表板是否反映更改
- 跟进:确保团队成员知道已转移的工作
故障排除和验证
将工作项从一个团队移到另一个团队后,如果未看到工作项,请执行以下步骤:
常见问题和解决方案
| 問题 | 解决方案 |
|---|---|
| 工作项未出现在待办事项 | 验证区域路径是否与团队配置的区域路径匹配 |
| 移动期间的权限错误 | 检查你是否具有源和目标区域路径的“编辑”权限 |
| 冲刺中缺少的工作项 | 更新迭代路径以匹配目标团队的冲刺计划 |
| 筛选器隐藏工作项 | 查看积压工作项筛选器和工作项类型设置 |
验证步骤
- 刷新:如果新添加的工作项未显示,请刷新面板或选择显示更多项。
- 确认团队:检查您是否选择了正确的团队,以确保项目显示在待办事项列表中。
- 验证区域路径:验证移动的工作项是否分配给与团队积压工作对应的正确区域路径。 每个团队都有特定的区域路径,用于确定哪些工作项出现在待办事项列表上。 此验证对于确保积压工作中的可见性至关重要。
- 验证迭代路径:检查该冲刺的迭代路径。 冲刺积压工作仅显示分配给所选冲刺的迭代路径的工作项。
- 验证工作项类型和筛选器:查看积压工作项筛选器并确保工作项类型具有正确的分类以显示所有相关项目。
有关详细信息,请参阅 创建积压工作。
大规模移动的注意事项
移动多个工作项或重新组织多个团队时:
规划注意事项
- 影响评估:分析哪些报表、仪表板和查询将受到影响
- 变更管理:为受影响的利益干系人制定沟通计划
- 回滚计划:准备一个计划,以在出现问题时撤消更改
- 测试:首先使用少量工作项测试移动过程
执行策略
- 分阶段方法:分阶段移动工作项,而不是一次性移动工作项
- 非工作时间执行:在低活动期间执行大型操作
- 监视:注意批量操作期间的性能影响
- 验证:在继续下一阶段之前验证每个阶段
备用方法
移动团队而不是工作项
有时,重新配置团队区域路径而不是移动单个工作项会更高效:
- 当团队的大部分工作项需要移动时
- 从组织的角度来看,重新组织区域路径更合理。
- 当工作项量非常大时
使用查询进行渐进过渡
创建查询以逐步转换工作项:
- 按创建日期筛选以先移动较新的项
- 使用工作项状态单独移动已完成的项目
- 按工作项类型进行分组以实现系统性转换