Ş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
, steps
ve containers
(içinderesources
) için stages
genişletilir.
Örneğin, içinde trigger
bir ifade veya gibi repositories
bir 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' }}
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin