Есть ли способ получить 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
в задании агента.
Я могу получить runId в выходных данных:
Update2 :
возникла проблема с передачей переменной в следующую задачу
Для этой проблемы вам нужно установить переменную, как показано ниже:
Write-Host "##vso[task.setvariable variable=runId]$($result.id | ConvertTo-Json -Depth 100)"
Затем в следующей задаче вам нужно использовать только этот формат $(runId)
для получения переменной. Например:
Write-Host "$(runId)"