有没有办法在每个环境中使用 VSTS 变量组?
Is there a way to use VSTS Variable Groups per environment?
我正在将我的配置从使用 web.config 转换转移到基于 VSTS 变量。我得到流程变量,你定义一个变量,选择一个环境,然后你就可以开始了。我还看到 "Variable Groups",这些看起来很棒,集成了 KeyVault,总体而言似乎是一个更好的选择。
但是...我没有看到在我的 VSTS 发布过程中将变量组绑定到特定环境的方法。老实说,如果没有这个功能,我看不出这些对我有什么用。
我尝试了一种解决方法,但没有奏效。我试过了:
- 使用环境前缀命名我的变量组和变量,例如
- 变量组名="Production ConnectionStrings"
- 变量名="Production_LoggingConnectionString"
- 我想一旦我链接了 "Production_ConnectionStrings" 变量,我就可以从标准 Process 变量中引用 $(Production_LoggingConnectionString),但这没有用。
我想我可以想出一些 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" 的变量,每个环境都有不同的值
步骤:
- 定义一个变量组,例如"SharedLoggingVariables"
- 在此变量组中,为每个环境定义一个 variable/value,例如"LoggingConnectionStringDev", "LoggingConnectionStringProduction"
- 返回 Build/Release 的过程变量,确保 SURE 您没有名为 "LoggingConnectionString" 的变量,否则这将覆盖该值来自变量组
- 在你的Release过程中,在Agent的开头创建一个Powershell内联脚本,代码如下
Param(
[string]$LoggingConnectionString
)
Write-Host "##vso[task.setvariable variable=LoggingConnectionString]$LoggingConnectionString"
将您的变量组作为参数传递给此内联 powershell,例如
-LoggingConnectionString“$(LoggingConnectionStringDev)”
最后的 powershell 步骤应该是这样的:
在发布期间,powershell 将从变量组中设置您的进程变量。如果 powershell 不适合您,还有 other options
这已经在 VSTS 变量组中实现为范围。转到你的发布定义 -> 变量 -> 变量组 -> Link 变量组,你会得到 link window 如下,你可以在其中选择范围是发布还是您的一个或多个环境!
我没有设法找到有关此功能的任何发布信息,我只是在调整我的发布时偶然发现它。
我正在将我的配置从使用 web.config 转换转移到基于 VSTS 变量。我得到流程变量,你定义一个变量,选择一个环境,然后你就可以开始了。我还看到 "Variable Groups",这些看起来很棒,集成了 KeyVault,总体而言似乎是一个更好的选择。
但是...我没有看到在我的 VSTS 发布过程中将变量组绑定到特定环境的方法。老实说,如果没有这个功能,我看不出这些对我有什么用。
我尝试了一种解决方法,但没有奏效。我试过了:
- 使用环境前缀命名我的变量组和变量,例如
- 变量组名="Production ConnectionStrings"
- 变量名="Production_LoggingConnectionString"
- 我想一旦我链接了 "Production_ConnectionStrings" 变量,我就可以从标准 Process 变量中引用 $(Production_LoggingConnectionString),但这没有用。
我想我可以想出一些 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" 的变量,每个环境都有不同的值
步骤:
- 定义一个变量组,例如"SharedLoggingVariables"
- 在此变量组中,为每个环境定义一个 variable/value,例如"LoggingConnectionStringDev", "LoggingConnectionStringProduction"
- 返回 Build/Release 的过程变量,确保 SURE 您没有名为 "LoggingConnectionString" 的变量,否则这将覆盖该值来自变量组
- 在你的Release过程中,在Agent的开头创建一个Powershell内联脚本,代码如下
Param(
[string]$LoggingConnectionString
)
Write-Host "##vso[task.setvariable variable=LoggingConnectionString]$LoggingConnectionString"
将您的变量组作为参数传递给此内联 powershell,例如
-LoggingConnectionString“$(LoggingConnectionStringDev)”
最后的 powershell 步骤应该是这样的:
在发布期间,powershell 将从变量组中设置您的进程变量。如果 powershell 不适合您,还有 other options
这已经在 VSTS 变量组中实现为范围。转到你的发布定义 -> 变量 -> 变量组 -> Link 变量组,你会得到 link window 如下,你可以在其中选择范围是发布还是您的一个或多个环境!
我没有设法找到有关此功能的任何发布信息,我只是在调整我的发布时偶然发现它。