Azure DO: Получить идентификатор тестового прогона из задачи результатов Publi sh - PullRequest
0 голосов
/ 10 января 2020

Я использую конвейер Azure DO для запуска теста, и в итоге у меня есть задача с результатами теста Publi sh. Задача выдает ссылку на результаты теста, которая выглядит примерно так: https://.../.../.../.../Runs?runId=1031864&_a=runCharts. Есть ли способ получить runId (1031864 в примере) или всю ссылку, чтобы использовать ее в качестве переменной в следующих задачах? Я попытался назначить runId в переменных выпуска и передать его в следующих задачах, что не дает результата. Может ли кто-нибудь помочь? Заранее спасибо ?

1 Ответ

1 голос
/ 13 января 2020

Есть ли способ получить runId или целую ссылку, чтобы использовать ее в качестве переменной в следующих задачах?

Для этой проблемы вы можете вызвать Runs - List API со скриптом в задаче powershell для получения списка тестовых прогонов.

GET https://dev.azure.com/{organization}/{project}/_apis/test/runs?api-version=5.1

Затем нам нужно получить последний тестовый runId, потому что возвращаемый результат - это последний тестовый прогон внизу, поэтому нам нужно отсортировать возвращаемые результаты в порядке убывания.

Мы могли бы получить список тестовых прогонов, сортировка по убыванию результата по идентификатору, поскольку последний тестовый прогон имеет наибольший идентификатор. Тогда получите первый элемент результата.

Ниже приведен пример сценария PowerShell, для получения подробной информации, вы можете обратиться к этому кейс .

$testRuns = Invoke-RestMethod -Uri "https://dev.azure.com/{organization}/{project}/_apis/test/runs?api-version=5.1" -Headers $headers -Method Get 

$testRunsIdSorted = $testRuns.value | sort-object id -Descending

$mostRecentTestRun = Invoke-RestMethod -Uri "https://dev.azure.com/{organization}/{project}/_apis/test/runs/$($testRunsIdSorted[0].id)?api-version=5.1" -Headers $headers -Method Get 

После получения mostRecentTestRun, мы можем использовать скрипт ##vso[task.setvariable variable=mostRecentTestRun;isOutput=true]$mostRecentTestRun ", чтобы вывести его в следующую задачу.

Обновление :

Вот мой полный сценарий в задаче powershell:

$url = 'https://dev.azure.com/{orgName}/{proName}/_apis/test/runs?api-version=5.1';

$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"} -Method Get

$testRunsIdSorted = $response.value | sort-object id -Descending

Write-Host "results = $($testRunsIdSorted | ConvertTo-Json -Depth 100)"

$result = Invoke-RestMethod -Uri https://dev.azure.com/{org}/{pro}/_apis/test/runs/$($testRunsIdSorted[0].id)?api-version=5.1 -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"} -Method Get

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

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

Для Для этой аутентификации вам нужно выбрать опцию Allow scripts to access the OAuth token в задании агента.

enter image description here

Я могу получить runId в выходных данных:

enter image description here

Update2 :

возникла проблема с передачей переменной в следующую задачу

Для этой проблемы вам нужно установить переменную, как показано ниже:

Write-Host "##vso[task.setvariable variable=runId]$($result.id | ConvertTo-Json -Depth 100)"

Затем в следующей задаче вам нужно использовать только этот формат $(runId) для получения переменной. Например:

Write-Host "$(runId)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...