You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Azure DevOps Release自动添加标签

如何在Azure DevOps Release部署期间自动添加Release标签

你遇到的PUT请求无效问题,根源在于Azure DevOps的Release API中,PUT需要提交完整的Release对象(包含所有必填字段),否则会忽略部分更新。正确的做法是使用PATCH请求仅更新tags字段,或者用Azure DevOps CLI简化操作。

以下是两种可行的实现方法:

方法1:使用REST API的PATCH请求

通过PATCH请求可以只更新Release的标签属性,无需提交完整对象。下面是PowerShell和Bash的脚本示例:

PowerShell脚本示例

# 配置参数
$orgName = "你的组织名称"
$projectName = "你的项目名称"
$releaseId = "$(Release.ReleaseId)" # 自动获取当前Release ID
$pat = "你的PAT令牌" # 需要具备Release编辑权限
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$pat"))

# 定义要添加的新标签
$newTag = "deployed-$(Get-Date -Format 'yyyyMMdd-HHmm')"

# 获取当前Release的现有标签
$getReleaseUrl = "https://vsrm.dev.azure.com/$orgName/$projectName/_apis/release/releases/$releaseId?api-version=7.0"
$currentRelease = Invoke-RestMethod -Uri $getReleaseUrl -Headers @{Authorization = "Basic $base64AuthInfo"} -Method Get

# 合并并去重标签
$updatedTags = $currentRelease.tags + $newTag | Select-Object -Unique

# 构造PATCH请求体
$patchBody = @{ tags = $updatedTags } | ConvertTo-Json

# 发送PATCH请求更新标签
$patchReleaseUrl = "https://vsrm.dev.azure.com/$orgName/$projectName/_apis/release/releases/$releaseId?api-version=7.0"
Invoke-RestMethod -Uri $patchReleaseUrl -Headers @{Authorization = "Basic $base64AuthInfo"} -Method Patch -Body $patchBody -ContentType "application/json"

Bash脚本示例

# 配置参数
ORG_NAME="你的组织名称"
PROJECT_NAME="你的项目名称"
RELEASE_ID="${RELEASE_RELEASEID}" # 自动获取当前Release ID
PAT="你的PAT令牌"
AUTH_HEADER="Authorization: Basic $(echo -n ":$PAT" | base64)"

# 定义要添加的新标签
NEW_TAG="deployed-$(date +%Y%m%d-%H%M)"

# 获取当前Release的现有标签
CURRENT_TAGS=$(curl -s -H "$AUTH_HEADER" "https://vsrm.dev.azure.com/$ORG_NAME/$PROJECT_NAME/_apis/release/releases/$RELEASE_ID?api-version=7.0" | jq '.tags')

# 合并标签并去重
UPDATED_TAGS=$(echo "$CURRENT_TAGS" | jq --arg new_tag "$NEW_TAG" '. + [$new_tag] | unique')

# 发送PATCH请求
curl -X PATCH -H "$AUTH_HEADER" -H "Content-Type: application/json" -d "{\"tags\": $UPDATED_TAGS}" "https://vsrm.dev.azure.com/$ORG_NAME/$PROJECT_NAME/_apis/release/releases/$RELEASE_ID?api-version=7.0"

方法2:使用Azure DevOps CLI

如果部署环境已安装Azure CLI并添加az devops扩展,用CLI命令会更简洁:

PowerShell/Bash通用命令

# 登录Azure DevOps(未登录时执行)
az devops login --organization https://dev.azure.com/$ORG_NAME

# 为当前Release添加标签
az pipelines release update --id $(Release.ReleaseId) --project "$PROJECT_NAME" --add-tags "tag1,tag2,deployed-prod"

注意事项

  • PAT需要具备Release管理的编辑权限(至少能编辑目标Release)
  • 预定义变量$(Release.ReleaseId)(Bash中可用${RELEASE_RELEASEID})会自动填充当前运行的Release ID,无需手动指定
  • 添加多个标签时,CLI用逗号分隔;API直接将标签加入数组即可
  • 务必使用PATCH而非PUT:PUT要求提交完整的Release对象,容易覆盖未指定属性,PATCH仅更新指定字段,更安全

内容的提问来源于stack exchange,提问作者Alex Planchon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 18:28:34