ADO CLI 无法删除标签
ADO CLI can't remove tags
我正在使用带有 az boards work-item update
命令的 Azure CLI(文档是 here)。这是一个更大的系统的一部分,该系统读取票证上的标签(除其他外),然后从该列表中删除 Ready
标签并尝试将标签设置回以将其删除。
az boards work-item update --organization $ORG --output json --id 12345 --fields System.Tags=Android
当使用 --fields System.Tags=Android
参数更新标签字段时,这用于将现有标签替换为指定的标签,例如如果票有 Android
和 Ready
标签,这将删除 Ready
标签。不过最近好像只能加标签,不能删标签。
我尝试了各种其他属性和格式,但似乎没有任何效果。有谁知道如何用我使用 CLI 指定的标签替换票证上的标签?
编辑:ADO 社区票已筹集 here
据我所知,目前还没有这样的方法可以使用 Rest API 或 Azure CLI 删除特定的工作项标签。
要解决此问题,我们需要先使用 Azure CLI/Rest API 获取工作项标签列表。然后我们可以修改标签字段并更新字段。
这是我给 运行 其余 APIs 的 powershell 示例。
$token = "PAT"
$url=" https://dev.azure.com/{organization}/{project}/_apis/wit/workitems/{workitemid}?api-version=6.0"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Get -ContentType application/json
$tags = $response.fields.'System.Tags'
echo $tags
$New = $tags -replace "tagname" -replace ""
echo $new
$url1 ="https://dev.azure.com/{organization}/{project}/_apis/wit/workitems/{workitemid}?api-version=6.0"
$body = "[
{
`"From`" : null,
`"op`": `"replace`",
`"path`": `"/fields/System.Tags`",
`"value`" : `"$new`"
}
]"
$response = Invoke-RestMethod -Uri $url1 -Headers @{Authorization = "Basic $token"} -Method PATCH -Body $body -ContentType application/json-patch+json
这是关于 Rest APIs 的文档:Work Items - Get Work Item and Work Items - Update
我可以确认 az boards work-item update
命令不再是 removing/replacing 带有传递的标签,这肯定是一个错误。请在 Developer Community 上报告,以便修复。
同时,正如@Fairy Xu 提到的,此行为使您只能选择进行 REST 调用来更新工作项。但是,您不必将整个当前设置交换为 REST 即可解决该问题。也可以通过 Azure CLI 以及使用 az rest
命令进行相同的 REST 调用!
实现方法如下:
# Get current tags on the work item; Sample response: Tag1; Tag2; Tag3
$Tags = az boards work-item show --id 456 --query 'fields.\"System.Tags\"' -o tsv
# Sample headers.json
# {
# "Authorization":"Basic OmZpYWxreG9xYnBwiZ2IyeDRyZm90d3psNmE=",
# "Content-Type":"application/json-patch+json"
# }
#
# Sample body.json
# [
# {
# "op": "replace",
# "path": "/fields/System.Tags",
# "value": "Tag1; Tag3"
# }
# ]
# Use az rest command to make the Update work item REST call
# In the response you'd see the System.Tags field showing only Tag1; Tag3
az rest --method patch --url https://dev.azure.com/{organization}/{project}/_apis/wit/workitems/456?api-version=5.1 --headers '@headers.json' --body '@body.json'
编辑:
您可以通过两种方式处理身份验证:
使用 AAD 不记名访问令牌
看来可以使用499b84ac-1321-427f-aa17-267ca6975798
作为--resource
的值来调用az rest
,如下所示:
az rest --url 'https://dev.azure.com/{organization}/{project}/_apis/wit/workitems/456?api-version=5.1' --resource 499b84ac-1321-427f-aa17-267ca6975798
使用带有 PAT 的基本身份验证
要填充授权 header,您首先必须 generate a Personal Access Token (PAT) 您的组织具有适当的范围。一旦你有了它,你必须将它转换为 Base64 字符串,如下所示:
$Username=""
$Password="<PAT>"
$Token = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $Username,$Password)))
此外,请务必包含 Content-Type
并将其设置为 application/json-patch+json
作为 header 之一,因为 az rest
默认为 application/json
。
参考文献:
- az rest - Azure CLI
- Work Items - Update 休息 API
- 使用PowerShell时注意quoting rules
- az curl or az rest for custom REST support (coverage) #7618
我正在使用带有 az boards work-item update
命令的 Azure CLI(文档是 here)。这是一个更大的系统的一部分,该系统读取票证上的标签(除其他外),然后从该列表中删除 Ready
标签并尝试将标签设置回以将其删除。
az boards work-item update --organization $ORG --output json --id 12345 --fields System.Tags=Android
当使用 --fields System.Tags=Android
参数更新标签字段时,这用于将现有标签替换为指定的标签,例如如果票有 Android
和 Ready
标签,这将删除 Ready
标签。不过最近好像只能加标签,不能删标签。
我尝试了各种其他属性和格式,但似乎没有任何效果。有谁知道如何用我使用 CLI 指定的标签替换票证上的标签?
编辑:ADO 社区票已筹集 here
据我所知,目前还没有这样的方法可以使用 Rest API 或 Azure CLI 删除特定的工作项标签。
要解决此问题,我们需要先使用 Azure CLI/Rest API 获取工作项标签列表。然后我们可以修改标签字段并更新字段。
这是我给 运行 其余 APIs 的 powershell 示例。
$token = "PAT"
$url=" https://dev.azure.com/{organization}/{project}/_apis/wit/workitems/{workitemid}?api-version=6.0"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Get -ContentType application/json
$tags = $response.fields.'System.Tags'
echo $tags
$New = $tags -replace "tagname" -replace ""
echo $new
$url1 ="https://dev.azure.com/{organization}/{project}/_apis/wit/workitems/{workitemid}?api-version=6.0"
$body = "[
{
`"From`" : null,
`"op`": `"replace`",
`"path`": `"/fields/System.Tags`",
`"value`" : `"$new`"
}
]"
$response = Invoke-RestMethod -Uri $url1 -Headers @{Authorization = "Basic $token"} -Method PATCH -Body $body -ContentType application/json-patch+json
这是关于 Rest APIs 的文档:Work Items - Get Work Item and Work Items - Update
我可以确认 az boards work-item update
命令不再是 removing/replacing 带有传递的标签,这肯定是一个错误。请在 Developer Community 上报告,以便修复。
同时,正如@Fairy Xu 提到的,此行为使您只能选择进行 REST 调用来更新工作项。但是,您不必将整个当前设置交换为 REST 即可解决该问题。也可以通过 Azure CLI 以及使用 az rest
命令进行相同的 REST 调用!
实现方法如下:
# Get current tags on the work item; Sample response: Tag1; Tag2; Tag3
$Tags = az boards work-item show --id 456 --query 'fields.\"System.Tags\"' -o tsv
# Sample headers.json
# {
# "Authorization":"Basic OmZpYWxreG9xYnBwiZ2IyeDRyZm90d3psNmE=",
# "Content-Type":"application/json-patch+json"
# }
#
# Sample body.json
# [
# {
# "op": "replace",
# "path": "/fields/System.Tags",
# "value": "Tag1; Tag3"
# }
# ]
# Use az rest command to make the Update work item REST call
# In the response you'd see the System.Tags field showing only Tag1; Tag3
az rest --method patch --url https://dev.azure.com/{organization}/{project}/_apis/wit/workitems/456?api-version=5.1 --headers '@headers.json' --body '@body.json'
编辑:
您可以通过两种方式处理身份验证:
使用 AAD 不记名访问令牌
看来可以使用
499b84ac-1321-427f-aa17-267ca6975798
作为--resource
的值来调用az rest
,如下所示:az rest --url 'https://dev.azure.com/{organization}/{project}/_apis/wit/workitems/456?api-version=5.1' --resource 499b84ac-1321-427f-aa17-267ca6975798
使用带有 PAT 的基本身份验证
要填充授权 header,您首先必须 generate a Personal Access Token (PAT) 您的组织具有适当的范围。一旦你有了它,你必须将它转换为 Base64 字符串,如下所示:
$Username="" $Password="<PAT>" $Token = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $Username,$Password)))
此外,请务必包含 Content-Type
并将其设置为 application/json-patch+json
作为 header 之一,因为 az rest
默认为 application/json
。
参考文献:
- az rest - Azure CLI
- Work Items - Update 休息 API
- 使用PowerShell时注意quoting rules
- az curl or az rest for custom REST support (coverage) #7618