首页 > 解决方案 > 将错误从 Azure Devops 提取到带有时间戳的状态变化的 CSV

问题描述

背景

我基本上是在做一个审查,我看到团队 A 花了多长时间来解决分配给他们的错误。我需要一个可以产生这些结果的查询,然后将其下载到 CSV 文件中。

任务

我还需要从 devops 中提取具有各自状态流('Raised'-'Ready for Test'-'in progress'-等)的 bug,以及它们相应的时间戳。因此,对于错误 xi,可以看到它在 xx/xx/xx 上被分配给成员 p,状态为“进行中”,然后在 xx/xx/xx 上由成员 p 或任何路径更改为“准备测试”各州,以及该错误的指定人员。

这类似于绩效评估。有什么方法可以使用查询来实现吗?

标签: csvazure-devopsdevopsexport-to-csv

解决方案


我从未见过从 Azure DevOps (ADO) Boards Query UI 中提取历史记录的方法。您可以查询 history,但这不是您想要做的。

也就是说,您可以通过工作项的 ADO API轻松完成此操作。下面是一个示例 PowerShell 脚本。

function Get-WorkItemRevisions {
    param (
        [Parameter(HelpMessage = 'Personal Access Token for Azure DevOps. Default=uses a pat token stored in environment variables named AZURE_DEVOPS_EXT_PAT')]
        [String] $PersonalToken = $Env:AZURE_DEVOPS_EXT_PAT,

        [Parameter(HelpMessage = 'Core uri for Azure DevOps. Default=dev.azure.com')]
        [String] $CoreServer = 'dev.azure.com',

        [Parameter(HelpMessage = 'Organization to access.')]
        [string]$Organization = 'PUT_YOUR_ORGNAME_HERE',

        [Parameter(Mandatory = $true)]
        [String] $WorkItemId,

        [Parameter(HelpMessage = 'The Azure DevOps API version to use. Default=6.0')]
        [String] $ApiVersion = '6.0'
    )
    $token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($PersonalToken)"))
    $headers = @{authorization = "Basic $token" }

    $uri = "https://$coreServer/$Organization/_apis/wit/workitems/${WorkItemId}/revisions/?api-version=$ApiVersion"
    Write-Verbose -Message "API URL: $uri"
    
    $result = Invoke-RestMethod -uri $uri -Headers $headers -Method Get
    $result
}

$bugs = @(
    '4390'
    '7399'
    '3675'
)

foreach ($bugId in $bugs) {
    $revisions = Get-WorkItemRevisions -WorkItemId $bugId -Verbose 

    $prevState = ''
    foreach ($revision in $revisions.value) {
        $id = $revision.id
        $rev = $revision.rev
        
        $changedDate = $revision.fields.'System.ChangedDate'
        $changedBy = $revision.fields.'System.ChangedBy'.displayName
        $assignedTo = $revision.fields.'System.AssignedTo'.displayName
        $state = $revision.fields.'System.State'

        # Only write to CSV if the state has changed
        if ($prevState -ne $state){
            Add-Content -Path performance-review.csv -Value "$id, $rev, $changedDate, $changedBy, $state, $assignedTo"
            $prevState = $state
        }
    }
}

为了运行此脚本,您需要做的一件事是:

  1. 生成个人访问令牌 (PAT)
  2. --either-- 将 PAT 添加到名为$Env:AZURE_DEVOPS_EXT_PAT
  3. -- 或 -- 使用参数调用Get-WorkItemRevisions函数-PersonalToken
  4. 改成PUT_YOUR_ORGNAME_HERE你的组织名,在ADO uri后面可以找到https://dev.azure.com/{orgname}

下面是上面脚本的示例输出。注意:为了清楚起见,我添加了标题行并将真实姓名更改为迪士尼角色名称。

示例输出

像这样使用 PowerShell 可能比使用 ADO Boards 查询 UI 更好,因为您可以按计划运行此脚本并将结果发布到 Slack、MS Teams、通过电子邮件发送等。您可以扩展通过使用ADO API for Query Wiql来查询错误而不是硬编码它们的脚本。

上述代码的替代方案是用于报告或将 PowerBI 连接到 ADO 数据并构建报告的 ADO API。


推荐阅读