【问题标题】:Is there a way to use VSTS Variable Groups per environment?有没有办法在每个环境中使用 VSTS 变量组?
【发布时间】:2017-12-28 20:46:20
【问题描述】:

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

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

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

  • 使用环境前缀命名我的变量组和变量,例如
    • 变量组名称="Production ConnectionStrings"
    • 变量名称="Production_LoggingConnectionString"
    • 我认为,一旦我链接了“Production_ConnectionStrings”变量,我就可以从标准流程变量中引用 $(Production_LoggingConnectionString),但这不起作用。

我想我可以想出一些 powershell 来执行上述操作并设置变量,但这对我来说似乎有点太习惯了。

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

【问题讨论】:

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


    【解决方案1】:

    这现在已在 VSTS 变量组中作为范围实现。转到您的发布定义 -> 变量 -> 变量组 -> 链接变量组,然后您会看到如下链接窗口,您可以在其中选择发布或一个或多个环境的范围!

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

    【讨论】:

    • 太棒了,谢谢分享。我不知道他们甚至正在根据路线图开发该功能,并且微软对该 Uservoice 没有采取任何行动。
    • 此设置可用于发布管道定义,但不可用于构建定义。
    • @gabe 构建管道中缺少环境的整个概念,所以我看不出这个功能怎么会有?无论如何,这个想法应该是构建一次,并多次部署到不同的环境。如果您有无法通过此原则满足的要求,也许您可​​以就此提出一个单独的问题,我们会看看我们是否可以指导您获得适当的结果!
    • @TuukkaHaapaniemi 我的用例是使用 CosmosDB 和事件中心等资源进行集成测试,我需要将连接字符串添加到测试环境。变量组提供了一种很好的方式来存储这些秘密。
    【解决方案2】:

    我最终使用了一个 powershell 脚本来根据变量组定义我的流程变量,效果很好。

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

    步骤:

    1. 定义变量组,例如“SharedLoggingVariables”
    2. 在此变量组中,为每个环境定义一个变量/值,例如“LoggingConnectionStringDev”、“LoggingConnectionStringProduction”
    3. 回到构建/发布的流程变量中,确保您没有名为“LoggingConnectionString”的变量,否则这将覆盖来自变量组的值
    4. 在您的发布过程中,使用以下代码在代理的开头创建一个 Powershell 内联脚本

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

      -LoggingConnectionString "$(LoggingConnectionStringDev)"

    最后的 powershell 步骤应该如下所示:

    在发布期间,powershell 将从变量组中设置您的流程变量。如果 powershell 不适合您,可以使用 other options

    【讨论】:

    【解决方案3】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-19
      • 2020-04-04
      • 2020-02-13
      • 1970-01-01
      • 2018-07-13
      • 2017-05-08
      • 1970-01-01
      • 2020-07-29
      相关资源
      最近更新 更多