it-swarm.com.ru

VSTS: передать переменные сборки / выпуска в задачу скрипта Powershell

В идеале я хотел бы настроить параметры приложения Azure Web App, используя переменные сборки (в VSTS), например:

VSTS Build

Мы выполняем наши задачи публикации, используя скрипты Powershell. Для настройки параметров приложения можно использовать следующий скрипт:

param($websiteName, $appSettings)
Set-AzureWebsite -Name $websiteName -AppSettings $appSettings

Я мог бы передать эти переменные сборки вручную в задачу сборки скрипта Powershell, например, так:

PrepareAppSettings.ps1 -websiteName "MyWebApp" -appsettings @{"MyConnectionString" = $(MyConnectionString);"MyRandomService" = $(MyRandomService);"MyRandomServiceClient"=$(MyRandomServiceClient);"MyRandomServicePassword"=$(MyRandomServicePassword)}

Есть ли способ передать все переменные сборки в сценарий без необходимости явного указания каждой из них в хеш-таблице?

37
Dave New

Переменные сборки автоматически передаются всем сценариям PowerShell как переменные среды.

Так что если вы определили переменную myVar в разделе Variables. Вы можете получить к нему доступ как $env:myVar в вашем сценарии. Здесь следует отметить, что . преобразуется в _. Например, если ваша переменная myVar.config, вы получите к нему доступ в своем скрипте как $env:myVar_config.

Доступные переменные также включают в себя такие переменные, как имя ветви, номер сборки и т.д. Чтобы увидеть все доступные переменные, запустите определение фиктивной сборки/выпуска и добавьте задачу PowerShell со встроенным типом и выполните Get-ChildItem Env:. Это покажет вам все доступные переменные окружения, и вы сможете увидеть все ваши пользовательские переменные.

Более подробная информация доступна здесь

75
Harshil Lodhi

Здесь стоит упомянуть, что секретные переменные не передаются в сценарии как переменные среды (env: В PS). Так доступно только если передано в качестве параметров для скрипта, например. -MyPassword $(Password). Смотрите https://docs.Microsoft.com/en-us/vsts/pipelines/build/variables?view=vsts&tabs=batch#secret-variables

6
Artyom

Переменные уже были переданы в сценарий PowerShell при запуске сборки. Если я правильно понимаю ваш вопрос, вы хотите использовать эти переменные вместе, а не указывать их по очереди, как показано ниже:

PrepareAppSettings.ps1 -websiteName "MyWebApp" -appsettings $(AllVariables)

Тогда нет никакого способа сделать это.

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

VariableName: MyRandomService | Значение: "MyRandomService" = xxxxxxxx

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

3
Eddie Chen - MSFT