Azure DevOps YAML流水线如何实现发布状态同步至工作项
实现方案
完全可以通过PowerShell调用Azure DevOps REST API实现该需求,无需额外第三方插件,核心逻辑是利用YAML流水线的内置变量获取关联工作项、当前部署环境信息,调用工作项更新接口完成关联,甚至可以完美复现经典发布流水线的部署控件展示效果。
前置准备
- 给对应项目的「Build Service」账号分配工作项编辑权限,避免API调用鉴权失败
- 开启流水线的
Allow scripts to access the OAuth token选项,即可直接使用系统内置的System.AccessToken调用接口,无需单独存储个人访问令牌(PAT)
核心实现步骤
你可以直接在YAML流水线的部署阶段中加入以下PowerShell任务:
# 读取流水线内置变量,拆分关联的工作项ID列表 $workItemIdList = "$(Build.WorkItemIds)".Split(',', [System.StringSplitOptions]::RemoveEmptyEntries) # 读取当前部署环境、版本号信息 $deployEnv = "$(Release.EnvironmentName)" $deployVersion = "$(Build.BuildNumber)" $orgName = "你的Azure DevOps组织名称" $projectName = "你的项目名称" # 构造请求头 $headers = @{ Authorization = "Bearer $(System.AccessToken)" "Content-Type" = "application/json-patch+json" } # 批量更新所有关联工作项 foreach ($wiId in $workItemIdList) { $requestBody = @" [ { "op": "add", "path": "/fields/System.History", "value": "系统自动部署到 *$deployEnv* 环境,对应版本:$deployVersion" }, { "op": "replace", "path": "/fields/Custom.LastDeployEnv", "value": "$deployEnv" } ] "@ Invoke-RestMethod -Method Patch -Uri "https://dev.azure.com/$orgName/$projectName/_apis/wit/workitems/$wiId?api-version=7.1-preview.3" -Headers $headers -Body $requestBody | Out-Null }
补充说明
如果需要让工作项的部署控件正常展示YAML流水线的部署记录,只需在请求体中额外加入部署元数据的字段更新即可,效果和经典发布流水线的内置功能完全一致。
内容的提问来源于stack exchange,提问作者Robert Lamberson
相关产品推荐
相关产品推荐

