Bagikan melalui


Parameter runtime

Layanan Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022

Parameter runtime memberi Anda kontrol lebih besar atas nilai yang Anda teruskan ke alur. Dengan parameter runtime, Anda dapat:

  • Memberikan nilai yang berbeda kepada skrip dan tugas saat runtime
  • Mengontrol jenis parameter, rentang yang diizinkan, dan nilai default
  • Memilih pekerjaan dan tahapan secara dinamis dengan ekspresi templat

Anda dapat menentukan parameter dalam templat dan di alur kerja. 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 selama penguraian templat. Mereka memperluas sebelum alur berjalan, mengganti nilai yang dikelilingi oleh ${{ }} dengan nilai parameter. Gunakan variabel jika nilai Anda perlu tersedia di seluruh eksekusi alur.

Catatan

Panduan ini tidak berlaku untuk alur klasik. Untuk parameter dalam alur klasik, lihat Parameter proses (klasik).

Parameter harus berisi nama dan jenis data. Anda tidak dapat membuat parameter opsional. Anda perlu menetapkan nilai default dalam file YAML Anda atau saat menjalankan alur Anda. Jika Anda tidak menetapkan nilai default atau diatur default ke false, nilai pertama yang tersedia akan digunakan.

Gunakan templateContext untuk meneruskan lebih banyak properti ke tahapan, langkah, dan pekerjaan yang digunakan sebagai parameter dalam templat.

Apa perbedaan antara parameter dan variabel?

Tabel berikut menyoroti perbedaan utama antara parameter dan variabel di Azure Pipelines.

Fitur Parameter-parameternya Variabels
Waktu Evaluasi Penguraian templat (antrean) Evaluasi bergantung pada sintaksis. Variabel yang ditentukan dengan sintaks makro ($(var)) mengevaluasi pada runtime sebelum tugas berjalan dan digunakan dalam skrip dan tugas. Variabel yang ditentukan dengan ekspresi runtime ($[variables.var]) dievaluasi sebelum pekerjaan atau tahap berjalan dan digunakan dalam kondisi atau penetapan variabel dinamis.
Mutabilitas Tidak dapat diubah setelah antrean Variabel yang ditentukan pengguna, lingkungan, dan output dapat diperbarui secara dinamis selama eksekusi alur
Paparan UI selama eksekusi Ditampilkan di Jalankan UI Alur dan dapat diatur sebelum dijalankan Diekspos selama eksekusi jika diatur dalam UI Alur sebagai dapat diganti
Nilai rahasia Tidak ada dukungan untuk nilai rahasia Dapat diatur sebagai rahasia

Menggunakan parameter dalam jalur pemrosesan

Atur parameter runtime di awal file YAML.

Contoh alur ini mencakup image parameter dengan tiga agen ter-hosting sebagai opsi string. Di bagian tugas, nilai pool menentukan agen dari parameter yang digunakan untuk menjalankan tugas. 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 }}

Dari halaman menjalankan pipeline, pilih Jalankan pipeline untuk menjalankan pipeline. Anda melihat opsi untuk memilih Gambar Kumpulan. Jika Anda tidak membuat pilihan, opsi ubuntu-latest default akan digunakan. Anda tidak dapat memilih Gambar Kumpulan jika Anda menjalankan alur dari editor YAML.

parameter saat runtime

Menggunakan kondisional dengan parameter

Anda juga dapat menggunakan parameter sebagai bagian dari logika kondisional. Dengan kondisional, bagian dari YAML berjalan jika memenuhi kriteria if.

Menggunakan parameter untuk menentukan langkah-langkah apa yang dijalankan

Alur ini menambahkan parameter boolean kedua, test, yang mengontrol apakah akan menjalankan pengujian dalam alur. 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 menentukan pekerjaan mana yang dijalankan. Dalam contoh ini, arsitektur yang berbeda dibangun berdasarkan nilai parameter config, yang berjenis string. Secara bawaan, arsitektur x86 dan x64 dibangun.

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 menentukan apakah tahap dijalankan. 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, jadi hanya tiga dari empat tahap yang dijalankan kecuali Anda memperbarui nilai.

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

Periksa objek parameter kosong

length() Gunakan 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

Jenis data parameter

Jenis Data Catatan
string string
stringList daftar item, beberapa dapat dipilih. Tidak tersedia dalam templat
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 tugas penyebaran
deploymentList urutan pekerjaan penyebaran
stage satu tahap
stageList urutan tahapan

Jenis stepdata , , stepListjob, jobListdeployment, deploymentList, stage, stringList, dan stageList semuanya menggunakan format skema YAML standar. Contoh ini mencakup string, , numberboolean, object, step, dan stepList.

Catatan

Jenis stringList data tidak tersedia dalam templat. Gunakan jenis data object dalam templat sebagai pengganti.

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', only one default
  values:  # Allowed values for 'myMultiString'
  - default  
  - ubuntu  

- name: myStringlist # Define a parameter named 'myStringlist'
  type: stringList # The parameter type is stringList
  displayName: Regions
  values: # Allowed values for 'myStringlist'
    - WUS
    - CUS
    - EUS
  default: # Default values
    - WUS
    - CUS
    
- 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

- job: stringList  # Define a job named 'stringList'
  steps:
  - ${{ each region in parameters.myStringlist }}:
      - script: echo ${{region}}

Praktik terbaik keamanan parameter

Saat Anda menggunakan parameter runtime di Azure Pipelines, jangan meneruskan rahasia atau nilai sensitif sebagai input parameter. Nilai parameter diperluas pada waktu penguraian templat dan mungkin diekspos dalam log atau output alur.

Selalu validasi dan batasi nilai parameter yang diizinkan untuk mencegah injeksi input yang tidak terduga atau tidak aman. Ikuti prinsip hak istimewa paling sedikit saat memberikan akses ke sumber daya alur.

Untuk kredensial, token, atau data rahasia lainnya, gunakan variabel alur yang ditandai sebagai rahasia dan disimpan di Azure Key Vault, UI Alur, atau grup variabel. Untuk informasi selengkapnya, lihat Melindungi rahasia di Azure Pipelines.