Post

Azure Pipelines

A reference of YAML patterns and snippets for Azure DevOps pipeline configuration. Copy what you need; each snippet stands on its own.

Quick navigation

Pattern Section
Conditional template selection Conditional templates
Multi-repository builds Multi-repository builds
Pipeline design principles Design principles

Design principles

  • Keep it simple
  • Use variables and parameters
  • Define repositories explicitly (needed for mixed dev.azure.com tenant subscriptions)
  • Minimise nested template YAML — every level of nesting is another context switch when you’re debugging

Conditional templates

Use parameters and $ expressions to pick a template at compile time. Here the pipeline swaps between an experimental and a stable build based on a boolean parameter.

1
2
3
4
5
6
7
8
9
10
11
12
#azure-pipeline.yml
parameters:
- name: experimentalTemplate
  displayName: 'Use experimental build process?'
  type: boolean
  default: false

steps:
- ${{ if eq(parameters.experimentalTemplate, true) }}:
  - template: experimental.yml
- ${{ if not(eq(parameters.experimentalTemplate, true)) }}:
  - template: stable.yml

Multi-repository builds

A pipeline can pull templates and code from more than one repository. The first run prompts you to grant permission to each external repository resource before it’ll check them out — expect that gate the first time, it’s not an error.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
resources:
  repositories:
    - repository: DeploymentTemplates #alias name
      type: git #type of repository
      name: deployment-files #repository name
      ref: 'refs/heads/main' #git branch reference
stages:
  - stage: 'CIBuild'
    displayName: 'CI  Service'
    jobs:
      - job: CI_Service
        displayName: CI Service
        continueOnError: false
        pool:
          displayName: "CI Service"
          name: Default
        workspace:
          clean: all
        timeoutInMinutes: 120
        cancelTimeoutInMinutes: 2
    steps:
    - template: DevOps/Tasks/_DotNetCoreCLI.yml@DeploymentTemplates
      parameters:
        displayName: 'Restore .NetCore Projects'
        projects:  '**/MicroServices/**/*.API.csproj'
        arguments: '--packages $(Build.SourcesDirectory)\packages'
        command: restore
     
    - template: DevOps/Tasks/_DotNetCoreCLI.yml@DeploymentTemplates
      parameters:
        displayName: 'Build .NetCore Projects'
        projects:  '**/*.csproj'
        arguments: '--configuration $(BuildConfiguration) --output $(Build.SourcesDirectory)\bin\$(BuildConfiguration)'
        command: build

References

This post is licensed under CC BY 4.0 by the author.