VSTS: передать переменные сборки / выпуска в задачу скрипта Powershell
В идеале я хотел бы настроить параметры приложения Azure Web App, используя переменные сборки (в VSTS), например:
Мы выполняем наши задачи публикации, используя скрипты 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 с переданным именем переменной.
Вы также могли бы использовать группы переменных для достижения этого, таким образом поддерживая переменные, которые тесно связаны, изолированы от переменных сборки и от других групп связанных переменных. В этом ответе я показал, как легко это настроить.