使用相同Yaml但部署到不同订阅的管道

时间:2020-07-02 13:11:07

标签: azure azure-devops

我有一个基于YAML的dev ops管道,目前该管道具有服务连接和订阅硬编码。

我现在想部署到不同订阅的dev或live。

我还想控制谁可以执行这些管道。这意味着我需要2个管道,以便可以独立管理它们的安全性

我不希望订阅和服务连接成为用户必须记得正确输入的管道的参数。

我当前的解决方案:

我正在使用包含大多数配置的YAML模板。

对于每个环境(dev.yml和live.yml),我都有一个顶级yaml文件。

这些将环境特定的值传递给模板,即订阅

我有2条管道。开发管道映射到dev.yaml文件,实时管道映射到live.yml

这种方法意味着,将来我可能对配置的每种组合(订阅,服务连接等)都需要一个新的顶级yml文件。

这感觉很混乱-是否有更好的解决方案。我想念什么?

1 个答案:

答案 0 :(得分:0)

管道使用相同的Yaml,但部署到不同的订阅

您可以尝试将不同的订阅添加到不同的变量组,然后在模板中引用变量组:

可变模板:

# variablesForDev.yml
variables:
- group: variable-group-Dev

# variablesForLive.yml
variables:
- group: variable-group-Live

dev.yml:

stages:
- stage: Dev
  variables:
  - template: variablesForDev.yml
  jobs:
  - job: Dev
    steps:
    - script: echo $(TestVarInDevGroup)

live.yml:

stages:
- stage: live 
  variables:
  - template: variablesForLive.yml
  jobs:
  - job: live
    steps:
    - script: echo $(TestVarInLiveGroup)

您可以查看此文档Add & use variable groups了解更多详细信息。

更新

这种方法意味着对于配置的每个组合,我可能都会拥有 将来(订阅,服务连接等),我需要一个新的 顶级yml文件。

由于您不想每次以后为每种配置组合都创建顶级yml文件,因此可以尝试为这些(订阅,服务连接)创建一个变量组等等),而不是顶级yml文件:

dev.yml:

variables:
- group: SubscriptionsForDev

stages:
- stage: Dev
  jobs:
  - job: Dev
    steps:
    - script: echo $(TestVarInDevGroup)

在这种情况下,我们在添加新管道时不需要创建新的顶级yml文件,只需添加新变量组即可。

此外,我们还可以为每个变量组设置安全性:

enter image description here

Update2:

我想知道是否可以避免使用两个顶级文件。

如果要避免使用2个顶级文件,那么问题又回到了我的原始答案,我们需要一个新的管道来包含这两个yml文件。我们只需要在每个阶段添加条件

stages:
- stage: Dev
  condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/dev'))
  variables:
  - group: variable-group-Dev
  jobs:
  - job: Dev
    steps:
    - script: echo $(TestVarInDevGroup)

- stage: live
  condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/live')) 
  variables:
  - group: variable-group-Live
  jobs:
  - job: live
    steps:
    - script: echo $(TestVarInLiveGroup)

但是,如果您的两个Yaml文件没有可用作条件的条件,则必须将它们分开。

希望这会有所帮助。