VSTS: Pass build/release variables into Powershell script task

邮差的信 提交于 2019-11-27 05:19:04

问题


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?


回答1:


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




回答2:


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




回答3:


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.



来源:https://stackoverflow.com/questions/36997494/vsts-pass-build-release-variables-into-powershell-script-task

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!