Как получить доступ к ответу задачи InvokeRestAPI из другого задания в конвейере Azure DevOps?
Я пытаюсь автоматизировать развертывание ресурса Elasticsearch в облаке Elastic, вызывая их REST API из конвейера Azure DevOps.
Вызов API отлично работает с задачей InvokeRestAPI, но теперь я хочу использовать информацию, которая отправляется в ответ на этот вызов API. В документации здесь говорится, что эту задачу можно использовать для вызова HTTP API и анализа ответа, но она не дает информации о том, как это сделать.
До сих пор я пытался добавить переменную в свою следующую работу на основе зависимости, но это не сработало:
- job: DeployES
dependsOn: GenerateTipTenantId
pool: server
variables:
tenantid: $[ dependencies.GenerateTipTenantId.outputs['GenerateGuid.faketenantid'] ]
steps:
- task: InvokeRESTAPI@1
name: EsRest
inputs:
<InvokeRESTAPI task inputs generated by the assistant>
- job: processDeployment
dependsOn: DeployES
pool:
vmImage: 'ubuntu-latest'
variables:
depid: $[ dependencies.DeployES.outputs['EsRest.Response.id'] ]
steps:
- script: echo $(depid)
name: echoid
Я, вероятно, мог бы заменить InvokeRestAPI "обычным" сценарием Powershell, но задачу InvokeRestAPI казалось легче настроить.
Итак, возникает вопрос: как я могу получить доступ к объекту JSON в ответе API и передать его часть следующему заданию в моем конвейере?
1 ответ
Последняя часть описания задачи:
Используйте эту задачу, чтобы вызвать HTTP API и проанализировать ответ.
относится скорее к successCriteria
опция, позволяющая использовать ответ для указания успеха или неудачи:
Критерии, определяющие, когда сдать задание. Отсутствие критериев означает, что содержание ответа не влияет на результат. Пример:- Для ответа {"status": "успешный"} выражение может иметь вид eq(root['status'], 'success'). Дополнительная информация
Поэтому, если вам нужно использовать ответ в следующей задаче, вам нужно использовать powershell, bash или любую другую задачу оболочки. Например, здесь у вас есть сценарий PowerShell, в котором я использую API для получения и изменения ReleaseVersion:
$url = "https://vsrm.dev.azure.com/thecodemanual/$env:SYSTEM_TEAMPROJECTID/_apis/Release/definitions/$($env:RELEASE_DEFINITIONID)?api-version=5.0"
$pipeline = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"}
Write-Host "Pipeline = $($pipeline | ConvertTo-Json -Depth 100)"
$buildNumber = $env:BUILD_BUILDNUMBER
$pipeline.variables.ReleaseVersion.value = $buildNumber
####****************** update the modified object **************************
$json = @($pipeline) | ConvertTo-Json -Depth 99
$updatedef = Invoke-RestMethod -Uri $url -Method Put -Body $json -ContentType "application/json" -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"}