Dela via


Körningsparametrar

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

Med körningsparametrar får du mer kontroll över de värden som du skickar till en pipeline. Med körningsparametrar kan du:

  • Ange olika värden för skript och uppgifter vid körningstid
  • Kontrollera parametertyper, tillåtna intervall och standardvärden
  • Välj jobb och steg dynamiskt med malluttryck

Du kan ange parametrar i mallar och i pipelinen. Parametrar har datatyper som tal och sträng, och de kan begränsas till en delmängd av värden. Avsnittet parameters i en YAML definierar vilka parametrar som är tillgängliga.

Parametrar är endast tillgängliga under mallparsning. De expanderar innan pipelinen körs och ersätter värden omgivna av ${{ }} med parametervärden. Använd variabler om dina värden måste vara tillgängliga under hela pipelinekörningen.

Kommentar

Den här vägledningen gäller inte för klassiska pipelines. För parametrar i klassiska pipelines, se Processparametrar (klassisk).

Parametrarna måste innehålla ett namn och en datatyp. Du kan inte göra parametrar valfria. Du måste tilldela ett standardvärde i YAML-filen eller när du kör pipelinen. Om du inte tilldelar ett standardvärde eller anger default till falseanvänds det första tillgängliga värdet.

Använd templateContext för att skicka fler egenskaper till steg, steg och jobb som används som parametrar i en mall.

Vad är skillnaden mellan parametrar och variabler?

I följande tabell visas de viktigaste skillnaderna mellan parametrar och variabler i Azure Pipelines.

Feature Parameterar Variabler
Utvärderingstid Mallparsning (kö) Utvärderingen är syntaxberoende. Variabler som definieras med makrosyntax ($(var)) utvärderas vid körning innan en aktivitet körs och används i skript och aktiviteter. Variabler som definieras med körningsuttryck ($[variables.var]) utvärderas innan ett jobb eller en fas körs och används i villkor eller dynamisk variabeltilldelning.
Föränderlighet Oföränderlig efter kö Användardefinierade variabler, miljö- och utdatavariabler kan uppdateras dynamiskt under pipelinekörning
Exponering av användargränssnitt under körning Visas i användargränssnittet för körningspipelinen och kan ställas in före en körning Exponeras under körning om det anges i Pipeline-användargränssnittet som åsidosättande
Hemliga värden Inget stöd för hemliga värden Kan anges som hemligheter

Använd parametrar i pipelines

Ange körningsparametrar i början av en YAML-fil.

Den här exempelpipelinen innehåller en image parameter med tre värdbaserade agenter som string alternativ. I avsnittet Jobb anger pool-värdet agenten från den parameter som används för att köra jobbet. trigger är inställt på 'ingen' så att du kan välja värdet image när du manuellt utlöser körning av pipelinen.

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

På sidan pipelinekörningar väljer du Kör pipeline för att köra pipelinen. Du ser alternativet för att välja Poolbild. Om du inte gör något val används standardalternativet ubuntu-latest . Du kan inte välja en poolbild om du kör din pipeline från YAML-redigeraren.

körningsparametrar

Använda villkor med parametrar

Du kan också använda parametrar som en del av villkorsstyrd logik. Med villkor körs en del av en YAML-fil om den if uppfyller kriterierna.

Använda parametrar för att avgöra vilka steg som körs

Den här pipelinen lägger till en andra boolesk parameter, test, som styr om tester ska köras i pipelinen. När test är sant körs steget som resulterar i Kör alla tester.

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"

Använd parametrar för att ange vilken konfiguration som används

Du kan också använda parametrar för att ange vilket jobb som ska köras. I det här exemplet bygger olika arkitekturer beroende på värdet för config parametern, som är en string typ. Som standard byggs både arkitekturerna x86 och x64 .

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

Selektivt exkludera ett stadium

Du kan också använda parametrar för att ange om en fas körs. I det här exemplet finns det en pipeline med fyra steg och olika jobb för varje steg. Prestandatestfasen körs om parametern runPerfTests är sann. Standardvärdet runPerfTests för är falskt, så endast tre av de fyra stegen körs om du inte uppdaterar värdet.

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

Sök efter ett tomt parameterobjekt

Använd length() för att kontrollera om en objektparameter inte har något värde.

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

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

Parameterdatatyper

Datatyp Anteckningar
string sträng
stringList en lista med objekt där flera kan väljas. Inte tillgängligt i mallar
number kan begränsas till values:, annars accepteras en talliknande sträng
boolean true eller false
object någon YAML-struktur
step ett enda steg
stepList sekvens med steg
job ett enda jobb
jobList sekvens av jobb
deployment ett enda distributionsjobb
deploymentList sekvens med distributionsjobb
stage en enda fas
stageList sekvens av faser

Datatyperna step, , stepListjob, jobList, deploymentdeploymentList, stageoch stringListanvänder stageList yaml-standardschemaformat. I det här exemplet ingår string, number, boolean, object, stepoch stepList.

Kommentar

Datatypen stringList är inte tillgänglig i mallar. object Använd datatypen i mallar i stället.

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

Metodtips för parametersäkerhet

När du använder körningsparametrar i Azure Pipelines ska du inte skicka hemligheter eller känsliga värden som parameterindata. Parametervärden expanderas vid mallparsningstiden och kan exponeras i pipelineloggar eller utdata.

Verifiera och begränsa alltid tillåtna parametervärden för att förhindra inmatning av oväntade eller osäkra indata. Följ principen om lägsta behörighet när du beviljar åtkomst till pipelineresurser.

För autentiseringsuppgifter, token eller andra konfidentiella data använder du pipelinevariabler som markerats som hemligheter och lagras i Azure Key Vault, pipelinegränssnittet eller variabelgrupper. Mer information finns i Skydda hemligheter i Azure Pipelines.