VSTS:将构建/发布变量传递到 Powershell 脚本任务
Posted
技术标签:
【中文标题】VSTS:将构建/发布变量传递到 Powershell 脚本任务【英文标题】:VSTS: Pass build/release variables into Powershell script task 【发布时间】:2016-08-28 02:33:47 【问题描述】:理想情况下,我希望使用构建变量(在 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)
有没有一种方法可以将所有构建变量传递到脚本中,而无需在哈希表中明确指定每个变量?
【问题讨论】:
【参考方案1】:构建变量会作为环境变量自动传递给所有 PowerShell 脚本。
因此,如果您在 Variables
部分中定义了变量 myVar
。您可以在脚本中以$env:myVar
的身份访问它。这里要注意的一件事是.
转换为_
。例如。如果您的变量是myVar.config
,您将在脚本中以$env:myVar_config
的身份访问它。
可用变量还包括分支名称、内部版本号等变量。要查看所有可用变量,请运行虚拟构建/发布定义并添加内联类型的 PowerShell 任务并运行Get-ChildItem Env:
。这将向您显示所有可用的环境变量,并且您可以看到所有自定义变量。
更多详情可here
【讨论】:
谢谢 - 所以我最终设置了所有构建变量,我打算成为应用程序设置,带有“应用程序:”前缀。这当然不是最干净的方法。Get-ChildItem Env: | Where-Object $_.Name -like "App:*" | ForEach-Object $appSettings.Add($_.Name.Substring(4), $_.Value)
@davenewza 是的,如果您有很多设置,最好将其放入字典中,然后干净轻松地访问它们。【参考方案2】:
在构建开始时,变量已经传递给 PowerShell 脚本。如果我正确理解您的问题,您希望将这些变量一起使用,而不是像下面这样一一指定它们:
PrepareAppSettings.ps1 -websiteName "MyWebApp" -appsettings $(AllVariables)
那么没有办法做到这一点。
如果要减少传递给 PowerShell 脚本的字符串,可以将变量设置如下:
变量名称:MyRandomService |值:"MyRandomService" = xxxxxxxx
那么你只需要调用带有变量名的PowerShell脚本。
【讨论】:
【参考方案3】:这里值得一提的是,秘密变量不会作为环境变量传递到脚本中(PS 中的env:
)。仅当作为脚本的参数传递时才可访问,例如。 -MyPassword $(Password)
。见https://docs.microsoft.com/en-us/vsts/pipelines/build/variables?view=vsts&tabs=batch#secret-variables
【讨论】:
【参考方案4】:您也可以使用变量组来实现这一点,从而维护密切相关的变量,与构建变量和其他相关变量组隔离。我已经展示了如何在这个answer 中轻松设置它。
【讨论】:
以上是关于VSTS:将构建/发布变量传递到 Powershell 脚本任务的主要内容,如果未能解决你的问题,请参考以下文章