Bagikan melalui


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.

parameter runtime

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 menggunakan stepList parameter .
  • build.yml Templat secara dinamis menyertakan langkah-langkah yang ditentukan dalam build_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