我有一个基于YAML的dev ops管道,目前该管道具有服务连接和订阅硬编码。
我现在想部署到不同订阅的dev或live。
我还想控制谁可以执行这些管道。这意味着我需要2个管道,以便可以独立管理它们的安全性
我不希望订阅和服务连接成为用户必须记得正确输入的管道的参数。
我当前的解决方案:
我正在使用包含大多数配置的YAML模板。
对于每个环境(dev.yml和live.yml),我都有一个顶级yaml文件。
这些将环境特定的值传递给模板,即订阅
我有2条管道。开发管道映射到dev.yaml文件,实时管道映射到live.yml
这种方法意味着,将来我可能对配置的每种组合(订阅,服务连接等)都需要一个新的顶级yml文件。
这感觉很混乱-是否有更好的解决方案。我想念什么?
答案 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文件,只需添加新变量组即可。
此外,我们还可以为每个变量组设置安全性:
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文件没有可用作条件的条件,则必须将它们分开。
希望这会有所帮助。