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)}

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

3 ответа

Решение

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

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

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

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

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

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

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

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

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

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

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

Вы также могли бы использовать группы переменных для достижения этого, таким образом поддерживая переменные, которые тесно связаны, изолированы от переменных сборки и от других групп связанных переменных. В этом ответе я показал, как легко это настроить.

Другие вопросы по тегам