在azure devops中通过rest api获取任务列表

Get a list of tasks through rest api in azure devops

我正在尝试获取在 Azure DevOps 中的特定项目中完成的任务列表。我想使用 Azure DevOps 的 REST api 在 Jenkinsfile 中使用这个列表。可能吗?

到目前为止,我已经能够获取一个特定任务的状态(因此需要指定 ID),所以它对我来说效果不是很好。我还尝试了查询,我已经能够在 ADO 中创建查询,其中列出了处于 "Done" 状态的任务,但我找不到通过 REST api 将查询结果获取到 Jenkinsfile 的方法。 有什么帮助吗?

I also experimented with queries and i've been able to create query in ADO which list tasks that are in "Done" state but i can't find a way to get query result through REST api to Jenkinsfile. Any help with that?

您可以使用 Powershell 脚本调用其余部分 api,试试这个脚本(我用这个 rest api):

$token = "xxx"

$url="https://dev.azure.com/YourOrgName/YourProjectName/_apis/wit/wiql?api-version=5.1"

$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))

$JSON = @'
{
  "query": "SELECT [System.Id],[System.Title],[System.State] FROM workitems WHERE [System.TeamProject] = @project AND [system.WorkItemType] = 'Task' AND [System.State]='Done' "
}
'@

$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Post -Body $JSON -ContentType application/json

Write-Host "result = $($response | ConvertTo-Json -Depth 100)"

它会 return 其 Type=TaskState=Done 及其相应 ID 和 Urls 的所有工作项。

您应该在 $token 中输入您自己的 PAT,并将 YourOrgNameYourProjectName 替换为您自己的 Azure Devops OrganizationName 和 ProjectName。

关于如何在jenkinsfile中调用PS脚本,可以查看Microsoft PowerShell Support for Pipeline and .

编辑 1:

在门户网站上我有这些智慧:

然后在 Postman 中我这样使用正文:

{
  "query": "SELECT [System.Id],[System.Title],[System.State] FROM workitems WHERE [System.TeamProject] = @project AND [system.WorkItemType] = 'Task' AND [System.State] = 'Done'"
}

回复:

我升级了上面的脚本,在脚本末尾获取了一组任务,而不是常规的 json。然后,您可以将其转换为数组、列表或集合,并遍历每个对象。脚本下方:

$token = "xxx"



$url="https://dev.azure.com/YourOrgName/YourProjectName/_apis/wit/wiql?api-version=5.1""

$tokenInBasic = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))

$JSON = @'
{
  "query": "SELECT [System.Id],[System.Title],[System.State] FROM workItems WHERE [System.TeamProject] = @project AND [System.WorkItemType] = 'Task' AND [System.State] = 'Done'"
}
'@

$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $tokenInBasic"} -Method Post -Body $JSON -ContentType application/json
$listOfTasks = New-Object Collections.Generic.List[String]
ForEach( $workitem in $response.workItems ) {
  $listOfTasks.Add($workitem.id)

}
$listOfTasks = $listOfTasks -join ','
$listOfTasks

现在的反应是这样的:

现在我正在接受它,转换为集合并遍历 jenkinsfile 中的每个项目。感谢 Lance Li-MSFT 的帮助。 :)