【问题标题】:Get a list of tasks through rest api in azure devops通过 azure devops 中的 rest api 获取任务列表
【发布时间】:2020-03-19 10:50:38
【问题描述】:

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

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

【问题讨论】:

  • 听起来很像this question。不同的是你可能需要"result":"succeeded"
  • 您好 konpro11,这个问题有更新吗?

标签: azure-devops azure-devops-rest-api


【解决方案1】:

我还尝试了查询,我已经能够在 ADO 列出了处于“完成”状态但我找不到方法的任务 通过 REST api 获取查询结果到 Jenkinsfile。任何帮助 那个?

你可以使用Powershell脚本调用rest 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)"

它将返回Type=TaskState=Done 的所有WorkItems 及其对应的ID 和Urls。

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

jenkinsfile中如何调用PS脚本,可以查看Microsoft PowerShell Support for PipelineExecuting powershell command directly in jenkins pipeline

编辑1:

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

然后在 Postman 中我使用这样的 body:

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

回复:

【讨论】:

  • 感谢您的回复。我尝试使用上面的脚本,但我得到 401 错误,所以错误的授权。我想知道 $token 变量是否也应该只包含 PAT 或用户名。
  • 确保您的帐户有权更改工作项,然后create a pat 拥有完全访问权限以再次进行测试。
  • @konpro11 $token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 应该可以工作,并且如果具有完全访问权限的 pat 有效,而您的另一个 pat 无效。您第一次拍的问题结果需要更多权限,请告诉我您选择了哪些权限。
  • 是的,它现在起作用了,结果证明我输入了错误的令牌。但是,我仍然收到 401 错误,但这一次它也返回了结果。首先是错误,然后是结果。知道为什么吗?此外,对于每个工作项,它都会返回 id 和 url。在列表中仅获取 id 的最简单方法是什么?
  • 我还检查了一些因此而被翻转的项目。其中一些不处于 Done 状态,还有“In Progress”和“To Do”状态。
【解决方案2】:

我已经升级了上面的脚本,在脚本末尾得到了一系列任务,而不是常规的 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 的帮助。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多