有条件地继承 YAML 模板

问题描述

我有一个用于 Azure 数据工厂的 DEV、ACC、PRD 的 Yaml 模板。我也有一个用于 Web 应用的。

我想要一个额外的选项,通过继承(或重用)将它们部署在一个 Yaml 中。这样我就可以单独或成组部署它们。可能吗?

这是我的 yaml 模板示例 a

trigger: none

stages:
- stage: DEV
  variables:
    environment: 't'
    system.debug: true
  jobs :
  - template: shared-build.yml
    parameters:
      location: 'westeurope'
- stage: ACC
  variables:
    environment: 'd'
    system.debug: true
  jobs :
  - template: shared-build.yml
    parameters:
      location: 'westeurope'
- stage: PRD
  variables:
    environment: 'd'
    system.debug: true
  jobs :
  - template: shared-build.yml
    parameters:
      location: 'westeurope'

这是构建部分(未添加所有参数)

parameters:
- name: location
  type: string
  default: ''

jobs:
  - deployment: Build
    pool:
        name: Azure Pipelines
        vmImage: windows-2019
    environment: '${{ parameters.devopsEnv }}'
    strategy:
      runOnce:
        deploy:
          steps:
          - checkout: self
          - task: Azurekeyvault@1
            inputs:
              azureSubscription: '${{ parameters. subscription }}'
              keyvaultName: '${{ parameters.keyvaultName }}'

解决方法

您可以在 yaml 文件中使用参数和条件:

parameters:
  - name: DEV
    type: boolean
    default: true
  - name: ACC
    type: boolean
    default: true
  - name: PRD
    type: boolean
    default: true

stages:
- stage: DEV
  condition: eq(${{ parameters.DEV }},'true')
  variables:
    environment: 't'
    system.debug: true
  jobs :
  - template: shared-build.yml
    parameters:
      location: 'westeurope'
- stage: ACC
  condition: eq(${{ parameters.ACC }},'true')
  variables:
    environment: 'd'
    system.debug: true
  jobs :
  - template: shared-build.yml
    parameters:
      location: 'westeurope'
- stage: PRD
  condition: eq(${{ parameters.PRD }},'true')
  variables:
    environment: 'd'
    system.debug: true
  jobs :
  - template: shared-build.yml
    parameters:
      location: 'westeurope'

您可以在运行管道时选择要运行的阶段。 enter image description here