在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=Task
和 State=Done
及其相应 ID 和 Urls 的所有工作项。
您应该在 $token
中输入您自己的 PAT,并将 YourOrgName
和 YourProjectName
替换为您自己的 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 的帮助。 :)
我正在尝试获取在 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=Task
和 State=Done
及其相应 ID 和 Urls 的所有工作项。
您应该在 $token
中输入您自己的 PAT,并将 YourOrgName
和 YourProjectName
替换为您自己的 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 的帮助。 :)