如何为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
相关产品推荐
相关产品推荐

