Aracılığıyla paylaş


Şablon ifadeleri

İşlem hattı başlatma sırasında değerlerin dinamik olarak nasıl çözümleneceğini belirtmek için şablon ifadelerini kullanın. Şablon ifadenizi şu söz diziminde kaydır: ${{ }}.

Şablon ifadeleri şablon parametrelerini ve değişkenleri genişletebilir. Parametreleri kullanarak bir şablonun nasıl genişletildiğinden etkileyebilirsiniz. nesnesi, parameters bir ifadedeki variables nesne gibi çalışır. Şablon ifadelerinde yalnızca önceden tanımlanmış değişkenler kullanılabilir.

Not

İfadeler yalnızca , jobs, stepsve containers (içinderesources) için stagesgenişletilir. Örneğin, içinde trigger bir ifade veya gibi repositoriesbir kaynak kullanamazsınız. Ayrıca Azure DevOps 2020 RTW'de içinde containersşablon ifadelerini kullanamazsınız.

Örneğin, bir şablon tanımlarsınız:

# File: steps/msbuild.yml

parameters:
- name: 'solution'
  default: '**/*.sln'
  type: string

steps:
- task: msbuild@1
  inputs:
    solution: ${{ parameters['solution'] }}  # index syntax
- task: vstest@2
  inputs:
    solution: ${{ parameters.solution }}  # property dereference syntax

Ardından şablona başvurur ve isteğe bağlı solution parametresini geçirirsiniz:

# File: azure-pipelines.yml

steps:
- template: steps/msbuild.yml
  parameters:
    solution: my.sln

Bağlam

Şablon ifadesinde, geçirilen parametrelerin parameters değerlerini içeren bağlama erişiminiz vardır. Buna ek olarak, YAML dosyasında belirtilen tüm değişkenleri içeren bağlama ve önceden tanımlanmış değişkenlerin birçoğuna (bu makaledeki her değişkene not edilir) erişebilirsinizvariables. Önemli olan, işlem hattında depolananlar gibi çalışma zamanı değişkenlerine sahip olmaması veya çalıştırma başlattığınızda verilmesidir. Şablon genişletme, çalıştırmanın erken aşamalarında gerçekleştiğinden bu değişkenler kullanılamaz.

Şablon ifadesi işlevleri

Şablonlarınızda genel işlevleri kullanabilirsiniz. Birkaç şablon ifadesi işlevi de kullanabilirsiniz.

format

  • Basit dize belirteci değiştirme
  • En düşük parametreler: 2. En fazla parametre: N
  • Örnek: ${{ format('{0} Build', parameters.os) }}'Windows Build'

Coalesce

  • İlk boş olmayan, null olmayan dize bağımsız değişkenini değerlendirir
  • En düşük parametreler: 2. En fazla parametre: N
  • Örnek:
parameters:
- name: 'restoreProjects'
  default: ''
  type: string
- name: 'buildProjects'
  default: ''
  type: string

steps:
- script: echo ${{ coalesce(parameters.foo, parameters.bar, 'Nothing to see') }}

Ekleme

YAML işlem hattının yapısını değiştirmek için şablon ifadelerini kullanabilirsiniz. Örneğin, bir diziye eklemek için:

# File: jobs/build.yml

parameters:
- name: 'preBuild'
  type: stepList
  default: []
- name: 'preTest'
  type: stepList
  default: []
- name: 'preSign'
  type: stepList
  default: []

jobs:
- job: Build
  pool:
    vmImage: 'windows-latest'
  steps:
  - script: cred-scan
  - ${{ parameters.preBuild }}
  - task: msbuild@1
  - ${{ parameters.preTest }}
  - task: vstest@2
  - ${{ parameters.preSign }}
  - script: sign
# File: .vsts.ci.yml

jobs:
- template: jobs/build.yml
  parameters:
    preBuild:
    - script: echo hello from pre-build
    preTest:
    - script: echo hello from pre-test

Dizi bir diziye eklendiğinde, iç içe dizi düzleştirilir.

Eşlemeye eklemek için özel özelliğini ${{ insert }}kullanın.

# Default values
parameters:
- name: 'additionalVariables'
  type: object
  default: {}

jobs:
- job: build
  variables:
    configuration: debug
    arch: x86
    ${{ insert }}: ${{ parameters.additionalVariables }}
  steps:
  - task: msbuild@1
  - task: vstest@2
