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 脚本任务的主要内容,如果未能解决你的问题,请参考以下文章

在VSTS上配置Nuget包以进行预发布

如何将 VSTS 构建和发布定义从一个实例移动到另一个实例?

从 VSTS 发布管理将网站构建部署到 Azure

将构建定义从 TFS 迁移到 VSTS

VSTS:无法添加触发发布的构建标签

如何将 VSTS 上的构建配置为 FTP 部署