Parameter template

Anda dapat menentukan parameter dan jenis datanya dalam templat dan mereferensikan parameter tersebut dalam alur. Dengan templateContext, Anda juga dapat meneruskan properti ke tahapan, langkah, dan pekerjaan yang digunakan sebagai parameter dalam templat.

Anda juga dapat menggunakan parameter di luar templat. Anda hanya dapat menggunakan literal untuk nilai default parameter. Pelajari selengkapnya tentang parameter dalam skema YAML.

Parameter Passing

Parameter harus berisi nama dan jenis data. Dalam azure-pipelines.yml, ketika parameter yesNo diatur ke nilai boolean, build berhasil. Ketika yesNo diatur ke string seperti apples, build gagal.

# 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

Menggunakan templateContext untuk meneruskan properti ke templat

Anda dapat menggunakan templateContext untuk meneruskan lebih banyak properti ke tahapan, langkah, dan pekerjaan yang digunakan sebagai parameter dalam templat. Secara khusus, Anda dapat menentukan templateContext dalam jobListjenis data parameter , , deploymentListatau stageList .

Anda dapat menggunakan templateContext untuk mempermudah penyiapan lingkungan saat memproses setiap pekerjaan. Dengan menggabungkan pekerjaan dan objek properti lingkungannya bersama-sama, templateContext dapat membantu Anda memiliki YAML yang lebih mudah dirawat dan lebih mudah dipahami.

Dalam contoh ini, parameter testSet di testing-template.yml memiliki jenis jobListdata . Templat testing-template.yml membuat variabel testJob baru menggunakan setiap kata kunci. Templat kemudian mereferensikan testJob.templateContext.expectedHTTPResponseCode, yang akan diatur dan diteruskan azure-pipeline.yml ke templat.

Saat kode respons adalah 200, templat membuat permintaan REST. Ketika kode respons adalah 500, templat menghasilkan semua variabel lingkungan untuk penelusuran kesalahan.

templateContext dapat berisi properti.

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

Parameter untuk memilih templat saat runtime

Anda dapat memanggil templat yang berbeda dari YAML alur tergantung pada kondisi. Dalam contoh ini, experimental.yml YAML berjalan ketika parameter experimentalTemplate benar.

#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

Jenis data parameter

Jenis data Catatan
string string
number dapat dibatasi untuk values:, jika tidak, string seperti angka apa pun diterima
boolean true atau false
object struktur YAML apa pun
step satu langkah
stepList urutan langkah-langkah
job satu pekerjaan
jobList urutan pekerjaan
deployment satu pekerjaan penyebaran
deploymentList urutan pekerjaan penyebaran
stage satu tahap
stageList urutan tahapan

Langkah, stepList, pekerjaan, jobList, penyebaran, deploymentList, tahap, dan jenis data stageList semuanya menggunakan format skema YAML standar. Contoh ini mencakup string, angka, boolean, objek, langkah, dan 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 }}

Anda dapat melakukan iterasi melalui objek dan mencetak setiap string dalam objek.

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

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

Selain itu, Anda dapat melakukan iterasi melalui elemen berlapis dalam objek.

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

Parameter yang diperlukan

Anda dapat menambahkan langkah validasi di awal templat Anda untuk memeriksa parameter yang Anda butuhkan.

Berikut adalah contoh yang memeriksa solution parameter menggunakan Bash (yang memungkinkannya bekerja di platform apa pun):

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

Untuk menunjukkan bahwa templat gagal jika tidak memiliki parameter yang diperlukan:

# 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

Anda dapat meneruskan parameter ke templat. Bagian menentukan parameters parameter apa yang tersedia dalam templat dan nilai defaultnya. Templat diperluas tepat sebelum alur berjalan sehingga nilai yang dikelilingi oleh digantikan ${{ }} oleh parameter yang diterimanya dari alur penutup. Akibatnya, hanya variabel yang telah ditentukan sebelumnya yang dapat digunakan dalam parameter.

Untuk menggunakan parameter di beberapa alur, lihat cara membuat grup variabel.

Templat pekerjaan, tahap, dan langkah dengan parameter

# 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

Saat Anda menggunakan templat di alur Anda, tentukan nilai untuk parameter templat.

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

Anda juga dapat menggunakan parameter dengan templat langkah atau tahap. Misalnya, langkah-langkah dengan parameter:

# 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

Saat Anda menggunakan templat di alur Anda, tentukan nilai untuk parameter templat.

# File: azure-pipelines.yml

steps:
- script: npm install

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

Catatan

Parameter skalar selalu diperlakukan sebagai string. Misalnya, eq(parameters['myparam'], true) hampir selalu mengembalikan true, bahkan jika myparam parameternya adalah kata false. String yang tidak kosong dilemparkan ke true dalam konteks Boolean. Ekspresi tersebut dapat ditulis ulang untuk membandingkan string secara eksplisit: eq(parameters['myparam'], 'true').

Parameter tidak terbatas pada string skalar. Selama tempat di mana parameter diperluas mengharapkan pemetaan, parameter dapat menjadi pemetaan. Demikian juga, urutan dapat diteruskan di mana urutan diharapkan. Contohnya:

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