Получить список задач через rest api в azure devops - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь получить список задач, которые выполнены в конкретном проекте в Azure DevOps. Я хочу использовать REST api Azure DevOps, чтобы использовать этот список в Jenkinsfile. Возможно ли это?

До сих пор я был в состоянии получить статус одной конкретной задачи (поэтому необходимо указать идентификатор), поэтому она не работает для меня очень хорошо. Я также экспериментировал с запросами и смог создать запрос в ADO, в котором перечислены задачи, находящиеся в состоянии «Готово», но я не могу найти способ получить результат запроса через API REST в Jenkinsfile. Любая помощь с этим?

Ответы [ 2 ]

2 голосов
/ 20 марта 2020

Я также экспериментировал с запросами, и мне удалось создать запрос в ADO, в котором перечислены задачи, которые находятся в состоянии «Готово», но я не могу найти способ получить результат запроса через API REST в Jenkinsfile. Любая помощь с этим?

Вы можете использовать скрипт 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)"

Он вернет все рабочие элементы, чьи Type=Task и State=Done с соответствующими им идентификаторами и URL-адресами.

Вы должны ввести свой собственный PAT в $token и заменить YourOrgName и YourProjectName с вашими собственными Azure Devops OrganizationName и ProjectName.

Что касается вызова сценария PS в jenkinsfile, вы можете проверить Поддержка Microsoft PowerShell для конвейера и Выполнение команды powershell непосредственно в трубопровод Дженкинса .

Edit1:

На веб-портале у меня есть такие мысли:

enter image description here

Затем в Почтальоне я использую тело следующим образом:

enter image description here

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

Ответ:

enter image description here

1 голос
/ 25 марта 2020

Я обновил приведенный выше скрипт, получая массив задач в конце скрипта вместо обычного 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

Ответ теперь такой:

ps1 response

Теперь я беру его, преобразовав в коллекцию и перебирая каждый элемент в jenkinsfile. Спасибо за помощь Lance Li-MSFT. :)

...