Parameter runtime
Layanan Azure DevOps | Azure DevOps Server 2022 | Azure DevOps Server 2020
Dengan parameter runtime, Anda dapat memiliki kontrol lebih besar atas nilai apa yang dapat diteruskan ke alur. Dengan parameter runtime Anda dapat:
- Memberikan nilai yang berbeda kepada skrip dan tugas saat runtime
- Mengontrol jenis parameter, rentang yang diizinkan, dan default
- Memilih pekerjaan dan tahapan secara dinamis dengan ekspresi templat
Anda dapat menentukan parameter dalam templat dan di alur. Parameter memiliki jenis data seperti angka dan string, dan dapat dibatasi untuk subset nilai. Bagian parameters
dalam YAML menentukan parameter apa yang tersedia.
Parameter hanya tersedia pada waktu penguraian templat. Parameter diperluas tepat sebelum alur berjalan sehingga nilai yang dikelilingi oleh ${{ }}
diganti dengan nilai parameter. Gunakan variabel jika Anda memerlukan nilai Anda agar lebih tersedia secara luas selama eksekusi alur Anda.
Catatan
Panduan ini tidak berlaku untuk alur klasik. Untuk parameter dalam alur klasik, lihat Parameter proses (klasik).
Parameter harus berisi nama dan jenis data. Parameter tidak boleh opsional. Nilai default perlu ditetapkan dalam file YAML Anda atau saat Anda menjalankan alur Anda. Jika Anda tidak menetapkan nilai default atau diatur default
ke false
, nilai pertama yang tersedia akan digunakan.
Gunakan templateContext untuk meneruskan properti tambahan ke tahapan, langkah, dan pekerjaan yang digunakan sebagai parameter dalam templat.
Menggunakan parameter dalam alur
Atur parameter runtime di awal YAML.
Contoh alur ini mencakup image
parameter dengan tiga agen yang dihosting sebagai string
opsi. Di bagian pekerjaan, pool
nilai menentukan agen dari parameter yang digunakan untuk menjalankan pekerjaan. trigger
diatur ke tidak ada sehingga Anda dapat memilih nilai image
saat Anda memicu alur anda secara manual untuk dijalankan.
parameters:
- name: image
displayName: Pool Image
type: string
default: ubuntu-latest
values:
- windows-latest
- ubuntu-latest
- macOS-latest
trigger: none
jobs:
- job: build
displayName: build
pool:
vmImage: ${{ parameters.image }}
steps:
- script: echo building $(Build.BuildNumber) with ${{ parameters.image }}
Saat alur berjalan, Anda memilih Gambar Kumpulan. Jika Anda tidak membuat pilihan, opsi default, ubuntu-latest
akan digunakan.
Menggunakan kondisi dengan parameter
Anda juga dapat menggunakan parameter sebagai bagian dari logika bersyarah. Dengan kondisional, bagian dari YAML berjalan jika memenuhi if
kriteria.
Menggunakan parameter untuk menentukan langkah-langkah apa yang dijalankan
Alur ini menambahkan parameter boolean kedua, test
, yang dapat digunakan untuk mengontrol apakah akan menjalankan pengujian dalam alur atau tidak. Ketika nilai test
benar, langkah yang menghasilkan Menjalankan semua pengujian berjalan.
parameters:
- name: image
displayName: Pool Image
values:
- windows-latest
- ubuntu-latest
- macOS-latest
- name: test
displayName: Run Tests?
type: boolean
default: false
trigger: none
jobs:
- job: build
displayName: Build and Test
pool:
vmImage: ${{ parameters.image }}
steps:
- script: echo building $(Build.BuildNumber)
- ${{ if eq(parameters.test, true) }}:
- script: echo "Running all the tests"
Gunakan parameter untuk mengatur konfigurasi apa yang digunakan
Anda juga dapat menggunakan parameter untuk mengatur pekerjaan mana yang berjalan. Dalam contoh ini, arsitektur yang berbeda dibangun tergantung pada nilai config
parameter, yang merupakan string
jenis. Secara default, arsitektur x86
dan x64
membangun.
parameters:
- name: configs
type: string
default: 'x86,x64'
trigger: none
jobs:
- ${{ if contains(parameters.configs, 'x86') }}:
- job: x86
steps:
- script: echo Building x86...
- ${{ if contains(parameters.configs, 'x64') }}:
- job: x64
steps:
- script: echo Building x64...
- ${{ if contains(parameters.configs, 'arm') }}:
- job: arm
steps:
- script: echo Building arm...
Mengecualikan tahap secara selektif
Anda juga dapat menggunakan parameter untuk mengatur apakah tahap berjalan. Dalam contoh ini, ada alur dengan empat tahap dan pekerjaan yang berbeda untuk setiap tahap. Tahap Uji Performa berjalan jika parameternya runPerfTests
benar. Nilai runPerfTests
default adalah false sehingga tanpa pembaruan apa pun, hanya tiga dari empat tahap yang dijalankan.
parameters:
- name: runPerfTests
type: boolean
default: false
trigger: none
stages:
- stage: Build
displayName: Build
jobs:
- job: Build
steps:
- script: echo running Build
- stage: UnitTest
displayName: Unit Test
dependsOn: Build
jobs:
- job: UnitTest
steps:
- script: echo running UnitTest
- ${{ if eq(parameters.runPerfTests, true) }}:
- stage: PerfTest
displayName: Performance Test
dependsOn: Build
jobs:
- job: PerfTest
steps:
- script: echo running PerfTest
- stage: Deploy
displayName: Deploy
dependsOn: UnitTest
jobs:
- job: Deploy
steps:
- script: echo running UnitTest
Perulangan melalui parameter
Anda juga dapat mengulangi parameter string, angka, dan boolean Anda.
Dalam contoh ini, Anda mengulangi parameter dan mencetak nama dan nilai setiap parameter. Ada empat parameter yang berbeda dan masing-masing mewakili jenis yang berbeda. myStringName
adalah string baris tunggal. myMultiString
adalah string multibaris. myNumber
adalah angka. myBoolean
adalah nilai boolean. Di bagian langkah-langkah, tugas skrip menghasilkan kunci dan nilai setiap parameter.
# start.yaml
parameters:
- name: myStringName
type: string
default: a string value
- 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
steps:
- ${{ each parameter in parameters }}:
- script: echo ${{ parameter.Key }}
- script: echo ${{ parameter.Value }}
# azure-pipeline.yaml
trigger: none
extends:
template: start.yaml
Periksa objek parameter kosong
Anda dapat menggunakan length()
ekspresi untuk memeriksa apakah parameter objek tidak memiliki nilai.
parameters:
- name: foo
type: object
default: []
steps:
- checkout: none
- ${{ if eq(length(parameters.foo), 0) }}:
- script: echo Foo is empty
displayName: Foo is empty
Menyertakan daftar langkah secara dinamis dengan parameter stepList
Dalam contoh ini, stepList
jenis parameter digunakan untuk menyertakan daftar langkah-langkah secara dinamis dalam proses build.
- Alur utama (
azure-pipelines.yml
) mendefinisikan dua pekerjaan: membangun dan menyebarkan. - Pekerjaan build menggunakan templat (
build.yml
) dan meneruskan daftar tugas build menggunakanstepList
parameter . build.yml
Templat secara dinamis menyertakan langkah-langkah yang ditentukan dalambuild_tasks
parameter .
#azure-pipelines.yml
trigger:
- main
jobs:
- job: build
displayName: 'Build .NET Core Application'
pool:
vmImage: 'ubuntu-latest'
steps:
- checkout: self
- template: build.yml
parameters:
build_tasks:
- task: DotNetCoreCLI@2
displayName: 'Restore'
inputs:
command: 'restore'
projects: '**/*.csproj'
- task: DotNetCoreCLI@2
displayName: 'Build'
inputs:
command: 'build'
arguments: '--no-restore'
projects: '**/*.csproj'
- job: deploy
displayName: 'Pack for Azure App Service deployment'
dependsOn: build
pool:
vmImage: 'ubuntu-latest'
steps:
- download: current
artifact: drop
Templat build.yml
:
- Menentukan parameter
build_tasks
dengan jenis stepList dan daftar kosong default. - Mengatur .NET Core SDK ke 6.x.
- Mengulangi setiap langkah dalam
build_tasks
parameter. - Menjalankan setiap langkah yang
build_tasks
ditentukan dalam daftar.
#build.yml
parameters:
- name: build_tasks
type: stepList
default: []
steps:
- task: UseDotNet@2
displayName: 'Use .NET Core SDK'
inputs:
packageType: 'sdk'
version: '6.x'
- ${{ each step in parameters.build_tasks }}:
- ${{ step }}
- task: DotNetCoreCLI@2
displayName: 'Publish'
inputs:
command: 'publish'
arguments: '--configuration Release --output $(Build.ArtifactStagingDirectory)'
projects: '**/*.csproj'
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact'
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
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 # 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