Sjabloonparameters

U kunt parameters en de bijbehorende gegevenstypen opgeven in een sjabloon en verwijzen naar deze parameters in een pijplijn. Met templateContext kunt u eigenschappen ook doorgeven aan fasen, stappen en taken die worden gebruikt als parameters in een sjabloon.

U kunt ook parameters buiten sjablonen gebruiken. U kunt alleen letterlijke waarden gebruiken voor standaardwaarden voor parameters. Meer informatie over parameters in het YAML-schema.

Parameters doorgeven

Parameters moeten een naam en gegevenstype bevatten. Wanneer azure-pipelines.ymlde parameter yesNo is ingesteld op een Booleaanse waarde, slaagt de build. Wanneer yesNo deze is ingesteld op een tekenreeks zoals apples, mislukt de build.

# File: simple-param.yml
parameters:
- name: yesNo # name of the parameter; required
  type: boolean # data type of the parameter; required
  default: false

steps:
- script: echo ${{ parameters.yesNo }}
# File: azure-pipelines.yml
trigger:
- main

extends:
  template: simple-param.yml
  parameters:
      yesNo: false # set to a non-boolean value to have the build fail

TemplateContext gebruiken om eigenschappen door te geven aan sjablonen

U kunt templateContext meer eigenschappen doorgeven aan fasen, stappen en taken die worden gebruikt als parameters in een sjabloon. U kunt met name opgeven templateContext binnen het jobListgegevenstype , deploymentListof stageList parametergegevenstype.

U kunt het eenvoudiger templateContext maken om omgevingen in te stellen bij het verwerken van elke taak. Door een taak en het bijbehorende object met omgevingseigenschappen samen te bundelen, templateContext kunt u beter onderhouden en beter inzicht krijgen in YAML.

In dit voorbeeld heeft de parameter testSettesting-template.yml het gegevenstype jobList. Met de sjabloon testing-template.yml wordt een nieuwe variabele testJob gemaakt met behulp van elk trefwoord. De sjabloon verwijst vervolgens naar de testJob.templateContext.expectedHTTPResponseCode, die wordt ingesteld azure-pipeline.yml en doorgegeven aan de sjabloon.

Wanneer de antwoordcode 200 is, maakt de sjabloon een REST-aanvraag. Wanneer de antwoordcode 500 is, voert de sjabloon alle omgevingsvariabelen uit voor foutopsporing.

templateContext kan eigenschappen bevatten.

#testing-template.yml

parameters: 
- name: testSet
  type: jobList

jobs:
- ${{ each testJob in parameters.testSet }}:
  - ${{ if eq(testJob.templateContext.expectedHTTPResponseCode, 200) }}:
    - job:
      steps: 
      - powershell: 'Invoke-RestMethod -Uri https://blogs.msdn.microsoft.com/powershell/feed/ | Format-Table -Property Title, pubDate'
      - ${{ testJob.steps }}    
  - ${{ if eq(testJob.templateContext.expectedHTTPResponseCode, 500) }}:
    - job:
      steps:
      - powershell: 'Get-ChildItem -Path Env:\'
      - ${{ testJob.steps }}
#azure-pipeline.yml

trigger: none

pool:
  vmImage: ubuntu-latest

extends:
  template: testing-template.yml
  parameters:
    testSet:
    - job: positive_test
      templateContext:
        expectedHTTPResponseCode: 200
      steps:
      - script: echo "Run positive test" 
    - job: negative_test
      templateContext:
        expectedHTTPResponseCode: 500
      steps:
      - script: echo "Run negative test" 

Parameters voor het selecteren van een sjabloon tijdens runtime

U kunt verschillende sjablonen aanroepen vanuit een YAML-pijplijn, afhankelijk van een voorwaarde. In dit voorbeeld wordt de experimental.yml YAML uitgevoerd wanneer de parameter experimentalTemplate waar is.

#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

Parametergegevenstypen

Gegevenstype Opmerkingen
string tekenreeks
number kan worden beperkt tot values:, anders wordt een willekeurige tekenreeks geaccepteerd die lijkt op een getal
boolean true of false
object elke YAML-structuur
step één stap
stepList reeks stappen
job één taak
jobList reeks taken
deployment één implementatietaak
deploymentList volgorde van implementatietaken
stage één fase
stageList reeks fasen

De stap, stepList, job, jobList, deployment, deploymentList, stage en stageList-gegevenstypen maken allemaal gebruik van de standaard YAML-schema-indeling. Dit voorbeeld bevat tekenreeks, getal, booleaanse waarde, object, stap en stepList.

parameters:
- name: myString
  type: string
  default: a string
- name: myMultiString
  type: string
  default: default
  values:
  - default
  - ubuntu
- name: myNumber
  type: number
  default: 2
  values:
  - 1
  - 2
  - 4
  - 8
  - 16
- name: myBoolean
  type: boolean
  default: true
- name: myObject
  type: object
  default:
    foo: FOO
    bar: BAR
    things:
    - one
    - two
    - three
    nested:
      one: apple
      two: pear
      count: 3
- name: myStep
  type: step
  default:
    script: echo my step
- name: mySteplist
  type: stepList
  default:
    - script: echo step one
    - script: echo step two

