azure-devopsazure-pipelines-yaml

Inherting YAML templates on conditional basis


I have a Yaml template for DEV,ACC,PRD for Azure Data Factory. I also have one for a Web App.

I would want an extra option to deploy these together in one Yaml through inheritance(or re-use). So that I can deploy them individually or in group. Is it possible?

This is the sample of my yaml template 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'

This is the build part(not all parameters added)

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 }}'

Solution

  • You can use parameters and conditions in your yaml file:

    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'
    

    You can choose the stages you want to run when running pipelines. enter image description here