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

时间:2017-12-28 20:46:20

标签: azure-devops azure-pipelines azure-pipelines-release-pipeline

我将配置从使用web.config转换移动到基于VSTS变量。我得到了流程变量,你定义了一个变量,选择了一个环境,你就可以了。我也看到"变量组",这些看起来很棒,有KeyVault集成,整体看起来是一个更好的选择。

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

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

  • 命名我的变量组&具有环境前缀的变量,例如
    • 变量组名称="生产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

3 个答案:

答案 0 :(得分:6)

现在已在VSTS变量组中将其实现为作用域。转到您的发布定义 - >变量 - >变量组 - >链接变量组,您将获得如下所示的链接窗口,您可以在其中选择要发布的范围或一个或多个环境!

enter image description here

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

答案 1 :(得分:2)

我最终使用powershell脚本根据变量组定义我的过程变量,它运行良好。

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

步骤:

  1. 定义变量组,例如“SharedLoggingVariables”
  2. 在此变量组内,为每个环境定义变量/值,例如“LoggingConnectionStringDev”,“LoggingConnectionStringProduction” enter image description here
  3. 返回构建/发布的过程变量,使 SURE 您没有名为“LoggingConnectionString”的变量,否则会覆盖来自变量组的值
  4. 在您的发布过程中,使用以下代码在代理的开头创建一个Powershell内联脚本
  5. Param(
       [string]$LoggingConnectionString
    )
    
    Write-Host "##vso[task.setvariable variable=LoggingConnectionString]$LoggingConnectionString"
    
    1. 将您的变量组作为参数传递给此内联powershell,例如

      -LoggingConnectionString“$(LoggingConnectionStringDev)”

    2. 最终的PowerShell步骤应如下所示:enter image description here

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

答案 2 :(得分:1)

不,没有办法在每个环境中使用变量组。

在您关联的the user voice时,您可以投票并跟进建议的功能。

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

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

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

  • 当在登台环境中使用变量$(LoggingConnectionString)时,由于变量都在环境变量和变量组中定义,因此它将使用环境变量中定义的值(Server=stageDB)。 / p>