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

如何在经典发布成功部署至指定阶段后为构建添加标签

替代Artefact Tagger任务实现构建自动标签管理

核心实现方案

用PowerShell任务调用Azure DevOps REST API,完成「移除旧标签→添加新标签」的流程,确保每个构建仅保留对应环境的最新标签。

1. 添加PowerShell任务到目标阶段

在需要触发标签操作的[Env]阶段末尾,添加PowerShell任务,并设置任务为「仅在阶段成功时运行」。

2. 内联脚本代码

脚本会自动处理指定构件的标签更新,按需替换占位符即可:

# 基础配置
$collectionUri = "$(System.TeamFoundationCollectionUri)"
$projectName = "$(System.TeamProject)"
$targetTag = "Latest-$(Env)" # 自定义标签格式,比如Latest-Prod
$accessToken = "$(System.AccessToken)"

# === 处理单个构件(示例:构件名称为MyApp) ===
$buildId = "$(Release.Artifacts.MyApp.BuildId)"
# 移除旧标签(不存在则静默跳过)
$removeTagUrl = "$collectionUri$projectName/_apis/build/builds/$buildId/tags/$targetTag`?api-version=7.1-preview.1"
Invoke-RestMethod -Uri $removeTagUrl -Method Delete -Headers @{Authorization = "Bearer $accessToken"} -ErrorAction SilentlyContinue
# 添加新标签
$addTagUrl = "$collectionUri$projectName/_apis/build/builds/$buildId/tags`?api-version=7.1-preview.1"
$body = @($targetTag) | ConvertTo-Json
Invoke-RestMethod -Uri $addTagUrl -Method Post -Headers @{Authorization = "Bearer $accessToken"; "Content-Type" = "application/json"} -Body $body

3. 多构件处理

如果发布包含多个构件,复制上述构件处理代码块,修改Release.Artifacts.<ArtifactName>.BuildId中的<ArtifactName>即可,比如:

# 处理第二个构件MyService
$buildId2 = "$(Release.Artifacts.MyService.BuildId)"
$removeTagUrl2 = "$collectionUri$projectName/_apis/build/builds/$buildId2/tags/$targetTag`?api-version=7.1-preview.1"
Invoke-RestMethod -Uri $removeTagUrl2 -Method Delete -Headers @{Authorization = "Bearer $accessToken"} -ErrorAction SilentlyContinue
$addTagUrl2 = "$collectionUri$projectName/_apis/build/builds/$buildId2/tags`?api-version=7.1-preview.1"
Invoke-RestMethod -Uri $addTagUrl2 -Method Post -Headers @{Authorization = "Bearer $accessToken"; "Content-Type" = "application/json"} -Body $body

4. 权限配置

确保构建服务账户拥有编辑构建权限:

  • 进入项目设置 → 权限 → 构建权限
  • 找到「构建服务(<项目名称>)」账户,赋予「编辑构建」权限

关键说明

  • -ErrorAction SilentlyContinue:避免因旧标签不存在导致脚本中断
  • API版本7.1-preview.1为当前稳定支持标签操作的版本,可根据Azure DevOps版本调整
  • 标签命名可自定义,便于后续在发布管道中按标签筛选构建

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 16:50:08