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.yml
de 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 jobList
gegevenstype , deploymentList
of 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 testSet
testing-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 false
is.
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 }}