理想情况下,我希望使用构建变量(在VSTS上)配置我们的Azure Web App应用程序设置,例如:
我们使用Powershell脚本执行发布任务。要设置应用程序设置,可以使用以下脚本:
param($websiteName, $appSettings)
Set-AzureWebsite -Name $websiteName -AppSettings $appSettings
我可以手动将这些构建变量传递给Powershell脚本构建任务,如下所示:
PrepareAppSettings.ps1 -websiteName "MyWebApp" -appsettings @{"MyConnectionString" = $(MyConnectionString);"MyRandomService" = $(MyRandomService);"MyRandomServiceClient"=$(MyRandomServiceClient);"MyRandomServicePassword"=$(MyRandomServicePassword)}
有没有办法将所有构建变量传递到脚本中而不必在哈希表中显式指定每个变量?
答案 0 :(得分:72)
构建变量会自动作为环境变量传递给所有PowerShell脚本。
因此,如果您在myVar
部分中定义了变量Variables
。您可以在脚本中以$env:myVar
的形式访问它。这里需要注意的一点是.
转换为_
。例如。如果您的变量为myVar.config
,则会在脚本中以$env:myVar_config
的形式访问它。
可用变量还包括变量,例如分支名称,内部版本号等。要查看所有可用变量,请运行虚拟构建/发布定义并添加内联类型的PowerShell任务并运行Get-ChildItem Env:
。这将显示所有可用的环境变量,您可以看到所有自定义变量。
有更多详情可供here
答案 1 :(得分:6)
在这里值得一提的是,秘密变量不会作为环境变量(在PS中为env:
)传递到脚本中。因此仅当作为脚本的参数传递时才可访问,例如。 -MyPassword $(Password)
。参见https://docs.microsoft.com/en-us/vsts/pipelines/build/variables?view=vsts&tabs=batch#secret-variables
答案 2 :(得分:2)
构建开始时,变量已经传递给PowerShell脚本。如果我正确理解了您的问题,您希望将这些变量一起使用,而不是逐个指定它们,如下所示:
PrepareAppSettings.ps1 -websiteName "MyWebApp" -appsettings $(AllVariables)
然后没有办法做到这一点。
如果要减少传递给PowerShell脚本的字符串,可以将变量设置如下:
VariableName:MyRandomService |值:" MyRandomService" = xxxxxxxx
然后你只需要调用传递了变量名的PowerShell脚本。
答案 3 :(得分:0)
您还可以使用变量组来实现这一目标,从而保持与构建变量和其他相关变量组密切相关的变量。我已经展示了如何在此answer中轻松进行设置。