Sdílet prostřednictvím


Parametry modulu runtime

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

Parametry modulu runtime umožňují mít větší kontrolu nad hodnotami, které se dají předat do kanálu. S parametry modulu runtime můžete:

  • Zadání různých hodnot skriptům a úlohám za běhu
  • Řízení typů parametrů, povolených rozsahů a výchozích hodnot
  • Dynamické výběr úloh a fází pomocí výrazů šablony

Parametry můžete zadat v šablonách a v kanálu. Parametry mají datové typy, jako je číslo a řetězec, a mohou být omezeny na podmnožinu hodnot. Část parameters v YAML definuje, jaké parametry jsou k dispozici.

Parametry jsou k dispozici pouze v době analýzy šablony. Parametry se rozbalí těsně před spuštěním kanálu, aby hodnoty obklopené ${{ }} hodnotami parametrů byly nahrazeny. Proměnné použijte, pokud potřebujete, aby vaše hodnoty byly při spuštění kanálu obecněji dostupné.

Poznámka:

Tyto pokyny se nevztahují na klasické kanály. Parametry v klasických kanálech najdete v tématu Parametry procesu (klasické).

Parametry musí obsahovat název a datový typ. Parametry nemohou být volitelné. Výchozí hodnota musí být přiřazena v souboru YAML nebo při spuštění kanálu. Pokud nepřiřadíte výchozí hodnotu nebo ji nenastavíte default false, použije se první dostupná hodnota.

Pomocí templateContext předejte další vlastnosti fázím, krokům a úlohám, které se používají jako parametry v šabloně.

Použití parametrů v kanálech

Na začátku YAML nastavte parametry modulu runtime.

Tento ukázkový kanál obsahuje image parametr se třemi hostovanými agenty jako string možnosti. V části pool úlohy určuje hodnota agenta z parametru použitého ke spuštění úlohy. Hodnota trigger je nastavená na hodnotu žádná, abyste mohli vybrat hodnotu image při ručním spuštění kanálu.

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

Na stránce spuštění kanálu vyberte Spustit kanál , aby se kanál spustil. Zobrazí se možnost vybrat image fondu. Pokud výběr nevyužíváte, použije se výchozí možnost ubuntu-latest . Pokud kanál spustíte z editoru YAML, nebudete mít možnost vybrat image fondu.

parametry modulu runtime

Použití podmíněných výrazů s parametry

Parametry můžete použít také jako součást podmíněné logiky. U podmíněných výrazů se část YAML spustí, pokud splňuje if kritéria.

Použití parametrů k určení kroků spuštění

Tento kanál přidá druhý logický parametr, testkterý se dá použít k řízení, jestli chcete spustit testy v kanálu nebo ne. Pokud je hodnota test true, krok, který vypíše spuštění všech testů .

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"

Použití parametrů k nastavení použité konfigurace

K nastavení spuštění úlohy můžete použít také parametry. V tomto příkladu se různé architektury staví v závislosti na hodnotě parametru config , což je string typ. Ve výchozím nastavení se sestavují jak architektury x86 x64 , tak i architektury.

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

Selektivní vyloučení fáze

Pomocí parametrů můžete také nastavit, jestli se fáze spustí. V tomto příkladu je kanál se čtyřmi fázemi a různými úlohami pro každou fázi. Fáze testu výkonnosti se spustí, pokud je parametr runPerfTests pravdivý. Výchozí hodnota runPerfTests je false, takže bez aktualizací se spustí pouze tři ze čtyř fází.

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

Procházení parametrů ve smyčce

Můžete také procházet řetězec, číslo a logické parametry.

V tomto příkladu procházíte parametry a vytisknete název a hodnotu každého parametru. Existují čtyři různé parametry a každý z nich představuje jiný typ. myStringName je řetězec s jedním řádkem. myMultiString je víceřádkový řetězec. myNumber je číslo. myBoolean je logická hodnota. V části kroků úlohy skriptu vypíše klíč a hodnotu každého parametru.

# 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

Kontrola prázdného objektu parametru

Pomocí výrazu length() můžete zkontrolovat, jestli parametr objektu nemá žádnou hodnotu.

parameters:
- name: foo
  type: object
  default: []

steps:
- checkout: none
- ${{ if eq(length(parameters.foo), 0) }}:
  - script: echo Foo is empty
    displayName: Foo is empty

Dynamické zahrnutí seznamu kroků s parametrem stepList

V tomto příkladu se typ parametru stepList používá k dynamickému zahrnutí seznamu kroků v procesu sestavení.

  • Hlavní kanál (azure-pipelines.yml) definuje dvě úlohy: sestavení a nasazení.
  • Úloha sestavení používá šablonu (build.yml) a předá seznam úkolů sestavení pomocí parametru stepList .
  • Šablona build.yml dynamicky zahrnuje kroky definované v parametru build_tasks .
#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

Šablona build.yml :

  • Definuje parametr build_tasks s typem stepList a výchozím prázdným seznamem.
  • Nastaví sadu .NET Core SDK na 6.x.
  • Iteruje jednotlivé kroky v parametru build_tasks .
  • Provede každý krok definovaný v build_tasks seznamu.
#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'

Datové typy parametrů

Datový typ Notes
string string
number může být omezena na values:, jinak je přijat jakýkoli řetězec typu číslo-like
boolean true nebo false
object libovolná struktura YAML
step jeden krok
stepList posloupnost kroků
job jedna úloha
jobList pořadí úloh
deployment jedna úloha nasazení
deploymentList posloupnost úloh nasazení
stage jedna fáze
stageList posloupnost fází

Všechny datové typy stepList, stepList, jobList, deployment, deploymentList, stage a stageList používají standardní formát schématu YAML. Tento příklad obsahuje řetězec, číslo, logickou hodnotu, objekt, krok a 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