将错误从 Azure Devops 提取到 CSV 中,并带有带有时间戳记的状态更改

Extracting bugs from Azure Devops into CSV with their time stamped change of states

背景

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

任务

我需要从本质上提取 devops 中的错误及其各自的状态流('Raised'-'Ready for Test'-'in progress'-等),以及它们相应的时间戳。因此,对于错误 x,我可以看到它已在 xx/xx/xx 上分配给状态为 'in progress' 的成员 p,然后在 xx/xx/xx 上被成员 p 更改为 'ready for test',或任何路由各州,并指定人员处理该错误。

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

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

也就是说,您可以通过 ADO API for work items 轻松地做到这一点。下面是一个 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. generate a Personal Access Token (PAT)
  2. --或者--将 PAT 添加到名为 $Env:AZURE_DEVOPS_EXT_PAT
  3. 的环境变量中
  4. --或者-- 使用 -PersonalToken 参数调用 Get-WorkItemRevisions 函数。
  5. PUT_YOUR_ORGNAME_HERE改为您的组织名称,您可以在https://dev.azure.com/{orgname}
  6. 之后的ADO uri中找到它

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

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

上述代码的替代方法是 ADO API for reporting 或将 PowerBI 连接到您的 ADO 数据并构建报告。