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 jobList
jenis data parameter , , deploymentList
atau 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 jobList
data . 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 }}