İfadeler

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

İfadeler, işlem hattı yazarken dize, boole veya sayı değeri belirtmeniz gereken birçok yerde kullanılabilir. İfadelerin en yaygın kullanımı, bir işin veya adımın çalıştırılıp çalıştırılmayacağını belirleme koşullarıdır .

# Expressions are used to define conditions for a step, job, or stage
steps:
- task: ...
  condition: <expression>

İfadelerin bir diğer yaygın kullanımı da değişkenleri tanımlamaktır. İfadeler derleme zamanında veya çalışma zamanında değerlendirilebilir. Derleme zamanı ifadeleri her yerde kullanılabilir; çalışma zamanı ifadeleri değişkenlerde ve koşullarda kullanılabilir. Çalışma zamanı ifadeleri, değişkenlerin ve durumun içeriğini hesaplamanın bir yolu olarak tasarlanmıştır (örnek: condition).

# Two examples of expressions used to define variables
# The first one, a, is evaluated when the YAML file is compiled into a plan.
# The second one, b, is evaluated at runtime.
# Note the syntax ${{}} for compile time and $[] for runtime expressions.
variables:
  a: ${{ <expression> }}
  b: $[ <expression> ]

Çalışma zamanı ve derleme zamanı ifade söz dizimleri arasındaki fark, öncelikle hangi bağlamın kullanılabilir olduğudur. Derleme zamanı ifadesinde ()${{ <expression> }} erişiminiz parameters vardır ve statik olarak tanımlanmıştır variables. Bir çalışma zamanı ifadesinde ()$[ <expression> ] daha fazla variables parametreye erişiminiz vardır ancak parametre yoktur.

Bu örnekte, çalışma zamanı ifadesi değerini $(isMain)ayarlar. Derleme ifadesindeki statik değişken değerini $(compileVar)ayarlar.

variables:
  staticVar: 'my value' # static variable
  compileVar: ${{ variables.staticVar }} # compile time expression
  isMain: $[eq(variables['Build.SourceBranch'], 'refs/heads/main')] # runtime expression

steps:
  - script: |
      echo ${{variables.staticVar}} # outputs my value
      echo $(compileVar) # outputs my value
      echo $(isMain) # outputs True

İfade değişmez değer, değişken başvurusu, bağımlılık başvurusu, işlev veya bunların geçerli bir iç içe birleşimi olabilir.

Değişmez Değerler

bir ifadenin parçası olarak boole, null, sayı, dize veya sürüm değişmez değerlerini kullanabilirsiniz.

# Examples
variables:
  someBoolean: ${{ true }} # case insensitive, so True or TRUE also works
  someNumber: ${{ -1.2 }}
  someString: ${{ 'a b c' }}
  someVersion: ${{ 1.2.3 }}

Boole

True ve False boole değişmez değerleridir.

Null

Null, sözlük eksiklerinden döndürülen özel bir değişmez değer ifadesidir, örneğin (variables['noSuch']). Null bir ifadenin çıktısı olabilir ancak doğrudan bir ifade içinde çağrılamaz.

Sayı

'-', '.' veya '0' ile '9' arasında başlar.

Dize

Tek tırnak içine alınmalıdır. Örneğin: 'this is a string'.

Değişmez değeri tek tırnak işaretiyle ifade etmek için tek tırnak işaretinden kurtul. Örneğin: 'It''s OK if they''re using contractions.'.

Çok satırlı dizeler için bir kanal karakteri (|) kullanabilirsiniz.

myKey: |
  one
  two
  three

Sürüm

Dört segmente kadar olan bir sürüm numarası. Bir sayı ile başlamalı ve iki veya üç nokta (.) karakter içermelidir. Örneğin: 1.2.3.4.

Değişkenler

bir ifadenin parçası olarak, iki söz dizimlerinden birini kullanarak değişkenlere erişebilirsiniz:

  • Dizin söz dizimi: variables['MyVar']
  • Özellik başvurusu kaldırma söz dizimi: variables.MyVar

Özellik başvuru söz dizimini kullanmak için özellik adı şunları yapmalıdır:

  • veya ile a-Z başlayın _
  • Veya tarafından a-Z0-9 takip edilmeli _

Yürütme bağlamı bağlı olarak, farklı değişkenler kullanılabilir.

  • YAML kullanarak işlem hatları oluşturursanız işlem hattı değişkenleri kullanılabilir.
  • Klasik düzenleyiciyi kullanarak derleme işlem hatları oluşturursanız derleme değişkenleri kullanılabilir.
  • Klasik düzenleyiciyi kullanarak yayın işlem hatları oluşturursanız yayın değişkenleri kullanılabilir.

Değişkenler her zaman dizedir. Yazılan değerleri kullanmak istiyorsanız, bunun yerine parametreleri kullanmanız gerekir.

Not

Değişkenler sekmesi kullanıcı arabirimi aracılığıyla bu tür değişkenleri ayarlarken hem Klasik hem de YAML işlem hatları için ifadelerle değişkenlerin kullanılmasına yönelik bir sınırlama vardır. İfade olarak tanımlanan değişkenler, değerde ifadesi olan başka bir değişkene bağımlı olmamalıdır çünkü her iki ifadenin de düzgün bir şekilde değerlendirileceği garanti edilmemektedir . Örneğin, değeri değişkeninin a değeri $[ <expression> ] için bir parçası olarak kullanılan değişkenimiz bvar. İşleme değişkenlerinin sırası garantili olmadığından, değerlendirmeden sonra değişkenin ba yanlış değerine sahip olabilir.

