Dynami c имя переменной в конвейере VSTS (Azure DevOps) - PullRequest
0 голосов
/ 25 мая 2020

У меня есть переменная конвейера с именем TestVariable.

Я могу легко получить доступ к этой переменной из сценария PS следующим образом:

write-host $(TestVariable)

Но если имя этой переменной было динамическим c, есть ли способ получить доступ к значению переменной из PS?

Например, имя переменной будет go в строковой переменной. Я пробовал эти комбинации в качестве экспериментов ... они просто возвращают имя переменной, а не значение (что неудивительно):

$varname="TestVariable"

write-host $($varname)
write-host $("$varname")
write-host $"($varname)"
write-host $("($varname)")

Думаю, ответ отрицательный, но я хочу быть уверенным. Любая помощь очень ценится!

Изменить - примечание

Оба ответа отвечают на вопрос, но не решают мою проблему. Попробовав решения, я понял, что пропустил дополнительное осложнение, ответы на которое, к сожалению, не помогают. Обращаю внимание на тот случай, если кто-то попытается сделать что-то подобное.

Дополнительная сложность заключается в том, что значение переменной устанавливается во время выпуска (я пытаюсь получить доступ к выходным переменным шаблона ARM).

Я думал, что смогу задействовать API и получить «живое» значение переменной, но, к сожалению, данные о выпуске не существуют (из API) до его завершения.

Итак, когда я вызываю это во время выпуск:

https://vsrm.dev.azure.com/ {company} / {project} / _ apis / release / Release / $ ($ releaseId)? api-version = 5.0

Я получаю «Выпуск с ID 38 не существует».

Ответы [ 2 ]

2 голосов
/ 26 мая 2020

Dynami c имя переменной в конвейере VSTS (Azure DevOps)

Согласитесь с Krzysztof Madej. Не существует нестандартного способа добиться этого.

Это потому, что вложенные переменные (например, $($varname) еще не поддерживаются в конвейерах сборки.

Для решения В этой проблеме вы можете использовать Определения - Получить , чтобы получить значение переменной Dynami c:

GET https://dev.azure.com/{organization}/{project}/_apis/build/definitions/{definitionId}?api-version=5.1

Ниже мой тестовый сценарий PowerShell:

$varname="TestVariable"

$url = "https://dev.azure.com/YourOrganizationName/YourtProjectName/_apis/build/definitions/<definitionsId>?api-version=5.0"

Write-Host "URL: $url"
$pipeline = Invoke-RestMethod -Uri $url -Headers @{
    Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}


$VFDV= $pipeline.variables.$varname.value


Write-Host This is Value For Dynamic Variable: $VFDV

enter image description here

Результат:

enter image description here

Надеюсь, это поможет.

1 голос
/ 25 мая 2020

Это невозможно напрямую в YAML, но вы можете использовать, например, az cli. С его помощью вы можете программно установить имя переменной и получить ее значение

$variableName = "some"

az pipelines variable list --org "https://dev.azure.com/thecodemanual" --project "DevOps Manual" --pipeline-name "DevOps Manual-CI" --query ($variableName + '.value')

$variableName = "test"

az pipelines variable list --org "https://dev.azure.com/thecodemanual" --project "DevOps Manual" --pipeline-name "DevOps Manual-CI" --query ($variableName + '.value')

Теперь вы можете использовать этот код в задаче PowerShell для получения значения переменной.

Здесь у вас есть информация, как установить расширение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...