有没有办法在每个环境中使用 VSTS 变量组?

Is there a way to use VSTS Variable Groups per environment?

我正在将我的配置从使用 web.config 转换转移到基于 VSTS 变量。我得到流程变量,你定义一个变量,选择一个环境,然后你就可以开始了。我还看到 "Variable Groups",这些看起来很棒,集成了 KeyVault,总体而言似乎是一个更好的选择。

但是...我没有看到在我的 VSTS 发布过程中将变量组绑定到特定环境的方法。老实说,如果没有这个功能,我看不出这些对我有什么用。

我尝试了一种解决方法,但没有奏效。我试过了:

我想我可以想出一些 powershell 来做类似上面的事情并设置变量,但这对我来说似乎有点太自定义了。

有没有人知道我可以轻松地在每个环境中使用变量组,而无需等待 VSTS 构建此功能(如果有的话)。顺便说一句,如果你想要这个功能,这里有一个建议你可以投票:Make it possible to link a variable group to a specific environment in a release definition

不,无法为每个环境使用变量组。

作为 the user voice 链接,您可以投票并跟进建议的功能。

目前的解决方法是使用环境变量覆盖变量组中的变量。

假设变量组中值为Server=myDB的变量LoggingConnectionString需要同时用于Dev环境和staging环境。但是对于暂存环境,它需要使用变量 LoggingConnectionString 中的另一个值(例如 Server=stageDB)。因此,您可以为暂存环境添加一个值为 Server=stageDB 的环境变量 LoggingConnectionString

  • 在Dev环境中使用变量$(LoggingConnectionString)时,会使用变量组中定义的值(Server=myDB)。

  • 在staging环境中使用变量$(LoggingConnectionString)时,由于变量都是在环境变量和变量组中定义的,所以会使用在Server=stageDB中定义的值环境变量.

我最终使用 powershell 脚本根据变量组定义我的过程变量,效果很好。

假设我想要一个名为 "LoggingConnectionString" 的变量,每个环境都有不同的值

步骤:

  1. 定义一个变量组,例如"SharedLoggingVariables"
  2. 在此变量组中,为每个环境定义一个 variable/value,例如"LoggingConnectionStringDev", "LoggingConnectionStringProduction"
  3. 返回 Build/Release 的过程变量,确保 SURE 您没有名为 "LoggingConnectionString" 的变量,否则这将覆盖该值来自变量组
  4. 在你的Release过程中,在Agent的开头创建一个Powershell内联脚本,代码如下

Param(
   [string]$LoggingConnectionString
)

Write-Host "##vso[task.setvariable variable=LoggingConnectionString]$LoggingConnectionString"
  1. 将您的变量组作为参数传递给此内联 powershell,例如

    -LoggingConnectionString“$(LoggingConnectionStringDev)”

最后的 powershell 步骤应该是这样的:

在发布期间,powershell 将从变量组中设置您的进程变量。如果 powershell 不适合您,还有 other options

这已经在 VSTS 变量组中实现为范围。转到你的发布定义 -> 变量 -> 变量组 -> Link 变量组,你会得到 link window 如下,你可以在其中选择范围是发布还是您的一个或多个环境!

我没有设法找到有关此功能的任何发布信息,我只是在调整我的发布时偶然发现它。