Açıklanan yapılara yalnızca YAML işlem hattındaki variables anahtar sözcüğü aracılığıyla değişkenleri ayarlarken izin verilir. Değişkenlerin işlendikten sonra doğru değerleri almak için işlenme sırasına yerleştirilmesi gerekir.

İşlevler

İfadelerde aşağıdaki yerleşik işlevler kullanılabilir.

ve

  • Tüm parametrelerin TrueTrue
  • En düşük parametreler: 2. En fazla parametre: N
  • Değerlendirme için parametreleri Boole'a atar
  • İlk devreden sonra kısa devreler False
  • Örnek: and(eq(variables.letters, 'ABC'), eq(variables.numbers, 123))

Coalesce

  • Parametreleri sırayla değerlendirir ve null veya boş dizeye eşit olmayan değeri döndürür.
  • En düşük parametreler: 2. En fazla parametre: N
  • Örnek: coalesce(variables.couldBeNull, variables.couldAlsoBeNull, 'literal so it always works')

contains

  • Sol parametre Dizesinde True sağ parametre olup olmadığını değerlendirir
  • En düşük parametreler: 2. En fazla parametre: 2
  • Değerlendirme için parametreleri String'e atar
  • Sıralı yoksayma büyük/küçük harf karşılaştırması gerçekleştirir
  • Örnek: contains('ABCDE', 'BCD') (True döndürür)

containsValue

  • True Sol parametrenin bir dizi olup olmadığını ve herhangi bir öğenin doğru parametreye eşit olup olmadığını değerlendirir. Ayrıca sol parametrenin bir nesne olup olmadığını ve herhangi bir özelliğin değerinin doğru parametreye eşit olup olmadığını değerlendirir True .
  • En düşük parametreler: 2. En fazla parametre: 2
  • Sol parametre bir diziyse, her öğeyi doğru parametrenin türüyle eşleşecek şekilde dönüştürün. Sol parametre bir nesneyse, her özelliğin değerini doğru parametrenin türüyle eşleşecek şekilde dönüştürün. Her bir öğe için eşitlik karşılaştırması, dönüştürmenin başarısız olup olmadığını değerlendirir False .
  • Dizeler için sıralı yoksayma-büyük/küçük harf karşılaştırması
  • İlk maçtan sonra kısa devreler

Not

YAML işlem hattında dizi belirtmek için değişmez söz dizimi yoktur. Bu işlev genel işlem hatlarında sınırlı kullanımdadır. Adım listesi gibi sistem tarafından sağlanan dizilerle işlem hattı dekoratörü bağlamında kullanıma yöneliktir.

bir nesnede eşleşen bir değeri bulmak için ifadeyi containsValue kullanabilirsiniz. Burada, için eşleşme Build.SourceBranchiçin kaynak dallar listesine bakmayı gösteren bir örnek verilmiştir.

parameters:
- name: branchOptions
  displayName: Source branch options
  type: object
  default:
    - refs/heads/main
    - refs/heads/test

jobs:
  - job: A1 
    steps:
    - ${{ each value in parameters.branchOptions }}:
      - script: echo ${{ value }}

  - job: B1 
    condition: ${{ containsValue(parameters.branchOptions, variables['Build.SourceBranch']) }}
    steps:
      - script: echo "Matching branch found"

convertToJson

  • Karmaşık bir nesneyi alıp JSON olarak çıkışını alır.
  • En düşük parametreler: 1. En yüksek parametreler: 1.
parameters:
  - name: listOfValues
    type: object
    default:
      this_is:
        a_complex: object
        with:
          - one
          - two

steps:
- script: |
    echo "${MY_JSON}"
  env:
    MY_JSON: ${{ convertToJson(parameters.listOfValues) }}

Betik çıkışı:

{
  "this_is": {
    "a_complex": "object",
    "with": [
      "one",
      "two"
    ]
  }
}

counter

  • Bu işlev yalnızca değişken tanımlayan bir ifadede kullanılabilir. Adım, iş veya aşama koşulunun parçası olarak kullanılamaz.
  • bir işlem hattının her çalıştırmasıyla artırılan bir sayıyı değerlendirir.
  • Parametreler: 2. prefix ve seed.
  • Ön ek bir dize ifadesidir. Her benzersiz ön ek değeri için ayrı bir sayaç değeri izlenir. utf-16 prefix karakter kullanmalıdır.
  • Tohum, sayacın başlangıç değeridir

İşlem hattınızın her yürütmesinde otomatik olarak bir artırılan bir sayaç oluşturabilirsiniz. Bir sayaç tanımladığınızda, bir prefix ve seedsağlarsınız. Bunu gösteren bir örnek aşağıda verilmiştir.

variables:
  major: 1
  # define minor as a counter with the prefix as variable major, and seed as 100.
  minor: $[counter(variables['major'], 100)]

steps:
- bash: echo $(minor)

minor İşlem hattının ilk çalıştırmasında yukarıdaki örnekte değeri 100 olacaktır. İkinci çalıştırmada değeri major hala 1 olması koşuluyla 101 olacaktır.

YAML dosyasını düzenler ve değişkenin major değerini 2 olarak güncelleştirirseniz, işlem hattının bir sonraki çalıştırmasında değeri minor 100 olur. Sonraki çalıştırmalar sayacı 101, 102, 103, ...