jobs:
- template: jobs/build.yml
  parameters:
    additionalVariables:
      TEST_SUITE: L0,L1

Koşullu ekleme

Şablondaki bir diziye veya eşlemeye koşullu olarak eklemek istiyorsanız eklemeleri ve ifade değerlendirmesini kullanın. Şablon söz dizimini kullandığınız if sürece, şablonların dışındaki deyimleri de kullanabilirsiniz.

Örneğin, şablondaki bir diziye eklemek için:

# File: steps/build.yml

parameters:
- name: 'toolset'
  default: msbuild
  type: string
  values:
  - msbuild
  - dotnet

steps:
# msbuild
- ${{ if eq(parameters.toolset, 'msbuild') }}:
  - task: msbuild@1
  - task: vstest@2

# dotnet
- ${{ if eq(parameters.toolset, 'dotnet') }}:
  - task: dotnet@1
    inputs:
      command: build
  - task: dotnet@1
    inputs:
      command: test
# File: azure-pipelines.yml

steps:
- template: steps/build.yml
  parameters:
    toolset: dotnet

Örneğin, bir şablondaki eşlemeye eklemek için:

# File: steps/build.yml

parameters:
- name: 'debug'
  type: boolean
  default: false

steps:
- script: tool
  env:
    ${{ if eq(parameters.debug, true) }}:
      TOOL_DEBUG: true
      TOOL_DEBUG_DIR: _dbg
steps:
- template: steps/build.yml
  parameters:
    debug: true

Değişkenler için koşullu ekleme de kullanabilirsiniz. Bu örnekte, start her zaman yazdırılır ve this is a test yalnızca değişkeni eşit olduğunda foo yazdırılır test.

variables:
  - name: foo
    value: test

pool:
  vmImage: 'ubuntu-latest'

steps:
- script: echo "start" # always runs
- ${{ if eq(variables.foo, 'test') }}:
  - script: echo "this is a test" # runs when foo=test

Yinelemeli ekleme

yönergesi each , YAML dizisini (dizi) veya eşlemeyi (anahtar-değer çiftleri) temel alarak yinelemeli eklemeye izin verir.

Örneğin, her işin adımlarını diğer ön ve son adımlarla kaydırabilirsiniz:

# job.yml
parameters:
- name: 'jobs'
  type: jobList
  default: []

jobs:
- ${{ each job in parameters.jobs }}: # Each job
  - ${{ each pair in job }}:          # Insert all properties other than "steps"
      ${{ if ne(pair.key, 'steps') }}:
        ${{ pair.key }}: ${{ pair.value }}
    steps:                            # Wrap the steps
    - task: SetupMyBuildTools@1       # Pre steps
    - ${{ job.steps }}                # Users steps
    - task: PublishMyTelemetry@1      # Post steps
      condition: always()
# azure-pipelines.yml
jobs:
- template: job.yml
  parameters:
    jobs:
    - job: A
      steps:
      - script: echo This will get sandwiched between SetupMyBuildTools and PublishMyTelemetry.
    - job: B
      steps:
      - script: echo So will this!

Ayrıca, yinelediğiniz her ne olursa olsun özelliklerini değiştirebilirsiniz. Örneğin, daha fazla bağımlılık eklemek için:

# job.yml
parameters:
- name: 'jobs'
  type: jobList
  default: []

jobs:
- job: SomeSpecialTool                # Run your special tool in its own job first
  steps:
  - task: RunSpecialTool@1
- ${{ each job in parameters.jobs }}: # Then do each job
  - ${{ each pair in job }}:          # Insert all properties other than "dependsOn"
      ${{ if ne(pair.key, 'dependsOn') }}:
        ${{ pair.key }}: ${{ pair.value }}
    dependsOn:                        # Inject dependency
    - SomeSpecialTool
    - ${{ if job.dependsOn }}:
      - ${{ job.dependsOn }}
# azure-pipelines.yml
jobs:
- template: job.yml
  parameters:
    jobs:
    - job: A
      steps:
      - script: echo This job depends on SomeSpecialTool, even though it's not explicitly shown here.
    - job: B
      dependsOn:
      - A
      steps:
      - script: echo This job depends on both Job A and on SomeSpecialTool.

Bir değerin kaçışı

tam anlamıyla içeren ${{bir değerden kurtulmanız gerekiyorsa, değeri bir ifade dizesine sarmalayın. Örneğin ${{ 'my${{value' }} veya ${{ 'my${{value with a '' single quote too' }}