【问题标题】:VSTS: Pass build/release variables into Powershell script taskVSTS:将构建/发布变量传递到 Powershell 脚本任务
【发布时间】: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)}

有没有一种方法可以将所有构建变量传递到脚本中,而无需在哈希表中明确指定每个变量?

【问题讨论】:

    标签: powershell tfs azure-devops azure-web-app-service azure-pipelines


    【解决方案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 中轻松设置它。

        【讨论】:

          猜你喜欢
          • 2018-02-28
          • 1970-01-01
          • 2017-08-06
          • 2018-03-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-23
          • 1970-01-01
          相关资源
          最近更新 更多