如何获取Azure DevOps发布版本关联的工作项?
Azure DevOps发布管道获取特定版本工作项列表的实现方法
下面是两种在管道内实现的实用方案,直接就能落地:
方案一:用Azure DevOps CLI快速实现
- 在发布管道里添加一个Azure CLI任务,类型选择Azure DevOps CLI
- 借助内置系统变量和CLI命令抓取工作项,还能直接整理成可读格式,示例命令如下:
# 抓取当前发布关联的所有工作项ID RELEASE_WORK_ITEMS=$(az pipelines release show --id $(Release.ReleaseId) --org $(System.TeamFoundationCollectionUri) --project $(System.TeamProject) --query 'workItems[*].id' -o tsv) # 生成Markdown格式的工作项清单 echo "### 本次发布关联工作项清单" > work_items.md for id in $RELEASE_WORK_ITEMS; do WI_INFO=$(az boards work-item show --id $id --org $(System.TeamFoundationCollectionUri) --project $(System.TeamProject) --query '[fields["System.Title"], fields["System.State"], fields["System.AssignedTo"].displayName]' -o tsv) echo "- 工作项#$id: $(echo $WI_INFO | cut -f1) | 状态: $(echo $WI_INFO | cut -f2) | 负责人: $(echo $WI_INFO | cut -f3)" >> work_items.md done
- 注意:要给CLI任务的服务连接配置足够权限,至少需要读取发布记录和工作项的权限
方案二:用PowerShell调用REST API自定义程度更高
如果需要更灵活的格式处理或扩展逻辑,用PowerShell调用REST API是更好的选择:
- 添加一个PowerShell任务,记得在任务的「代理作业设置」里勾选「允许脚本访问OAuth令牌」,这样就能用系统自带的令牌访问API
- 示例脚本:
# 直接用系统变量获取发布和项目信息 $releaseId = $(Release.ReleaseId) $orgUrl = $(System.TeamFoundationCollectionUri) $projectName = $(System.TeamProject) $accessToken = $(System.AccessToken) # 调用API获取发布关联的工作项ID列表 $wiListUrl = "$orgUrl$projectName/_apis/release/releases/$releaseId/workitems?api-version=7.1-preview.2" $headers = @{ Authorization = "Bearer $accessToken" } $workItemRefs = Invoke-RestMethod -Uri $wiListUrl -Headers $headers -Method Get # 逐个获取工作项详情并整理 $workItemTable = @() foreach ($ref in $workItemRefs.value) { $wiDetailUrl = "$orgUrl/_apis/wit/workitems/$($ref.id)?api-version=7.1-preview.3" $wiDetails = Invoke-RestMethod -Uri $wiDetailUrl -Headers $headers -Method Get $workItemTable += [PSCustomObject]@{ ID = $ref.id Title = $wiDetails.fields.'System.Title' State = $wiDetails.fields.'System.State' Assignee = $wiDetails.fields.'System.AssignedTo'.displayName } } # 生成Markdown表格 $mdOutput = "### 本次发布工作项列表`n`n" $mdOutput += "| 工作项ID | 标题 | 状态 | 负责人 |`n" $mdOutput += "|----------|------|------|--------|`n" $workItemTable | ForEach-Object { $mdOutput += "| #$($_.ID) | $($_.Title) | $($_.State) | $($_.Assignee) |`n" } # 保存文件供后续通知使用 $mdOutput | Out-File -FilePath "$(System.DefaultWorkingDirectory)/release_workitems.md" -Encoding UTF8
最后一步:通知开发团队
不管用哪种方案生成了工作项列表,都可以加个任务把内容发出去:
- 用「发送电子邮件」任务把Markdown内容作为邮件正文发送给团队
- 或者用Microsoft Teams的Webhook任务,把表格发到指定的团队频道
内容的提问来源于stack exchange,提问作者chandu
相关产品推荐
相关产品推荐