trigger: none

jobs: 
- job: stepList
  steps: ${{ parameters.mySteplist }}
- job: myStep
  steps:
    - ${{ parameters.myStep }}

U kunt een object herhalen en elke tekenreeks in het object afdrukken.

parameters:
- name: listOfStrings
  type: object
  default:
  - one
  - two

steps:
- ${{ each value in parameters.listOfStrings }}:
  - script: echo ${{ value }}

Daarnaast kunt u geneste elementen in een object herhalen.

parameters:
- name: listOfFruits
  type: object
  default:
  - fruitName: 'apple'
    colors: ['red','green']
  - fruitName: 'lemon'
    colors: ['yellow']

steps:
- ${{ each fruit in parameters.listOfFruits }} :
  - ${{ each fruitColor in fruit.colors}} :
    - script: echo ${{ fruit.fruitName}} ${{ fruitColor }}

Vereiste parameters

U kunt aan het begin van de sjabloon een validatiestap toevoegen om te controleren op de parameters die u nodig hebt.

Hier volgt een voorbeeld waarin wordt gecontroleerd op de solution parameter met behulp van Bash (waarmee deze op elk platform kan werken):

# File: steps/msbuild.yml

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

steps:
- bash: |
    if [ -z "$SOLUTION" ]; then
      echo "##vso[task.logissue type=error;]Missing template parameter \"solution\""
      echo "##vso[task.complete result=Failed;]"
    fi
  env:
    SOLUTION: ${{ parameters.solution }}
  displayName: Check for required parameters
- task: msbuild@1
  inputs:
    solution: ${{ parameters.solution }}
- task: vstest@2
  inputs:
    solution: ${{ parameters.solution }}

Als u wilt weergeven dat de sjabloon mislukt als de vereiste parameter ontbreekt:

# File: azure-pipelines.yml

# This will fail since it doesn't set the "solution" parameter to anything,
# so the template will use its default of an empty string
steps:
- template: steps/msbuild.yml

U kunt parameters doorgeven aan sjablonen. In parameters de sectie wordt gedefinieerd welke parameters beschikbaar zijn in de sjabloon en de bijbehorende standaardwaarden. Sjablonen worden uitgevouwen vlak voordat de pijplijn wordt uitgevoerd, zodat waarden die worden omgeven ${{ }} door de parameters die worden ontvangen van de omsluitpijplijn worden vervangen. Als gevolg hiervan kunnen alleen vooraf gedefinieerde variabelen worden gebruikt in parameters.

Als u parameters in meerdere pijplijnen wilt gebruiken, raadpleegt u hoe u een variabelegroep maakt.

Taak-, fase- en stapsjablonen met parameters

# File: templates/npm-with-params.yml

parameters:
  name: ''  # defaults for any parameters that aren't specified
  vmImage: ''

jobs:
- job: ${{ parameters.name }}
  pool: 
    vmImage: ${{ parameters.vmImage }}
  steps:
  - script: npm install
  - script: npm test

Wanneer u de sjabloon in uw pijplijn gebruikt, geeft u waarden op voor de sjabloonparameters.

# File: azure-pipelines.yml

jobs:
- template: templates/npm-with-params.yml  # Template reference
  parameters:
    name: Linux
    vmImage: 'ubuntu-latest'

- template: templates/npm-with-params.yml  # Template reference
  parameters:
    name: macOS
    vmImage: 'macOS-10.13'

- template: templates/npm-with-params.yml  # Template reference
  parameters:
    name: Windows
    vmImage: 'windows-latest'

U kunt ook parameters gebruiken met stap- of fasesjablonen. Bijvoorbeeld stappen met parameters:

# File: templates/steps-with-params.yml

parameters:
  runExtendedTests: 'false'  # defaults for any parameters that aren't specified

steps:
- script: npm test
- ${{ if eq(parameters.runExtendedTests, 'true') }}:
  - script: npm test --extended

Wanneer u de sjabloon in uw pijplijn gebruikt, geeft u waarden op voor de sjabloonparameters.

# File: azure-pipelines.yml

steps:
- script: npm install

- template: templates/steps-with-params.yml  # Template reference
  parameters:
    runExtendedTests: 'true'

Notitie

Scalaire parameters worden altijd behandeld als tekenreeksen. Retourneert bijvoorbeeld eq(parameters['myparam'], true) bijna altijd true, zelfs als de myparam parameter het woord falseis. Niet-lege tekenreeksen worden omgezet true in een Booleaanse context. Deze expressie kan opnieuw worden geschreven om tekenreeksen expliciet te vergelijken: eq(parameters['myparam'], 'true').

Parameters zijn niet beperkt tot scalaire tekenreeksen. Zolang de locatie waar de parameter wordt uitgebreid een toewijzing verwacht, kan de parameter een toewijzing zijn. Op dezelfde manier kunnen reeksen worden doorgegeven waar sequenties worden verwacht. Voorbeeld:

# azure-pipelines.yml
jobs:
- template: process.yml
  parameters:
    pool:   # this parameter is called `pool`
      vmImage: ubuntu-latest  # and it's a mapping rather than a string


# process.yml
parameters:
  pool: {}

jobs:
- job: build
  pool: ${{ parameters.pool }}