VSTS: Pass build/release variables into Powershell

2019-01-16 14:39发布

Ideally, I would want to configure our Azure Web App application settings using build variables (on VSTS), for example:

VSTS Build

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?

3条回答
Explosion°爆炸
2楼-- · 2019-01-16 14:49

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

查看更多
迷人小祖宗
3楼-- · 2019-01-16 14:57

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://docs.microsoft.com/en-us/vsts/pipelines/build/variables?view=vsts&tabs=batch#secret-variables

查看更多
ゆ 、 Hurt°
4楼-- · 2019-01-16 15:00

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.

查看更多
登录 后发表回答