Laufzeitparameter

Azure DevOps Services | Azure DevOps Server 2020

Laufzeitparameter ermöglichen Es Ihnen, mehr Kontrolle darüber zu haben, welche Werte an eine Pipeline übergeben werden können. Mit Laufzeitparametern können Sie Folgendes ausführen:

  • Geben Sie verschiedene Werte für Skripts und Aufgaben zur Laufzeit an
  • Steuerelementparametertypen, zulässige Bereiche und Standardeinstellungen
  • Dynamisches Auswählen von Aufträgen und Phasen mit Vorlagenausdrucken

Sie können Parameter in Vorlagen und in der Pipeline angeben. Parameter verfügen über Datentypen wie Zahl und Zeichenfolge, und sie können auf eine Teilmenge von Werten beschränkt werden. Der parameters Abschnitt in einem YAML definiert, welche Parameter verfügbar sind.

Parameter sind nur zu Vorlagenanalysezeit verfügbar. Parameter werden direkt vor der Ausführung der Pipeline erweitert, sodass Werte, die umgeben ${{ }} sind, durch Parameterwerte ersetzt werden. Verwenden Sie Variablen , wenn Ihre Werte während der Pipelineausführung häufiger verfügbar sein müssen.

Hinweis

Diese Anleitung gilt nicht für klassische Pipelines. Informationen zu Parametern in klassischen Pipelines finden Sie unter Prozessparameter (klassisch).

Parameter müssen einen Namen und einen Datentyp enthalten. Parameter können nicht optional sein. Ein Standardwert muss in Ihrer YAML-Datei zugewiesen werden oder wenn Sie Ihre Pipeline ausführen. Wenn Sie keinen Standardwert zuweisen oder festlegen defaultfalse, wird der erste verfügbare Wert verwendet.

Verwenden von Parametern in Pipelines

Legen Sie Laufzeitparameter am Anfang eines YAML fest. In dieser Beispielpipeline wird der Wert von image und dann der Wert im Auftrag ausgegeben. Der trigger Wert wird auf keine festgelegt, sodass Sie den Wert image auswählen können, wenn Sie Ihre Pipeline manuell auslösen, um ausgeführt zu werden.

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

Wenn die Pipeline ausgeführt wird, wählen Sie das Poolimage aus. Wenn Sie keine Auswahl vornehmen, wird die Standardoption ubuntu-latest verwendet.

runtime parameters

Verwenden von Bedingten mit Parametern

Sie können auch Parameter als Teil der bedingten Logik verwenden. Bei bedingten Bedingungen wird ein Teil eines YAML nur ausgeführt, wenn er die if Kriterien erfüllt.

Verwenden von Parametern, um zu bestimmen, welche Schritte ausgeführt werden

Diese Pipeline führt nur einen Schritt aus, wenn der boolesche Parameter test wahr ist.

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"

Verwenden von Parametern zum Festlegen der verwendeten Konfiguration

Sie können auch Parameter verwenden, um festzulegen, welche Aufgabe ausgeführt wird. In diesem Beispiel wird je nach Wert configvon einem anderen Auftrag ausgeführt.

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

Selektives Ausschließen einer Phase

Sie können auch Parameter verwenden, um festzulegen, ob eine Phase ausgeführt wird. In diesem Beispiel wird die Leistungstestphase ausgeführt, wenn der Parameter runPerfTests wahr ist.

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

Loop durch Parameter

Sie können auch ihre Zeichenfolgen, Zahlen und booleschen Parameter durchlaufen.

In diesem Beispiel durchlaufen Sie Parameter, und drucken Sie jeden Parameternamen und -wert aus.

# 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

Suchen nach einem leeren Parameterobjekt

Sie können den length()Ausdruck verwenden, um zu überprüfen, ob ein Objektparameter keinen Wert hat.

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

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

Parameterdatentypen

Datentyp Notizen
string Zeichenfolge
number kann auf values:, andernfalls wird jede zahlähnliche Zeichenfolge akzeptiert.
boolean true oder false
object beliebige YAML-Struktur
step ein einzelner Schritt
stepList Reihenfolge der Schritte
job ein einzelner Auftrag
jobList Reihenfolge der Aufträge
deployment Ein einzelner Bereitstellungsauftrag
deploymentList Reihenfolge der Bereitstellungsaufträge
stage eine einzelne Stufe
stageList Sequenz der Phasen

Der Schritt, SchrittList, Auftrag, JobList, Bereitstellung, DeploymentList, Phase und StageList-Datentypen verwenden alle Standard-YAML-Schemaformat. In diesem Beispiel sind Zeichenfolgen, Zahlen, Boolescher, Objekt, Schritt und StepList enthalten.

parameters:
- name: myString
  type: string
  default: a string
- 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
- name: myObject
  type: object
  default:
    foo: FOO
    bar: BAR
    things:
    - one
    - two
    - three
    nested:
      one: apple
      two: pear
      count: 3
- name: myStep
  type: step
  default:
    script: echo my step
- name: mySteplist
  type: stepList
  default:
    - script: echo step one
    - script: echo step two

trigger: none

jobs: 
- job: stepList
  steps: ${{ parameters.mySteplist }}
- job: myStep
  steps:
    - ${{ parameters.myStep }}

Häufig gestellte Fragen

Wie kann ich Variablen innerhalb von Vorlagen verwenden?

Es gibt Zeiten, in denen es nützlich sein kann, Parameter auf Werte basierend auf Variablen festzulegen. Parameter werden früh in der Verarbeitung einer Pipeline erweitert , sodass nicht alle Variablen verfügbar sind. Informationen dazu, welche vordefinierten Variablen in Vorlagen verfügbar sind, finden Sie unter Verwenden vordefinierter Variablen.

In diesem Beispiel werden die vordefinierten Variablen Build.SourceBranch und Build.Reason in Bedingungen in template.yml verwendet.

# File: azure-pipelines.yml
trigger:
- main

extends:
  template: template.yml
# File: template.yml
steps:
- script: echo Build.SourceBranch = $(Build.SourceBranch) # outputs refs/heads/main
- script: echo Build.Reason = $(Build.Reason) # outputs IndividualCI
- ${{ if eq(variables['Build.SourceBranch'], 'refs/heads/main') }}: 
  - script: echo I run only if Build.SourceBranch = refs/heads/main 
- ${{ if eq(variables['Build.Reason'], 'IndividualCI') }}: 
  - script: echo I run only if Build.Reason = IndividualCI 
- script: echo I run after the conditions