Sdílet prostřednictvím


Parametry šablony

V šabloně můžete zadat parametry a jejich datové typy a odkazovat na tyto parametry v kanálu. Pomocí templateContext můžete také předat vlastnosti fázím, krokům a úlohám, které se používají jako parametry v šabloně.

Můžete také použít parametry mimo šablony. Pro výchozí hodnoty parametrů můžete použít pouze literály. Přečtěte si další informace o parametrech ve schématu YAML.

Předávání parametrů

Parametry musí obsahovat název a datový typ. Pokud azure-pipelines.ymlje parametr yesNo nastaven na logickou hodnotu, sestavení proběhne úspěšně. Pokud yesNo je nastaven na řetězec, například apples, sestavení selže.

# 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

Předání vlastností do šablon pomocí templateContext

Můžete použít templateContext k předání dalších vlastností fázím, krokům a úlohám, které se používají jako parametry v šabloně. Konkrétně můžete zadat templateContext v datovém jobListtypu , deploymentListnebo stageList parametru.

Při zpracování jednotlivých úloh můžete templateContext usnadnit nastavení prostředí. Spojením úlohy a objektu templateContext vlastností prostředí vám může pomoct lépe udržovatelný a snadněji pochopit YAML.

V tomto příkladu má parametr testSet v testing-template.yml datovém typu jobList. testing-template.yml Šablona vytvoří novou proměnnou testJob pomocí každého klíčového slova. Šablona pak odkazuje na testJob.templateContext.expectedHTTPResponseCodešablonu, která se nastaví azure-pipeline.yml a předá šabloně.

Když je kód odpovědi 200, šablona vytvoří požadavek REST. Když je kód odpovědi 500, šablona vypíše všechny proměnné prostředí pro ladění.

templateContext může obsahovat vlastnosti.

#testing-template.yml

parameters: 
- name: testSet
  type: jobList

jobs:
- ${{ each testJob in parameters.testSet }}:  # Iterate over each job in the 'testSet' parameter
  - ${{ if eq(testJob.templateContext.expectedHTTPResponseCode, 200) }}: # Check if the HTTP response is 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) }}: # Check if the HTTP response is 500
    - job:
      steps:
      - powershell: 'Get-ChildItem -Path Env:\' # Run a PowerShell script to list environment variables
      - ${{ testJob.steps }} # Include additional steps from the 'testJob' object
#azure-pipeline.yml

trigger: none

pool:
  vmImage: ubuntu-latest

extends:
  template: testing-template.yml 
  parameters:
    testSet:  # Define the 'testSet' parameter to pass to the template
    - job: positive_test # Define a job named 'positive_test'
      templateContext:
        expectedHTTPResponseCode: 200 # Set the expected HTTP response code to 200 for this job
      steps:
      - script: echo "Run positive test" 
    - job: negative_test # Define a job named 'negative_test'
      templateContext:
        expectedHTTPResponseCode: 500 # Set the expected HTTP response code to 500 for this job
      steps:
      - script: echo "Run negative test" 

Parametry pro výběr šablony za běhu

V závislosti na podmínce můžete volat různé šablony z YAML kanálu. V tomto příkladu se experimental.yml YAML spustí, když je parametr experimentalTemplate pravdivý.

#azure-pipeline.yml
parameters:
- name: experimentalTemplate 
  displayName: 'Use experimental build process?'
  type: boolean
  default: false

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

Datové typy parametrů

Datový typ Notes
string string
number může být omezena na values:, jinak je přijat jakýkoli řetězec typu číslo-like
boolean true nebo false
object libovolná struktura YAML
step jeden krok
stepList posloupnost kroků
job jedna úloha
jobList pořadí úloh
deployment jedna úloha nasazení
deploymentList posloupnost úloh nasazení
stage jedna fáze
stageList posloupnost fází

Všechny datové typy stepList, stepList, jobList, deployment, deploymentList, stage a stageList používají standardní formát schématu YAML. Tento příklad obsahuje řetězec, číslo, logickou hodnotu, objekt, krok a stepList.

parameters:
- name: myString  # Define a parameter named 'myString'
  type: string  # The parameter type is string
  default: a string  # Default value is 'a string'

- name: myMultiString  # Define a parameter named 'myMultiString'
  type: string  # The parameter type is string
  default: default  # Default value is 'default'
  values:  # Allowed values for 'myMultiString'
  - default  
  - ubuntu  

- name: myNumber  # Define a parameter named 'myNumber'
  type: number  # The parameter type is number
  default: 2  # Default value is 2
  values:  # Allowed values for 'myNumber'
  - 1  
  - 2  
  - 4  
  - 8  
  - 16  

- name: myBoolean  # Define a parameter named 'myBoolean'
  type: boolean  # The parameter type is boolean
  default: true  # Default value is true

- name: myObject  # Define a parameter named 'myObject'
  type: object  # The parameter type is object
  default:  # Default value is an object with nested properties
    foo: FOO  # Property 'foo' with value 'FOO'
    bar: BAR  # Property 'bar' with value 'BAR'
    things:  # Property 'things' is a list
    - one  
    - two  
    - three  
    nested:  # Property 'nested' is an object
      one: apple  # Property 'one' with value 'apple'
      two: pear  # Property 'two' with value 'pear'
      count: 3  # Property 'count' with value 3

- name: myStep  # Define a parameter named 'myStep'
  type: step  # The parameter type is step
  default:  # Default value is a step
    script: echo my step 

- name: mySteplist  # Define a parameter named 'mySteplist'
  type: stepList  # The parameter type is stepList
  default:  # Default value is a list of steps
    - script: echo step one  
    - script: echo step two  

trigger: none  

jobs: 
- job: stepList  # Define a job named 'stepList'
  steps: ${{ parameters.mySteplist }}  # Use the steps from the 'mySteplist' parameter

- job: myStep  # Define a job named 'myStep'
  steps:
    - ${{ parameters.myStep }}  # Use the step from the 'myStep' parameter

Můžete iterovat objektem a vytisknout každý řetězec v objektu.

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

steps:
- ${{ each value in parameters.listOfStrings }}: # Iterate over each value in the 'listOfStrings' parameter
  - script: echo ${{ value }} # Output the current value in the iteration

Kromě toho můžete iterovat vnořenými prvky v rámci objektu.

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

steps:
- ${{ each fruit in parameters.listOfFruits }} : # Iterate over each fruit in the 'listOfFruits'
  - ${{ each fruitColor in fruit.colors}} : # Iterate over each color in the current fruit's colors
    - script: echo ${{ fruit.fruitName}} ${{ fruitColor }} # Echo the current fruit's name and color

Můžete také přímo odkazovat na klíče objektu a odpovídající hodnoty.

parameters:
  - name: myObject
    type: object
    default:
      key1: 'value1'
      key2: 'value2'
      key3: 'value3'

jobs:
- job: ExampleJob
  displayName: 'Example object parameter job'
  pool:
    vmImage: 'ubuntu-latest'
  steps:
  - script: |
      echo "Keys in myObject:"
      echo "Key1: ${{ parameters.myObject.key1 }}"
      echo "Key2: ${{ parameters.myObject.key2 }}"
      echo "Key3: ${{ parameters.myObject.key3 }}"
    displayName: 'Display object keys and values'

Povinné parametry

Na začátek šablony můžete přidat ověřovací krok a zkontrolovat požadované parametry.

Tady je příklad, který kontroluje solution parametr pomocí bashe:

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

Pokud chcete ukázat, že šablona selže, pokud chybí požadovaný parametr:

# 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

Do šablon můžete předat parametry. Oddíl parameters definuje, jaké parametry jsou v šabloně k dispozici, a jejich výchozí hodnoty. Šablony se rozbalí těsně před spuštěním kanálu, aby hodnoty obklopené ${{ }} parametry, které přijímá z nadřazeného kanálu, nahradily. V důsledku toho lze v parametrech použít pouze předdefinované proměnné.

Pokud chcete použít parametry napříč několika kanály, podívejte se, jak vytvořit skupinu proměnných.

Šablony úloh, fází a kroků s parametry

# 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

Při využívání šablony v kanálu zadejte hodnoty parametrů šablony.

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

Parametry můžete použít také se šablonami kroků nebo fází. Například kroky s parametry:

# 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

Při využívání šablony v kanálu zadejte hodnoty parametrů šablony.

# File: azure-pipelines.yml

steps:
- script: npm install

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

Poznámka:

Skalární parametry se vždy považují za řetězce. Například eq(parameters['myparam'], true) téměř vždy vrátí true, i když myparam je parametr slovo false. Neprázdné řetězce se přetypují do true logického kontextu. Tento výraz lze přepsat tak, aby explicitně porovnával řetězce: eq(parameters['myparam'], 'true').

Parametry nejsou omezeny na skalární řetězce. Pokud místo, kde se parametr rozšíří, očekává mapování, může být parametr mapováním. Stejně tak lze posloupnosti předat, kde se sekvence očekávají. Příklad:

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