Daha sonra YAML dosyasını düzenler ve değerini major 1 olarak ayarlarsanız, sayacın değeri bu ön ek için kaldığı yerden devam eder. Bu örnekte 102'de devam eder.

Burada, 100'de başlayan, her çalıştırma için 1 artırılan ve her gün 100'e sıfırlanan bir sayaç olarak davranacak bir değişken ayarlamanın başka bir örneği verilmiştir.

Not

pipeline.startTime ifadelerin dışında kullanılamaz. pipeline.startTime bir tarih ve saat nesnesine biçimlendirerek system.pipelineStartTime ifadelerle çalışabilmesini sağlar. için pipeline.startTime varsayılan saat dilimi UTC'dir. Kuruluşunuzun saat dilimini değiştirebilirsiniz .

jobs:
- job:
  variables:
    a: $[counter(format('{0:yyyyMMdd}', pipeline.startTime), 100)]
  steps:
  - bash: echo $(a)

Burada, PR'ler ve CI çalıştırmaları için ayrı bir değer koruyan bir sayacın olması örneği verilmiştir.

variables:
  patch: $[counter(variables['build.reason'], 0)]

Sayaçların kapsamı bir işlem hattı olarak belirlenmiştir. Başka bir deyişle, bu işlem hattının her çalıştırması için değeri artırılır. Proje kapsamlı sayaç yok.

endsWith

  • Sol parametre Dizesinin True sağ parametreyle bitip bitmediğini değerlendirir
  • En düşük parametreler: 2. En fazla parametre: 2
  • Değerlendirme için parametreleri String'e atar
  • Sıralı yoksayma büyük/küçük harf karşılaştırması gerçekleştirir
  • Örnek: endsWith('ABCDE', 'DE') (True döndürür)

eq

  • Parametrelerin True eşit olup olmadığını değerlendirir
  • En düşük parametreler: 2. En fazla parametre: 2
  • Sağ parametreyi sol parametrenin türüyle eşleşecek şekilde dönüştürür. Dönüştürme başarısız olursa döndürür False .
  • Dizeler için sıralı yoksayma-büyük/küçük harf karşılaştırması
  • Örnek: eq(variables.letters, 'ABC')

biçim

  • Sondaki parametreleri değerlendirir ve bunları baştaki parametre dizesine ekler
  • En düşük parametreler: 1. En fazla parametre: N
  • Örnek: format('Hello {0} {1}', 'John', 'Doe')
  • Tarih biçimlendirmesi (yyyy, yy, , MM, , dMHHmmmddH, ss, s, fff) Kffffiçin .NET özel tarih ve saat biçimi tanımlayıcılarını kullanır.
  • Örnek: format('{0:yyyyMMdd}', pipeline.startTime). Bu durumda pipeline.startTime , özel bir tarih saat nesne değişkenidir.
  • Küme ayraçlarını iki katına çıkararak kaçış. Örnek: format('literal left brace {{ and literal right brace }}')

ge

  • True Sol parametrenin sağ parametreden büyük veya buna eşit olup olmadığını değerlendirir
  • En düşük parametreler: 2. En fazla parametre: 2
  • Sağ parametreyi sol parametrenin türüyle eşleşecek şekilde dönüştürür. Dönüştürme başarısız olursa hatalar.
  • Dizeler için sıralı yoksayma-büyük/küçük harf karşılaştırması
  • Örnek: ge(5, 5) (True döndürür)

gt

  • True Sol parametrenin doğru parametreden büyük olup olmadığını değerlendirir
  • En düşük parametreler: 2. En fazla parametre: 2
  • Sağ parametreyi sol parametrenin türüyle eşleşecek şekilde dönüştürür. Dönüştürme başarısız olursa hatalar.
  • Dizeler için sıralı yoksayma-büyük/küçük harf karşılaştırması
  • Örnek: gt(5, 2) (True döndürür)

in

  • Sol parametrenin True herhangi bir sağ parametreye eşit olup olmadığını değerlendirir
  • En düşük parametreler: 1. En fazla parametre: N
  • Sağ parametreleri sol parametrenin türüyle eşleşecek şekilde dönüştürür. Eşitlik karşılaştırması False , dönüştürmenin başarısız olup olmadığını değerlendirir.
  • Dizeler için sıralı yoksayma-büyük/küçük harf karşılaştırması
  • İlk maçtan sonra kısa devreler
  • Örnek: in('B', 'A', 'B', 'C') (True döndürür)

join

  • Sağ parametre dizisindeki tüm öğeleri sol parametre dizesiyle ayırarak birleştirir.
  • En düşük parametreler: 2. En fazla parametre: 2
  • Dizideki her öğe bir dizeye dönüştürülür. Karmaşık nesneler boş dizeye dönüştürülür.
  • Doğru parametre bir dizi değilse, sonuç dizeye dönüştürülen doğru parametredir.

Bu örnekte, dizideki her öğe arasına noktalı virgül eklenir. Parametre türü bir nesnedir.

parameters:
- name: myArray
  type: object
  default:
    - FOO
    - BAR
    - ZOO

variables:
   A: ${{ join(';',parameters.myArray) }}

steps:
  - script: echo $A # outputs FOO;BAR;ZOO

