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 }}:
  - ${{ 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" 

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) }}:
  - template: experimental.yml
- ${{ if not(eq(parameters.experimentalTemplate, 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
  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 }}

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 }}:
  - script: echo ${{ value }}

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 }} :
  - ${{ each fruitColor in fruit.colors}} :
    - script: echo ${{ fruit.fruitName}} ${{ fruitColor }}

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 (který umožňuje pracovat na libovolné platformě):

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