Azure DevOps Server 2022无法设置看板泳道条件的问题排查
Azure DevOps Server 2022泳道配置问题
核心问题
使用Azure DevOps Server 2022,拥有团队和项目集合管理员权限,在项目>看板>设置图标>设置>泳道页面添加泳道时,看不到「添加条件」选项。已确认:
- 服务器版本为最新版
- 具备团队及项目集合管理员权限
- 使用Win11最新版Edge浏览器
还遗漏了哪些排查方向?
补充信息(2023.12.21)
目前怀疑工作区域(Work Areas)是问题根源:环境中有3个工作区域,脚本URI未按该属性参数化;泳道仅在其中一个看板上配置,将工作项移至无泳道配置的其他工作区域后,脚本输出无变化。
这是否是问题来源?如何在脚本中指定目标工作区域?
脚本代码
# update-Swimlane.ps1 param ( [Parameter(Mandatory=$true)] [string]$id = $null ) $server = "devops.huhs.harvard.edu" # Azure DevOps Server名称或IP $collection = "HUHS_IS" $project = "TEMP-JIRA-MIGRATION" $baseUri = "https://$server/$collection/$project/_apis/wit/wiql?api-version=7.0" $pat = Get-Content .\rawpat.txt -Raw # 个人访问令牌 $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($pat)")) $boardUri = "https://$server/$collection/$project/_apis/work/boards/Issues?api-version=7.0" $responseGet = Invoke-RestMethod -Uri $boardUri -Method Get -Headers @{Authorization = ("Basic {0}" -f $base64AuthInfo) } $extensionFieldName = $responseGet.fields.rowField.referenceName $uri = "https://$server/$collection/$project/_apis/wit/workitems/$($id)?api-version=7.0" $result = Invoke-RestMethod -Uri $uri -Method GET -Headers @{Authorization = ("Basic {0}" -f $base64AuthInfo) } $SystemBoardLane = $result.fields.'System.BoardLane' $KanbanRowLane = $result.fields.$extensionFieldName $tags = $result.fields.'System.Tags' -split "\s*;\s*" $state = $result.fields.'System.State' $newBoardLane = 'CRM' # 仅在需要时更新(检查System.BoardLane,而非WEF_[guid]_KanbanRowLane) if ($newBoardLane -and $newBoardLane -ne $SystemBoardLane) { echo "Before:" # 来自上方调用 echo " System.State: $state" echo " Tags: $tags" echo " System.BoardLane: $SystemBoardLane" echo " KanbanRowLane: $KanbanRowLane" echo "" echo "Changing $extensionFieldName to $newBoardLane" $body = @" [ { "op": "add", "path": "/fields/$extensionFieldName", "from": null, "value": "$newBoardLane" } ] "@ $result = Invoke-RestMethod -Uri $uri -Method Patch -Body $body -ContentType "application/json-patch+json" -Headers @{Authorization = ("Basic {0}" -f $base64AuthInfo) } echo "" echo "Tweaking System.State" # 选择当前状态之外的其他活跃状态 if ($state -ne 'Selected for Development') { $newState = 'Selected for Development'} if (-not $newState -and $state -ne 'On Hold') { $newState = 'On Hold'} if (-not $newState -and $state -ne 'Doing') { $newState = 'Doing'} echo "- change to $newState" $body = @" [ { "op": "add", "path": "/fields/System.State", "value": "$newState" } ] "@ $result = Invoke-RestMethod -Uri $uri -Method Patch -Body $body -ContentType "application/json-patch+json" -Headers @{Authorization = ("Basic {0}" -f $base64AuthInfo) } echo "- change back to $state" $body = @" [ { "op": "add", "path": "/fields/System.State", "value": "$state" } ] "@ $result = Invoke-RestMethod -Uri $uri -Method Patch -Body $body -ContentType "application/json-patch+json" -Headers @{Authorization = ("Basic {0}" -f $base64AuthInfo) } echo "" echo "After:" $result = Invoke-RestMethod -Uri $uri -Method GET -Headers @{Authorization = ("Basic {0}" -f $base64AuthInfo) } $SystemBoardLane = $result.fields.'System.BoardLane' $KanbanRowLane = $result.fields.$extensionFieldName $tags = $result.fields.'System.Tags' -split "\s*;\s*" echo " System.State: $state" echo " Tags: $tags" echo " System.BoardLane: $SystemBoardLane" echo " KanbanRowLane: $KanbanRowLane" echo " Expected lane: $newBoardLane" } else { echo "No change needed: $SystemBoardLae and $KanbanRowLane already $newBoardLane" }
脚本执行输出
PS F:\DevTeam\Project_Management\Projects\Jira_to_DevOps_Migration> .\update-Swimlane.ps1 12770 Before: System.State: Selected for Development Tags: CRM System.BoardLane: KanbanRowLane: CRM Changing WEF_5DD75A5340614097AADDCAFDEA91A637_Kanban.Lane to CRM Tweaking System.State - change to On Hold - change back to Selected for Development After: System.State: Selected for Development Tags: CRM System.BoardLane: KanbanRowLane: CRM Expected lane: CRM
问题解答
一、找不到「添加条件」选项的排查方向
看板类型限制
Azure DevOps Server中,只有**敏捷看板(Agile)**支持条件泳道,Scrum看板默认不提供此功能。确认当前看板对应的项目流程模板是否为Agile。团队上下文错误
泳道配置是团队级设置,而非项目级。确保你切换到的是正确的团队上下文——即使是项目集合管理员,若当前选中的团队没有关联该看板,也无法看到完整配置选项。泳道配置模式
若当前泳道设置为「基于字段」模式,「添加条件」选项会被隐藏。检查看板设置中是否将泳道切换为「基于查询/条件」模式,两种模式无法同时启用。缓存或浏览器问题
虽然已确认浏览器版本,但可尝试:- 清除浏览器缓存并重启
- 使用隐身窗口访问
- 检查是否有浏览器扩展干扰页面加载
项目流程自定义限制
若项目流程被自定义修改,可能移除了条件泳道的支持。通过项目设置>流程查看当前工作项类型的配置,确认是否保留了泳道字段的关联设置。
二、工作区域相关疑问解答
工作区域是否是问题来源?
是的,工作区域(Work Areas)会影响看板的工作项范围:- 每个看板默认关联特定的工作区域,只有属于该区域的工作项才会显示在看板上
- 若脚本修改的工作项不在看板关联的工作区域内,即使修改了泳道字段,看板也不会刷新显示,且脚本输出可能无变化(因为字段本身已正确设置)
如何在脚本中指定目标工作区域?
- 获取工作区域ID:调用
GET https://{server}/{collection}/{project}/_apis/wit/classificationnodes/Areas?api-version=7.0接口,获取目标工作区域的id或path。 - 修改工作项的区域路径:在脚本的Patch请求中添加区域路径字段的更新操作,示例:
{ "op": "add", "path": "/fields/System.AreaPath", "value": "TEMP-JIRA-MIGRATION/目标工作区域名称" } - 关联看板与工作区域:若需要让看板覆盖多个工作区域,可在看板设置中调整「工作项查询」,将区域路径作为查询条件之一。
- 获取工作区域ID:调用
内容的提问来源于stack exchange,提问作者Richard Wells
相关产品推荐
相关产品推荐