le

  • True Sol parametrenin doğru parametreden küçük veya buna eşit olup olmadığını değerlendirir
  • En düşük parametreler: 2. En fazla parametre: 2
  • Sağ parametreyi sol parametrenin türüyle eşleşecek şekilde dönüştürür. Dönüştürme başarısız olursa hatalar.
  • Dizeler için sıralı yoksayma-büyük/küçük harf karşılaştırması
  • Örnek: le(2, 2) (True döndürür)

length

  • Sistemden gelen veya bir parametreden gelen bir dizenin veya dizinin uzunluğunu verir
  • En düşük parametreler: 1. En fazla parametre 1
  • Örnek: length('fabrikam') 8 döndürür

Alt

  • Bir dize veya değişken değerini tüm küçük harf karakterlere dönüştürür
  • En düşük parametreler: 1. En fazla parametre 1
  • Dizenin küçük harf eşdeğerini verir
  • Örnek: lower('FOO') döndürür foo

lt

  • True Sol parametrenin doğru parametreden küçük olup olmadığını değerlendirir
  • En düşük parametreler: 2. En fazla parametre: 2
  • Sağ parametreyi sol parametrenin türüyle eşleşecek şekilde dönüştürür. Dönüştürme başarısız olursa hatalar.
  • Dizeler için sıralı yoksayma-büyük/küçük harf karşılaştırması
  • Örnek: lt(2, 5) (True döndürür)

ne

  • Parametrelerin True eşit olup olmadığını değerlendirir
  • En düşük parametreler: 2. En fazla parametre: 2
  • Sağ parametreyi sol parametrenin türüyle eşleşecek şekilde dönüştürür. Dönüştürme başarısız olursa döndürür True .
  • Dizeler için sıralı yoksayma-büyük/küçük harf karşılaştırması
  • Örnek: ne(1, 2) (True döndürür)

not

  • True ParametreninFalse
  • En düşük parametreler: 1. En yüksek parametreler: 1
  • Değerlendirme için değeri Boole değerine dönüştürür
  • Örnek: not(eq(1, 2)) (True döndürür)

notIn

  • True Sol parametrenin herhangi bir sağ parametreye eşit olup olmadığını değerlendirir
  • En düşük parametreler: 1. En fazla parametre: N
  • Sağ parametreleri sol parametrenin türüyle eşleşecek şekilde dönüştürür. Eşitlik karşılaştırması False , dönüştürmenin başarısız olup olmadığını değerlendirir.
  • Dizeler için sıralı yoksayma-büyük/küçük harf karşılaştırması
  • İlk maçtan sonra kısa devreler
  • Örnek: notIn('D', 'A', 'B', 'C') (True döndürür)

veya

  • True Herhangi bir parametre olup olmadığını değerlendirirTrue
  • En düşük parametreler: 2. En fazla parametre: N
  • Değerlendirme için parametreleri Boole'a atar
  • İlk devreden sonra kısa devreler True
  • Örnek: or(eq(1, 1), eq(2, 3)) (True, short-circuits döndürür)

