Reputation: 40092
Ideally, I would want to configure our Azure Web App application settings using build variables (on VSTS), for example:
We perform our publish tasks using Powershell scripts. In order to set app settings, the following script could be used:
param($websiteName, $appSettings)
Set-AzureWebsite -Name $websiteName -AppSettings $appSettings
I could pass these build variables manually into a Powershell script build task, like so:
PrepareAppSettings.ps1 -websiteName "MyWebApp" -appsettings @{"MyConnectionString" = $(MyConnectionString);"MyRandomService" = $(MyRandomService);"MyRandomServiceClient"=$(MyRandomServiceClient);"MyRandomServicePassword"=$(MyRandomServicePassword)}
Is there a way to pass all build variables into a script without having to explicitly specifying each one in a hash table?
Upvotes: 45
Views: 39752
Reputation: 4596
You could have also used variable groups to achieve this, thus maintaining variables that are closely related, isolated from the build variables and from other groups of related variables. I have shown how to easily set this up in this answer.
Upvotes: 0
Reputation: 3571
It is worth mentioning here, that secret variables are not passed into scripts as environment variables (env:
in PS). So accessible only if passed as parameters for a script, eg. -MyPassword $(Password)
. See https://learn.microsoft.com/en-us/vsts/pipelines/build/variables?view=vsts&tabs=batch#secret-variables
Upvotes: 9
Reputation: 29976
The variables have already been passed to PowerShell script when the build start. If I understand your question correctly, you want to use these variables together instead of specifying them one by one like following:
PrepareAppSettings.ps1 -websiteName "MyWebApp" -appsettings $(AllVariables)
Then there isn't any way to do this.
If you want to reduce the strings passed to the PowerShell script, you can set the variable as following:
VariableName: MyRandomService | Value:"MyRandomService" = xxxxxxxx
Then you just need to call the PowerShell script with variable name passed.
Upvotes: 3
Reputation: 7780
Build Variables are automatically passed to all the PowerShell scripts as environment variables.
So if you have defined a variable myVar
in the Variables
section. You can access it as $env:myVar
in your script. One thing to note here is that .
is converted to a _
. For eg. if your variable is myVar.config
, you will access it in your script as $env:myVar_config
.
The available variables also include variables such as branch name, build number etc. To see all the available variables, run a dummy build/release definition and add a PowerShell task with inline type and run Get-ChildItem Env:
. This will show you all the available environment variables and you can see all your custom defined variables.
More details are available here
Upvotes: 88