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

如何在Azure Pipelines中获取工作项状态并替换XML文件变量

实现Azure Pipelines自动获取工作项状态并替换XML变量

一、获取工作项状态并设置为管道变量

通过Azure DevOps REST API获取工作项状态,再将其设置为管道变量供后续任务使用。以下分两种场景给出实现脚本:

场景1:指定特定工作项ID

如果明确目标工作项ID,可直接传入脚本:

# 配置参数
$workItemId = "1234" # 替换为目标工作项ID,也可通过管道参数传入如$(TargetWorkItemId)
$orgUrl = "$(System.TeamFoundationCollectionUri)"
$projectName = "$(System.TeamProject)"
$token = "$(System.AccessToken)"

# 构建请求头
$headers = @{
    "Authorization" = "Bearer $token"
    "Content-Type" = "application/json"
}

# 调用REST API获取工作项详情
$apiUrl = "$orgUrl/$projectName/_apis/wit/workitems/$workItemId?api-version=7.1-preview.3"
$workItem = Invoke-RestMethod -Uri $apiUrl -Headers $headers -Method Get

# 提取状态并设置为管道变量
$workItemState = $workItem.fields.'System.State'
Write-Host "##vso[task.setvariable variable=WorkItemState;]$workItemState"

场景2:自动获取管道关联的工作项

如果管道由提交或PR触发,可自动获取关联的工作项并提取状态:

$orgUrl = "$(System.TeamFoundationCollectionUri)"
$projectName = "$(System.TeamProject)"
$token = "$(System.AccessToken)"
$headers = @{
    "Authorization" = "Bearer $token"
    "Content-Type" = "application/json"
}

# 区分PR触发和构建触发场景
if ("$(System.PullRequest.PullRequestId)" -ne "") {
    # PR触发:直接获取关联的工作项ID列表
    $workItemIds = "$(System.PullRequest.WorkItemIds)" -split ","
} else {
    # 构建触发:获取当前构建关联的工作项
    $buildId = "$(Build.BuildId)"
    $apiUrl = "$orgUrl/$projectName/_apis/build/builds/$buildId/workitems?api-version=7.1-preview.3"
    $relatedWorkItems = Invoke-RestMethod -Uri $apiUrl -Headers $headers -Method Get
    $workItemIds = $relatedWorkItems.value.id
}

# 提取第一个关联工作项的状态(可根据需求调整逻辑)
if ($workItemIds.Count -gt 0) {
    $workItemId = $workItemIds[0]
    $apiUrl = "$orgUrl/$projectName/_apis/wit/workitems/$workItemId?api-version=7.1-preview.3"
    $workItem = Invoke-RestMethod -Uri $apiUrl -Headers $headers -Method Get
    $workItemState = $workItem.fields.'System.State'
    Write-Host "##vso[task.setvariable variable=WorkItemState;]$workItemState"
} else {
    Write-Warning "未找到与当前管道关联的工作项"
}

二、替换XML文件中的对应变量

假设XML文件中存在占位符(比如<WorkItemState>WORK_ITEM_STATE_PLACEHOLDER</WorkItemState>),可通过PowerShell脚本将其替换为上面获取的WorkItemState变量值:

# 配置路径和占位符
$xmlFilePath = "./path/to/your/config.xml" # 替换为实际XML文件路径
$placeholder = "WORK_ITEM_STATE_PLACEHOLDER" # 替换为XML中的实际占位符

# 读取并替换内容
$xmlContent = Get-Content $xmlFilePath -Raw
$updatedContent = $xmlContent -replace $placeholder, "$(WorkItemState)"

# 写回XML文件
Set-Content $xmlFilePath -Value $updatedContent -Encoding UTF8

注意事项

  • 确保管道使用的System.AccessToken拥有读取工作项的权限(默认情况下,管道服务账号已具备该权限)。
  • 如果XML中的占位符是类似$(WorkItemState)的格式,需转义正则表达式特殊字符,替换逻辑改为:$xmlContent -replace '\$\(WorkItemState\)', "$(WorkItemState)"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 13:01:43