Değiştirmek

  • Geçerli örnekteki bir dizenin tüm örneklerinin başka bir dizeyle değiştirildiği yeni bir dize döndürür
  • En düşük parametreler: 3. En yüksek parametreler: 3
  • replace(a, b, c): tüm b örnekleri c ile değiştirilerek a döndürür
  • Örnek: replace('https://www.tinfoilsecurity.com/saml/consume','https://www.tinfoilsecurity.com','http://server') (döndürür http://server/saml/consume)

split

  • Belirtilen sınırlandırma karakterlerine göre bir dizeyi alt dizelere böler
  • En düşük parametreler: 2. En fazla parametre: 2
  • İlk parametre bölünecek dizedir
  • İkinci parametre sınırlandırma karakterleridir
  • Bir alt dize dizisi döndürür. Sınırlandırma karakterleri ardışık olarak veya dizenin sonunda göründüğünde dizi boş dizeler içerir
  • Örnek:
    variables:
    - name: environments
      value: prod1,prod2 
    steps:  
      - ${{ each env in split(variables.environments, ',')}}:
        - script: ./deploy.sh --environment ${{ env }}
    
  • replace() ile split() kullanma örneği:
    parameters:
    - name: resourceIds
      type: object
      default:
      - /subscriptions/mysubscription/resourceGroups/myResourceGroup/providers/Microsoft.Network/loadBalancers/kubernetes-internal
      - /subscriptions/mysubscription02/resourceGroups/myResourceGroup02/providers/Microsoft.Network/loadBalancers/kubernetes
    - name: environments
      type: object
      default: 
      - prod1
      - prod2
    
    trigger:
    - main
    
    steps:
    - ${{ each env in parameters.environments }}:
      - ${{ each resourceId in parameters.resourceIds }}:
          - script: echo ${{ replace(split(resourceId, '/')[8], '-', '_') }}_${{ env }}
    

startsWith

  • Sol parametre dizesinin True sağ parametreyle başlayıp başlamaymadığını değerlendirir
  • En düşük parametreler: 2. En fazla parametre: 2
  • Değerlendirme için parametreleri String'e atar
  • Sıralı yoksayma büyük/küçük harf karşılaştırması gerçekleştirir
  • Örnek: startsWith('ABCDE', 'AB') (True döndürür)

Üst

  • Bir dize veya değişken değerini tüm büyük harflere dönüştürür
  • En düşük parametreler: 1. En fazla parametre 1
  • Bir dizenin büyük harf eşdeğerini verir
  • Örnek: upper('bah') döndürür BAH

xor

  • True Tam olarak bir parametre olup olmadığını değerlendirirTrue
  • En düşük parametreler: 2. En fazla parametre: 2
  • Değerlendirme için parametreleri Boole'a atar
  • Örnek: xor(True, False) (True döndürür)

İş durumu denetimi işlevleri

Aşağıdaki durum denetimi işlevlerini koşullarda ifade olarak kullanabilirsiniz, ancak değişken tanımlarında kullanamazsınız.

Her zaman

  • Her zaman olarak değerlendirilir True (iptal edildiğinde bile). Not: Kritik bir hata yine de görevin çalışmasını engelleyebilir. Örneğin, kaynakları alma başarısız olursa.

Iptal

  • True İşlem hattının iptal edilip iptal edilmediğini değerlendirir.

başarısız

  • Bir adım için, ile eşdeğerdir eq(variables['Agent.JobStatus'], 'Failed').
  • bir iş için:
    • Bağımsız değişken olmadan, yalnızca bağımlılık grafiğindeki önceki herhangi bir iş başarısız olursa olarak değerlendirilir True .
    • İş adlarını bağımsız değişken olarak kullanarak, yalnızca bu işlerden herhangi biri başarısız olursa olarak değerlendirilir True .

başarılı

  • Bir adım için, şunun eşdeğeri: in(variables['Agent.JobStatus'], 'Succeeded', 'SucceededWithIssues')
  • İşlerle çalışırken ile dependsOn kullanın ve önceki bir işin başarılı olup olmadığını değerlendirmek istiyorsunuz. İşler, aşamalar sırayla çalışırken paralel çalışacak şekilde tasarlanmıştır.
  • bir iş için:
    • Bağımsız değişken olmadan, yalnızca bağımlılık grafiğindeki önceki tüm işlerin başarılı veya kısmen başarılı olması durumunda değerlendirilir True .
    • İş adlarını bağımsız değişken olarak kullanarak, bu işlerin tümünün başarılı mı yoksa kısmen mi başarılı olduğunu değerlendirir True .
    • False İşlem hattının iptal edilip iptal edilmediğini değerlendirir.

succeededOrFailed

  • Bir adım için, şunun eşdeğeri: in(variables['Agent.JobStatus'], 'Succeeded', 'SucceededWithIssues', 'Failed')

  • bir iş için:

    • Bağımsız değişken olmadan, bağımlılık grafiğindeki herhangi bir işin başarılı veya başarısız olup olmadığına bakılmaksızın değerini değerlendirir True .
    • İş adlarını bağımsız değişken olarak kullanarak, bu işlerden herhangi birinin başarılı veya başarısız olup olmadığını değerlendirir True .

    İşlem hattı iptal edildiğinde değerlendirilecek False olması dışında bu, gibi always()bir işlem hattıdır.

Koşullu ekleme

Değişken değerlerini koşullu olarak atamak veya görevler için girişler ayarlamak için , elseifve else yan tümcelerini kullanabilirsinizif. Bir koşul karşılandığında bir adımı koşullu olarak da çalıştırabilirsiniz.

Değişken değerlerini koşullu olarak atamak veya görevler için girişler ayarlamak için kullanabilirsiniz if . Bir koşul karşılandığında bir adımı koşullu olarak da çalıştırabilirsiniz.

elseif ve else yan tümceleri Azure DevOps 2022'den itibaren kullanılabilir ve Azure DevOps'un Azure DevOps Server 2020 ve önceki sürümlerinde kullanılamaz.

Koşullular yalnızca şablon söz dizimi kullanılırken çalışır. Değişken söz dizimi hakkında daha fazla bilgi edinin.

Şablonlar için, bir dizi veya eşleme eklerken koşullu ekleme kullanabilirsiniz. Şablonlara koşullu ekleme hakkında daha fazla bilgi edinin.

Bir değişkeni koşullu olarak atama

variables:
  ${{ if eq(variables['Build.SourceBranchName'], 'main') }}: # only works if you have a main branch
    stageName: prod

pool:
  vmImage: 'ubuntu-latest'

steps:
- script: echo ${{variables.stageName}}

Görev girişini koşullu olarak ayarlama

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: PublishPipelineArtifact@1
  inputs:
    targetPath: '$(Pipeline.Workspace)'
    ${{ if eq(variables['Build.SourceBranchName'], 'main') }}:
      artifact: 'prod'
    ${{ else }}:
      artifact: 'dev'
    publishLocation: 'pipeline'

Bir adımı koşullu olarak çalıştırma

Değişken kümesi yoksa veya değeri foo koşullarla if eşleşmiyorsa deyimi else çalıştırılır. foo Burada değeri koşulda elseif true değerini döndürür.

variables:
  - name: foo
    value: contoso # triggers elseif condition

pool:
  vmImage: 'ubuntu-latest'

steps:
- script: echo "start"
- ${{ if eq(variables.foo, 'adaptum') }}:
  - script: echo "this is adaptum"
- ${{ elseif eq(variables.foo, 'contoso') }}: # true
  - script: echo "this is contoso" 
- ${{ else }}:
  - script: echo "the value is not adaptum or contoso"

"Each" anahtar sözcüğü

Anahtar sözcüğünü each kullanarak nesne türüyle parametreler arasında döngü yapabilirsiniz.

parameters:
- name: listOfStrings
  type: object
  default:
  - one
  - two

steps:
- ${{ each value in parameters.listOfStrings }}:
  - script: echo ${{ value }}

Bağımlılıklar

İfadeler, önceki işlere veya aşamalara başvurmak için bağımlılıklar bağlamını kullanabilir. Bağımlılıkları kullanarak:

  • Önceki işin iş durumuna başvurma
  • Önceki aşamanın aşama durumuna başvurma
  • Aynı aşamadaki önceki işteki çıkış değişkenlerine başvurma
  • Bir aşamada önceki aşamadaki çıkış değişkenlerine başvurma
  • Aşağıdaki aşamada önceki bir aşamadaki bir işteki çıkış değişkenlerine başvurma

Bağlam işler ve aşamalar için çağrılır dependencies ve değişkenler gibi çalışır. bir işin içinde, başka bir aşamadaki bir işten bir çıkış değişkenine başvurursanız, bağlam olarak adlandırılır stageDependencies.

Çıkış değişkenlerinde tırnak karakterleri (' veya ") olmasıyla ilgili sorunlarla karşılaşıyorsanız bu sorun giderme kılavuzuna bakın.

Aşamadan aşamaya bağımlılıklar

Yapısal olarak, dependencies nesnesi ve ile iş ve aşama adlarının resultsoutputsbir haritasıdır. JSON olarak ifade edilirse şöyle görünür:

"dependencies": {
  "<STAGE_NAME>" : {
    "result": "Succeeded|SucceededWithIssues|Skipped|Failed|Canceled",
    "outputs": {
        "jobName.stepName.variableName": "value"
    }
  },
  "...": {
    // another stage
  }
}

Değişkenleri eşlemek veya aşama düzeyinde koşulları denetlemek için bu biçimini dependencies kullanın. Bu örnekte, B Aşaması A aşamasının başarılı veya atlanmış olup olmadığını çalıştırır.

Not

Aşağıdaki örneklerde standart işlem hattı söz dizimi kullanılır. Dağıtım işlem hatlarını kullanıyorsanız hem değişken hem de koşullu değişken söz dizimi farklılık gösterir. Kullanılacak söz dizimi hakkında bilgi için bkz . Dağıtım işleri.

stages:
- stage: A
  condition: false
  jobs:
  - job: A1
    steps:
    - script: echo Job A1
- stage: B
  condition: in(dependencies.A.result, 'Succeeded', 'SucceededWithIssues', 'Skipped')
  jobs:
  - job: B1
    steps:
    - script: echo Job B1

Aşamalar başka bir aşamadaki çıkış değişkenlerini de kullanabilir. Bu örnekte, Aşama B, A Aşamasındaki bir değişkene bağlıdır.

stages:
- stage: A
  jobs:
  - job: A1
    steps:
     - bash: echo "##vso[task.setvariable variable=shouldrun;isOutput=true]true"
     # or on Windows:
     # - script: echo ##vso[task.setvariable variable=shouldrun;isOutput=true]true
       name: printvar

- stage: B
  condition: and(succeeded(), eq(dependencies.A.outputs['A1.printvar.shouldrun'], 'true'))
  dependsOn: A
  jobs:
  - job: B1
    steps:
    - script: echo hello from Stage B

Not

Varsayılan olarak, bir işlem hattındaki her aşama YAML dosyasından hemen önceki aşamaya bağlıdır. Geçerli aşamadan hemen önce olmayan bir aşamaya başvurmanız gerekiyorsa, aşamaya bir dependsOn bölüm ekleyerek bu otomatik varsayılanı geçersiz kılabilirsiniz.

Bir aşamadaki işten işe bağımlılıklar

Tek bir aşamadaki iş düzeyinde veriler aşama dependencies düzeyinde bilgi içermez.

"dependencies": {
  "<JOB_NAME>": {
    "result": "Succeeded|SucceededWithIssues|Skipped|Failed|Canceled",
    "outputs": {
      "stepName.variableName": "value1"
    }
  },
  "...": {
    // another job
  }
}

Bu örnekte A İşi her zaman atlanır ve B İşi çalıştırılır. C işi çalıştırılır çünkü tüm bağımlılıkları başarılı olur veya atlanır.

jobs:
- job: a
  condition: false
  steps:
  - script: echo Job A
- job: b
  steps:
  - script: echo Job B
- job: c
  dependsOn:
  - a
  - b
  condition: |
    and
    (
      in(dependencies.a.result, 'Succeeded', 'SucceededWithIssues', 'Skipped'),
      in(dependencies.b.result, 'Succeeded', 'SucceededWithIssues', 'Skipped')
    )
  steps:
  - script: echo Job C

Bu örnekte, B İşi, İş A'dan bir çıkış değişkenine bağlıdır.

jobs:
- job: A
  steps:
  - bash: echo "##vso[task.setvariable variable=shouldrun;isOutput=true]true"
  # or on Windows:
  # - script: echo ##vso[task.setvariable variable=shouldrun;isOutput=true]true
    name: printvar

- job: B
  condition: and(succeeded(), eq(dependencies.A.outputs['printvar.shouldrun'], 'true'))
  dependsOn: A
  steps:
  - script: echo hello from B

Aşamalar arasında iş bağımlılıklarına iş

İş düzeyinde, önceki aşamadaki bir işin çıkışlarına da başvurabilirsiniz. Bunun için bağlamın stageDependencies kullanılması gerekir.

"stageDependencies": {
  "<STAGE_NAME>" : {
    "<JOB_NAME>": {
      "result": "Succeeded|SucceededWithIssues|Skipped|Failed|Canceled",
      "outputs": {
          "stepName.variableName": "value"
      }
    },
    "...": {
      // another job
    }
  },
  "...": {
    // another stage
  }
}

Bu örnekte, A1 işi atlanırsa B1 işi çalıştırılır. B2 işi, çalıştırılıp çalıştırılmayacağını belirlemek için A1 işinden çıkış değişkeninin değerini denetler.

trigger: none

pool:
  vmImage: 'ubuntu-latest'

stages:
- stage: A
  jobs:
  - job: A1
    steps:
     - bash: echo "##vso[task.setvariable variable=shouldrun;isOutput=true]true"
     # or on Windows:
     # - script: echo ##vso[task.setvariable variable=shouldrun;isOutput=true]true
       name: printvar

- stage: B
  dependsOn: A
  jobs:
  - job: B1
    condition: in(stageDependencies.A.A1.result, 'Skipped') # change condition to `Succeeded and stage will be skipped`
    steps:
    - script: echo hello from Job B1
  - job: B2
    condition: eq(stageDependencies.A.A1.outputs['printvar.shouldrun'], 'true')
    steps:
     - script: echo hello from Job B2

bir iş, farklı bir aşamadaki bir dağıtım işi tarafından tanımlanan bir değişkene bağımlıysa söz dizimi farklıdır. Aşağıdaki örnekte, dağıtım işi run_tests olarak ayarlandıysa build_jobrunTeststrueiş çalıştırılır. Sözlük için kullanılan anahtarın outputs olduğuna build_job.setRunTests.runTestsdikkat edin.

stages:
- stage: build
  jobs:
  - deployment: build_job
    environment:
      name: Production
    strategy:
      runOnce:
        deploy:
          steps:
          - task: PowerShell@2
            name: setRunTests
            inputs:
              targetType: inline
              pwsh: true
              script: |
                $runTests = "true"
                echo "setting runTests: $runTests"
                echo "##vso[task.setvariable variable=runTests;isOutput=true]$runTests"

- stage: test
  dependsOn:
  - 'build'
  jobs:  
    - job: run_tests
      condition: eq(stageDependencies.build.build_job.outputs['build_job.setRunTests.runTests'], 'true')
      steps:
        ...

İş çıkışına bağlı olarak aşama

Derlemeden sonra değişiklik gerekmiyorsa, belirli koşullar altında işlem hattındaki bir aşamayı atlamak isteyebilirsiniz. Terraform Planı'nı kullanırken onay tetikleyip yalnızca plan değişiklik içerdiğinde uygulamak istemenize örnek olarak gösteriliyor.

Bu koşulu bir aşamada kullandığınızda, değişkenini dependencies kullanmanız gerekir, değil stageDependencies.

Aşağıdaki örnek, bir aşamadaki bir adımda bir değişken ayarlayan (Terraform Planı'ndaki gerçek bilgilerinizi kullanın) ve ardından yalnızca değişkenin belirli bir değere sahip olması durumunda ikinci aşamayı çağıran basit bir betiktir.

stages:
- stage: plan_dev
  jobs:
  - job: terraform_plan_dev
    steps:
    - bash: echo '##vso[task.setvariable variable=terraform_plan_exitcode;isOutput=true]2'
      name: terraform_plan
- stage: apply_dev
  dependsOn: plan_dev
  condition: eq(dependencies.plan_dev.outputs['terraform_plan_dev.terraform_plan.terraform_plan_exitcode'], '2')
  jobs:
  - job: part_b
    steps:
    - bash: echo "BA"

Aşama, farklı bir aşamadaki dağıtım işi tarafından tanımlanan bir değişkene bağımlıysa söz dizimi farklıdır. Aşağıdaki örnekte aşama test , dağıtım build_job ayarına shouldTesttruebağlıdır. Aşamanın conditionbuild_job iki kez göründüğüne test dikkat edin.

stages:
- stage: build
  jobs:
  - deployment: build_job
    environment:
      name: Production
    strategy:
      runOnce:
        deploy:
          steps:
          - task: PowerShell@2
            name: setRunTests
            inputs:
              targetType: inline
              pwsh: true
              script: |
                $runTests = "true"
                echo "setting runTests: $runTests"
                echo "##vso[task.setvariable variable=runTests;isOutput=true]$runTests"

- stage: test
  dependsOn:
  - 'build'
  condition: eq(dependencies.build.outputs['build_job.build_job.setRunTests.runTests'], 'true')
  jobs:
    ...

Yukarıdaki örnekte koşul, ortam kaynağına değil ortama başvurur. Bir ortam kaynağına başvurmak için, ortam kaynak adını bağımlılıklar koşuluna eklemeniz gerekir. Aşağıdaki örnekte koşul adlı vmtestbir ortam sanal makine kaynağına başvurur.

stages:
- stage: build
  jobs:
  - deployment: build_job
    environment:
      name: vmtest
      resourceName: winVM2
      resourceType: VirtualMachine
    strategy:
      runOnce:
        deploy:
          steps:
          - task: PowerShell@2
            name: setRunTests
            inputs:
              targetType: inline
              pwsh: true
              script: |
                $runTests = "true"
                echo "setting runTests: $runTests"
                echo "##vso[task.setvariable variable=runTests;isOutput=true]$runTests"

- stage: test
  dependsOn:
  - 'build'
  condition: eq(dependencies.build.outputs['build_job.Deploy_winVM2.setRunTests.runTests']
, 'true')
  jobs:
    ...

Filtrelenmiş diziler

Bir öğe koleksiyonu üzerinde çalışırken, filtrelenmiş bir dizi uygulamak için söz dizimini * kullanabilirsiniz. Filtrelenmiş dizi, adlarından bağımsız olarak tüm nesneleri/öğeleri döndürür.

Örnek olarak, adlı foobir nesne dizisi düşünün. Dizimizdeki her nesnede özelliğinin değerlerinin bir dizisini id almak istiyoruz.

[
    { "id": 1, "a": "avalue1"},
    { "id": 2, "a": "avalue2"},
    { "id": 3, "a": "avalue3"}
]

Aşağıdakileri yapabiliriz:

foo.*.id

Bu, sisteme filtrelenmiş bir dizi olarak üzerinde çalışması foo ve ardından özelliğini seçmesini id söyler.

Bu, şunu döndürür:

[ 1, 2, 3 ]

Tür atama

İfadedeki değerler, ifade değerlendirildikçe bir türden diğerine dönüştürülebilir. Bir ifade değerlendirildiğinde, parametreler ilgili veri türüyle birleştirilir ve sonra dizelere geri döner.

Örneğin, bu YAML'de ve değerleri ve ifadesi değerlendirildiğinde değerine dönüştürülür 01.TrueFalse lt() İşlev, sol parametre sağ parametreden küçük olduğunda döndürürTrue.

variables:
  firstEval: $[lt(False, True)] # 0 vs. 1, True
  secondEval: $[lt(True, False)] # 1 vs. 0, False

steps:
- script: echo $(firstEval)
- script: echo $(secondEval)

Bu örnekte, hem değerler variables.emptyString hem de boş dize boş dizeler olarak değerlendirilir. işlevi coalesce() parametreleri sırayla değerlendirir ve null veya boş dizeye eşit olmayan ilk değeri döndürür.

variables:
  coalesceLiteral: $[coalesce(variables.emptyString, '', 'literal value')]

steps:
- script: echo $(coalesceLiteral) # outputs literal value

Ayrıntılı dönüştürme kuralları aşağıda daha ayrıntılı olarak listelenmiştir.

Başlangıç / Son Boole Null Sayı Dize Sürüm
Boole - - Evet Evet -
Null Evet - Evet Evet -
Sayı Evet - - Evet Kısmi
Dize Evet Kısmi Kısmi - Kısmi
Sürüm Evet - - Evet -

Boole

Son numara:

  • False0
  • True1

Dizeye:

  • False'False'
  • True'True'

Null

  • Boole'a: False
  • Son numara: 0
  • To string: '' (boş dize)

Sayı

  • Boole'a: 0Falsebaşka bir sayı → True
  • Sürüme: Sıfırdan büyük olmalı ve sıfır olmayan bir ondalık içermelidir. Int32.MaxValue değerinden küçük olmalıdır (ondalık bileşen de).
  • Dizeye: Sayıyı binlik ayırıcısı olmayan ve ondalık ayırıcısı olmayan bir dizeye dönüştürür.

Dize

  • To Boolean: '' (boş dize) → False, diğer herhangi bir dize → True
  • Hedef null: '' (boş dize) → Null, dönüştürülemeyen başka bir dize
  • Numaralandırmak için: '' (boş dize) 0 →, aksi takdirde, C#' Int32.TryParse leri InvariantCulture ve aşağıdaki kuralları kullanarak çalıştırır: AllowDecimalPoint | AllowLeadingSign | AllowLeadingWhite | AllowThousands | Allowtrailingwhite. Başarısız TryParse olursa dönüştürülemez.
  • Sürüme: C#'s Version.TryParseçalıştırır. En az Birincil ve İkincil bileşen içermelidir. Başarısız TryParse olursa dönüştürülemez.

Sürüm

  • Boole'a: True
  • Dizeye: Major.Minor veya Major.Minor.Build veya Major.Minor.Build.Revision.

SSS

İfadeler tarafından desteklenmeyen bir şey yapmak istiyorum. İşlem Hatları işlevselliğini genişletmek için hangi seçenekleri kullanabilirim?

İşlem Hattınızı ifade içeren bir betikle özelleştirebilirsiniz. Örneğin, bu kod parçacığı değişkeni alır BUILD_BUILDNUMBER ve Bash ile böler. Bu betik, $MAJOR_RUN birincil ve $MINOR_RUNikincil çalıştırma numaraları için ve şeklinde iki yeni değişken çıkışı sağlar. Ardından iki değişken, $major$minortask.setvariable ile iki işlem hattı değişkeni oluşturmak için kullanılır. Bu değişkenler aşağı akış adımlarında kullanılabilir. İşlem hatları arasında değişkenleri paylaşmak için bkz . Değişken grupları.

steps:
- bash: |
    MAJOR_RUN=$(echo $BUILD_BUILDNUMBER | cut -d '.' -f1)
    echo "This is the major run number: $MAJOR_RUN"
    echo "##vso[task.setvariable variable=major]$MAJOR_RUN"

    MINOR_RUN=$(echo $BUILD_BUILDNUMBER | cut -d '.' -f2)
    echo "This is the minor run number: $MINOR_RUN"
    echo "##vso[task.setvariable variable=minor]$MINOR_RUN"

- bash: echo "My pipeline variable for major run is $(major)"
- bash: echo "My pipeline variable for minor run is $(minor)"