Aracılığıyla paylaş


İfadeler

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

Önemli

Azure DevOps İçerik Sürümü seçicisinden bir sürüm seçin.

Bu makalenin platformunuza ve sürümünüze karşılık gelen sürümünü seçin. Sürüm seçici, içindekiler tablosunun üzerindedir. Azure DevOps platformunuzu ve sürümünüzü arayın.

İşlem hattı yazarken dize, boole veya sayı değeri belirtmeniz gerektiğinde ifadeleri kullanın. bir ifade bir dizi döndürdüğünde, normal dizin oluşturma kuralları uygulanır ve dizin ile 0başlar.

İfadelerin en yaygın kullanımı, bir işin veya adımın çalıştırılıp çalıştırılmayacağını belirlemek için koşullarda yer almaları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. İfadeleri derleme zamanında veya çalışma zamanında değerlendirebilirsiniz. Derleme zamanı ifadelerini her yerde kullanın; değişkenlerde ve koşullarda çalışma zamanı ifadelerini kullanın. Değişkenlerin ve durumun içeriğini hesaplamak için çalışma zamanı ifadelerini kullanın (ö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> }}), hem parameters'e erişiminiz vardır hem de statik olarak tanımlanmış olan variables kullanılabilir. Bir çalışma zamanı ifadesinde $[ <expression> ], daha fazlasına variables erişiminiz var, ancak parametrelere erişim yok.

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 sabit değer, bir değişken referansı, bir bağımlılık referansı, bir işlev veya bu türlerin geçerli bir iç içe geçmiş birleşimi olabilir.

Sabit Değerler

bir ifadenin parçası olarak boole, null, sayı, dize veya sürüm sabitlerini kullanabilirsiniz.

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

Boolean (Boole Mantığı)

True ve False boolean değişmez değer ifadeleridir.

Boş

Null, sözlükte bulunamama durumunda döndürülen özel bir sabit değer ifadesidir, örneğin (variables['noSuch']). Null, bir ifadenin çıkışı olabilir ancak doğrudan bir ifade içinde çağrılamıyor.

Sayı

'-', '.' veya '0' ile '9' arasındaki herhangi bir rakamla başlar.

Dize

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

Kelime anlamıyla bir tek tırnak işaretini ifade etmek için yanına bir tek tırnak daha ekleyin. Ö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

En fazla dört segmentten oluşan bir sürüm numarası. Bir sayı ile başlamalı ve iki veya üç nokta karakteri (.) 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 dereference sentaksı: variables.MyVar

Özellik başına erişim söz dizimini kullanmak için, özellik adının şunları gerektirmesi gerekir:

  • a-Z veya _ ile başlayın
  • Şununla takip edilmelidir: a-Z, 0-9 veya _

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.
  • Derleme işlem hatlarını klasik düzenleyici kullanarak 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 parametreleri kullanın.

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, her iki ifadenin de düzgün şekilde değerlendirileceği garanti edilmediğinden, değeri ifade olan başka bir değişkene bağımlı olmamalıdır. Örneğin, değeri a olarak kullanılan değişken $[ <expression> ] ve bu değerin bir parçası olduğu değişken b. Değişkenleri işleme sırası garantili olmadığından, değerlendirmeden sonra b değişkeni a değişkeninin yanlış bir değerine sahip olabilir.

Bu yapıları yalnızca bir YAML işlem hattındaki variables anahtar sözcüğü aracılığıyla değişkenleri ayarladığınızda kullanabilirsiniz. İşlendikten sonra doğru değerleri almak için değişkenleri işlenme sırasına göre yerleştirmeniz gerekir.

İşlevler

İfadelerde aşağıdaki yerleşik işlevleri kullanabilirsiniz.

ve

  • Hepsi True olduğunda True sonucunu verir.
  • En düşük parametreler: 2. En fazla parametre sayısı: N.
  • Parametreleri değerlendirmek için Boolean türüne dönüştürür.
  • False sonrası ilk kısa devreler.
  • Örnek: and(eq(variables.letters, 'ABC'), eq(variables.numbers, 123))

birleşmek

  • Parametreleri sırayla (soldan sağa) değerlendirir ve null veya boş dize olmayan ilk değeri döndürür.
  • Tüm parametre değerleri null veya boş dizelerse değer döndürmez.
  • En düşük parametreler: 2. En fazla parametre sayısı: N.
  • Örnek: coalesce(variables.couldBeNull, variables.couldAlsoBeNull, 'literal so it always works')

içerir

  • True Sol parametre dizesinin doğru parametreyi içerip içermediğini değerlendirir.
  • En düşük parametreler: 2. En fazla parametre sayısı: 2.
  • Değerlendirme için parametreleri dizeye gönderir.
  • Sıralı yoksayma-büyük/küçük harf karşılaştırması gerçekleştirir.
  • Örnek: contains('ABCDE', 'BCD') (Doğru değerini döndürür).

değer içerir

  • 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 sayısı: 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 boru hattında dizi belirtmek için tam söz dizimi yoktur. Bu işlev genel işlem hatlarında sınırlı kullanımdadır. İşlem hattı dekoratörü bağlamında, sistem tarafından sağlanan adım listesi gibi dizilerle kullanılması amaçlanmıştır.

bir nesnede eşleşen bir değer bulmak için ifadeyi containsValue kullanabilirsiniz. İşte Build.SourceBranch için kaynak dallar listesinde eşleşme aramayı gösteren bir örnek.

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"

Json'aDönüştür

  • Karmaşık bir nesneyi alır ve onu JSON olarak çıktı verir.
  • En düşük parametreler: 1. En fazla parametre: 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) }}

Komut dosyası çıktısı:

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

sayaç

  • Bu işlevi yalnızca değişken tanımlayan bir ifadede kullanın. Bunu bir adım, iş veya aşama için bir koşulun parçası olarak kullanmayın.
  • Bir işlem hattının her çalıştırılmasında artan bir sayıyı değerlendirir.
  • İki parametre alır: prefix ve seed.
  • prefix bir dize ifadesidir. İşlev, her benzersiz prefix için ayrı bir sayaç değeri izler. UTF-16 karakterlerini prefix içinde kullanın.
  • seed sayacının başlangıç değeridir.

İşlem hattınız çalıştıkça her seferinde otomatik olarak bir artırılan bir sayaç oluşturabilirsiniz. Sayaç tanımlarken, bir prefix ve bir seed sağlayın. Aşağıdaki örnekte bu kavram gösterilmektedir.

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 Önceki örnekte değeri, işlem hattının ilk çalıştırması sırasında 100'dür. İkinci çalıştırmada, major değeri 1 olduğu sürece değer 101'dir.

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

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

Aşağıdaki örnekte, bir değişkenin 100'de başlayan, her çalıştırma için 1 artan ve her gün 100'e sıfırlayan bir sayaç olarak nasıl ayarlanacağı gösterilmektedir.

Not

pipeline.startTime ifadelerin dışında kullanılamaz. pipeline.startTime'yı ifadelerin kullanabilmesi için bir tarih ve saat nesnesine dönüştürür system.pipelineStartTime. 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)

Aşağıdaki örnekte PR'ler ve CI çalıştırmaları için ayrı bir değer tutan bir sayaç gösterilmektedir.

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

Sayaçların kapsamı bir işlem hattı olarak belirlenmiştir. Başka bir deyişle, işlem hattı her çalıştırma için sayaç değerini artırır. Hiçbir sayaç proje kapsamına alınmaz.

ile biter

  • Sol parametre Dizesinin True doğru parametreyle bitip bitmediğini değerlendirir
  • En düşük parametreler: 2. En fazla parametre sayısı: 2.
  • Değerlendirme için parametreleri dizeye gönderir.
  • Büyük/küçük harf göz ardı edilerek sıralı karşılaştırma gerçekleştirir.
  • Örnek: endsWith('ABCDE', 'DE') (Doğru döndürür)

Eq

  • Parametrelerin True eşit olup olmadığını değerlendirir
  • En düşük parametreler: 2. En fazla parametre sayısı: 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. Maksimum parametre sayısı: N
  • Örnek: format('Hello {0} {1}', 'John', 'Doe')
  • .NET özel tarih ve saat biçimi tanımlayıcılarını kullanır (tarih biçimlendirmesi için , yyyy, yy, MM, M, dd, d, HH, H, m, mm, ss, s, f, ff, ffff, K)
  • Örnek: format('{0:yyyyMMdd}', pipeline.startTime). Bu durumda pipeline.startTime , özel bir tarih saat nesne değişkenidir.
  • Küme ayraçlarını ikiye katlayarak kaçış yapın. Örneğin: format('literal left brace {{ and literal right brace }}')

Ge

  • True Sol parametrenin doğru parametreden büyük veya buna eşit olup olmadığını değerlendirir
  • En düşük parametreler: 2. En fazla parametre sayısı: 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 olduğunda oluşan hatalar.
  • Dizeler için sıralı yoksayma-büyük/küçük harf karşılaştırması.
  • Örnek: ge(5, 5) (Doğru 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 sayısı: 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 olduğunda oluşan hatalar.
  • Dizeler için sıralı yoksayma-büyük/küçük harf karşılaştırması.
  • Örnek: gt(5, 2) (Doğru döndürür)

içinde

  • Sol parametrenin True herhangi bir doğru parametreye eşit olup olmadığını değerlendirir
  • En düşük parametreler: 1. Maksimum parametre sayısı: 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 karşılaşmadan sonra kısa devreler
  • Örnek: in('B', 'A', 'B', 'C') (Doğru döndürür)

iif

  • İlk parametre True ile değerlendirilirse ikinci parametreyi, aksi takdirde üçüncü parametreyi döndürür.
  • En düşük parametreler: 1. En fazla parametre: 3
  • İlk parametre bir koşul olmalıdır
  • Örnek: iif(eq(variables['Build.Reason'], 'PullRequest'), 'ManagedDevOpsPool', 'Azure Pipelines'), işlem hattı bir PR'ye yanıt olarak çalıştırıldığında 'ManagedDevOpsPool' döndürür.

katıl

  • Sağ parametre dizisindeki tüm öğeleri sol parametre dizesiyle ayırarak birleştirir.
  • En düşük parametreler: 2. En fazla parametre sayısı: 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ç bir 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 sayısı: 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 olduğunda oluşan hatalar.
  • Dizeler için sıralı yoksayma-büyük/küçük harf karşılaştırması.
  • Örnek: le(2, 2) (Doğru döndürür)

uzunluk

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

alçaltmak

  • Bir dizeyi veya değişken değerini tüm küçük harflere dönüştürür.
  • En düşük parametreler: 1. En fazla parametre sayısı: 1.
  • Bir dizenin küçük harf eşdeğerini döndürür.
  • Örnek: lower('FOO') döndürür foo.

litre

  • True Sol parametrenin doğru parametreden küçük olup olmadığını değerlendirir.
  • En düşük parametreler: 2. En fazla parametre sayısı: 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 olduğunda oluşan hatalar.
  • Dizeler için sıralı yoksayma-büyük/küçük harf karşılaştırması.
  • Örnek: lt(2, 5) (Doğru döndürür)

ne

  • Parametrelerin True eşit olup olmadığını değerlendirir
  • En düşük parametreler: 2. En fazla parametre sayısı: 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) döndürür True.

değil

  • True parametre False ise değerlendirir.
  • En düşük parametreler: 1. En fazla parametre: 1
  • Değerlendirme için değeri Boole değerine dönüştürür
  • Örnek: not(eq(1, 2)) (Doğru döndürür)

notIn

  • Sol parametre herhangi bir sağ parametreye eşit değilse True değerlendirir
  • En düşük parametreler: 1. Maksimum parametre sayısı: 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 karşılaşmadan sonra kısa devreler
  • Örnek: notIn('D', 'A', 'B', 'C') (Doğru döndürür)

veya

  • True Herhangi bir parametrenin olup olmadığını değerlendirirTrue
  • En düşük parametreler: 2. En fazla parametre sayısı: N.
  • Parametreleri değerlendirme için Boolean'a dönüştürür.
  • İlk True'dan sonra kısa devreler
  • Örnek: or(eq(1, 1), eq(2, 3)) (True döndürür, kısa devre yapar)

değiştir

  • 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 fazla parametre sayısı: 3.
  • replace(a, b, c): a, tüm b örnekleri c ile değiştirilerek 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).

böl

  • Belirtilen sınırlandırma karakterlerine göre bir dizeyi alt dizelere böler.
  • En düşük parametreler: 2. En fazla parametre sayısı: 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 }}
    

ile başlar

  • Sol parametre dizesinin True doğru parametreyle başlayıp başlamaymadığını değerlendirir
  • En düşük parametreler: 2. En fazla parametre sayısı: 2.
  • Değerlendirme için parametreleri dizeye gönderir.
  • Büyük/küçük harf göz ardı edilerek sıralı karşılaştırma gerçekleştirir.
  • Örnek: startsWith('ABCDE', 'AB') (Doğru döndürür).

düzeltmek

  • Başta ve sonda boşluklar olmadan parametreyi döndürür.
  • En düşük parametreler: 1. En fazla parametre: 1
  • Örnek: trim(' variable ') 'değişken' döndürür

Üst

  • Bir dizeyi 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 sayısı: 1.
  • Bir dizenin büyük harf eşdeğerini döndürür
  • Ö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 sayısı: 2.
  • Parametreleri değerlendirme için Boolean'a dönüştürür.
  • Örnek: xor(True, False) (Doğru döndürür)

İş durumu denetimi işlevleri

Aşağıdaki durum denetimi işlevlerini, değişken tanımlarında değil, koşullarda ifade olarak kullanın.

her zaman

  • Sonuç her zaman True olur (iptal edildiğinde bile). Not: Kritik bir hata, bir görevin çalışmasını yine de engelleyebilir. Örneğin, kaynak alınması başarısız olduysa.

iptal edilmiş

  • İşlem hattı iptal edilirse True sonucuna ulaşılır.

başarısız

  • Bir adım, eq(variables['Agent.JobStatus'], 'Failed') ile eşdeğerdir.
  • Bir iş için:
    • Önceki herhangi bir işin bağımlılık grafiğinde başarısız olması durumunda, bağımsız değişken olmadan True olarak değerlendirilir.
    • İş adları bağımsız değişken olarak verildiğinde, eğer bu işlerden herhangi biri başarısız olduysa, True değerini alır.

Başarıldı

  • Bir adım, in(variables['Agent.JobStatus'], 'Succeeded', 'SucceededWithIssues') ile eşdeğerdir.
  • İşlerle uğraşırken ve önceki bir işin başarılı olup olmadığını kontrol etmek istediğinizde dependsOn ile kullanın. İşler paralel olarak çalıştırılırken aşamalar sıralı olarak çalışır.
  • Bir iş için:
    • Argüman verilmediğinde, bağımlılık grafiğindeki önceki tüm işler başarılı veya kısmen başarılı olduysa True değerini döndürür.
    • iş adları bağımsız değişken olarak kullanıldığında, o işlerin tümü başarılı veya kısmen başarılı olduğunda True olarak değerlendirilir.
    • İşlem hattı iptal edilirse False sonucuna ulaşılır.

başarılı veya başarısız

  • Bir adım, in(variables['Agent.JobStatus'], 'Succeeded', 'SucceededWithIssues', 'Failed') ile eşdeğerdir.

  • Bir iş için:

    • Argüman 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 True değerine gelir.
    • İş adı argümanlarıyla True, bu işlerden herhangi birinin başarılı mı yoksa başarısız mı olduğunu değerlendirir.
    • Bağımlılık grafiğindeki önceki işler atlandığında, bunun yerine not(canceled()) kullanmayı isteyebilirsiniz.

    Bu işlev, işlem hattı iptal edildiğinde False değerlendirmesine geçmesi dışında always() gibidir.

Koşullu ekleme

Değişkenlerin değerlerini koşullu olarak atamak veya görevler için girdiler ayarlamak için if, elseif, ve else yan tümcelerini kullanın. Belirli bir koşul karşılandığında bir adımı koşullu olarak da çalıştırabilirsiniz.

Koşullular yalnızca şablon söz dizimi kullandığınızda çalışır. Daha fazla bilgi için bkz. değişken söz dizimi.

Şablonlar için, bir dizi veya eşleme eklerken koşullu ekleme kullanabilirsiniz. Daha fazla bilgi için bkz. Şablonlara koşullu ekleme.

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 aşamayı 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. Bu örnekte, foo'nin değeri elseif koşulunda true 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"

Her anahtar sözcük

Nesne türüyle each parametreler arasında döngü yapmak için anahtar sözcüğünü kullanın.

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

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

Ayrıca, bir nesnenin içindeki iç içe öğeler arasında yineleme yapabilirsiniz.

parameters:
- name: listOfFruits
  type: object
  default:
  - fruitName: 'apple'
    colors: ['red','green']
  - fruitName: 'lemon'
    colors: ['yellow']
steps:
- ${{ each fruit in parameters.listOfFruits }} :
  - ${{ each fruitColor in fruit.colors}} :
    - script: echo ${{ fruit.fruitName}} ${{ fruitColor }}

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 bir işin iş durumunu kontrol etme
  • Önceki bir aşamanın durumunu referans alma
  • Aynı aşamadaki önceki işin çıkış değişkenlerine referans al.
  • Önceki aşamadaki çıkış değişkenlerine bir aşamada referans ver.
  • Bir önceki aşamadaki bir işteki çıkış değişkenlerine sonraki aşamada referans verin.

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

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

Bağımlılık söz dizimine genel bakış

Çıkış değişkenlerine bağımlılıklarla başvurma söz dizimi koşullara bağlı olarak değişir. En yaygın senaryolara genel bir bakış aşağıdadır. Alternatif söz dizimlerinin de çalıştığı zamanlar olabilir.

Tür

Açıklama

aşamalar arası bağımlılık (farklı aşamalar)

stages içindeki bir koşulda, farklı bir aşamadaki bir işte, önceki aşamadan bir çıkış değişkenine başvurun.

  • Söz dizimi: and(succeeded(), eq(stageDependencies.<stage-name>.outputs['<job-name>.<step-name>.<variable-name>'], 'true'))
  • Örnek: and(succeeded(), eq(stageDependencies.A.outputs['A1.printvar.shouldrun'], 'true'))

Aynı aşamadaki farklı bir işte, stages içinde bir çıkış değişkenine başvurma.

  • Söz dizimi: and(succeeded(), eq(dependencies.<job-name>.outputs['<step-name>.<variable-name>'], 'true'))
  • Örnek: and(succeeded(), eq(dependencies.A.outputs['printvar.shouldrun'], 'true'))

Farklı bir aşamadaki bir çıkış değişkenine job içinde başvurun.

  • Söz dizimi: eq(stageDependencies.<stage-name>.<job-name>.outputs['<step-name>.<variable-name>'], 'true')
  • Örnek: eq(stageDependencies.A.A1.outputs['printvar.shouldrun'], 'true')

Aşamadan aşamaya bağımlılık (yerleştirme işi)

Başka bir aşamadaki bir dağıtım işinde bir çıkış değişkenine başvuruda bulunun stages.

  • Söz dizimi: eq(dependencies.<stage-name>.outputs['<deployment-job-name>.<deployment-job-name>.<step-name>.<variable-name>'], 'true')
  • Örnek: eq(dependencies.build.outputs['build_job.build_job.setRunTests.runTests'], 'true')

Aşamalar arası bağımlılık (kaynaklı dağıtım işi)

Farklı bir aşamadaki kaynağı içeren bir dağıtım işinde bir çıkış değişkenine stages başvurma.

  • Söz dizimi: eq(dependencies.<stage-name>.outputs['<deployment-job-name>.<Deploy_resource-name>.<step-name>.<variable-name>'], 'true')
  • Örnek: eq(dependencies.build.outputs['build_job.Deploy_winVM.setRunTests.runTests'], 'true')

Dağıtım işlerinde çıkış değişkenlerinin söz dizimi, dağıtım stratejisine bağlı olarak değişir. Daha fazla bilgi için bkz . Dağıtım işleri.

Aşamalar arası bağımlılıklar

Yapısal olarak, dependencies nesnesi, iş ve aşama adlarının results ve outputs ile eşlenmesi için bir haritadır. JSON olarak ifade edilir, şöyle görünür:

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

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.

Değişkenleri eşlemek veya aşama düzeyinde koşulları denetlemek için bu biçimini dependencies kullanın.

Bu örnekte, A ve B olmak üzere iki aşama vardır. A Aşaması koşuluna false sahiptir ve çalışmaz. Aşama A'nın sonucu Succeeded, SucceededWithIssues veya Skipped ise B aşaması çalışır. Aşama A atlandığı için B aşaması çalışır.

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 iki aşama vardır. Aşama A, çıkış değişkenlerini shouldrun olarak trueayarlayan A1 adlı bir iş içerir. Aşama B, shouldruntrue olduğunda çalışır. Çünkü shouldrun, true olduğu için Aşama B çalışı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şamanın içindeki iş düzeyinde, dependencies veriler aşama düzeyinde bilgi içermez.

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

Bu örnekte üç iş (a, b ve c) vardır. "Job a her zaman condition: false nedeniyle atlanır." B işi, ilişkili koşulları olmadığından çalışır. İş c, tüm bağımlılıkları ya başarılı bir şekilde tamamlandığı için (iş b) ya da atlandığı için (iş a) çalışı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, İş 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şten işe bağımlılıklar

İş düzeyinde, önceki aşamadaki bir işin çıkışlarına referans yapabilirsiniz. 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 görevi atlanırsa B1 görevi çalışır. B2 görevi, çalıştırılıp çalıştırılmayacağını belirlemek için A1 görevinin çıktı değişkeninin değerini denetler.

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, run_tests işini çalıştırır, eğer build_job dağıtım işleri runTeststrue olarak ayarlandıysa. 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:
        ...

Dağıtım işi çıktı değişkenleri

Aşama, 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, aşama test, dağıtım build_job ayarını shouldTesttrue olarak ayarlamasına bağlıdır. condition aşamasının test kısmında, build_job iki kez göründüğüne 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:
    - job: A
      steps:
        - script: echo Hello from job A

Yukarıdaki örnekte koşul, bir ortam kaynağına değil, doğrudan bir ortama atıfta bulunur. Bir ortam kaynağına başvurmak için, ortam kaynağı adını bağımlılıklar koşuluna eklemeniz gerekir. Aşağıdaki örnekte koşul, vmtest adlı bir 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:
  - job: A
    steps:
     - script: echo Hello from job A

Filtrelenmiş diziler

Bir öğe koleksiyonuyla çalışırken, * sözdizimini kullanarak filtrelenmiş bir dizi uygulayın. Filtrelenmiş bir dizi, adlarından bağımsız olarak tüm nesneleri veya öğeleri döndürür.

Örneğin, adlı foobir nesne dizisi düşünün. Dizinizdeki her nesnedeki id özelliğinin değerlerinden bir dizi almak istiyorsunuz.

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

Aşağıdaki ifadeyi kullanın:

foo.*.id

Bu ifade, sistemin foo'yi filtrelenmiş bir dizi olarak ele almasını ve ardından her bir nesnedeki id özelliğini seçmesini söyler.

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

[ 1, 2, 3 ]

Tür dönüştürme

İfadedeki değerler, ifade değerlendirildikçe bir türden diğerine dönüştürülebilir. Bir ifadeyi değerlendirdiğinizde, işlem parametreleri ilgili veri türüne dönüştürür ve sonra bunları dizelere dönüştürür.

Örneğin, bu YAML'deki değerler True ve False, ifade değerlendirildiğinde 1 ve 0 değerine dönüştürülür. 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)

Eşdeğerliği değerlendirmek için ifadeyi eq() kullandığınızda, değerler örtük olarak sayılara (false ve 0true1öğesine) dönüştürülür.

variables:
  trueAsNumber: $[eq('true', true)] # 1 vs. 1, True
  falseAsNumber: $[eq('false', true)] # 0 vs. 1, False

steps:
- script: echo $(trueAsNumber)
- script: echo $(falseAsNumber)

Bu sonraki örnekte, hem değerler variables.emptyString hem de boş dize boş dizeler olarak değerlendirilir. İşlev coalesce() , parametreleri sırayla değerlendirir ve null veya boş dize 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.

Kimden / Son Boolean (Boole Mantığı) Boş Sayı Dize Sürüm
Boolean - - Evet Evet -
Sıfır Evet - Evet Evet -
Numara Evet - - Evet Kısmi
Dize Evet Kısmi Kısmi - Kısmi
Sürüm Evet - - Evet -

Boolean (Boole Mantığı)

Numaralandır:

  • False0
  • True1

String’e Çevir

  • False'False'
  • True'True'

Boş

  • Boolean için: False
  • Numaralandır: 0
  • Dizeye: '' (boş dizgi)

Sayı

  • Boole'ya: 0False, başka bir sayı → True
  • Sürüm numarası: Sıfırdan büyük olmalı ve sıfır olmayan bir ondalık değer içermelidir. Int32.MaxValue değerinden küçük olmalıdır (ondalık kısmı dahil).
  • 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 Boole: '' (boş dize) → False, diğer tüm dizeler → True
  • To null: '' (boş dize) → Null, dönüştürülemeyen herhangi bir başka dize
  • Numaralamak için: '' (boş dize) → 0, aksi takdirde, C#'ı Int32.TryParse ve aşağıdaki kuralları kullanarak çalıştırır: AllowDecimalPoint | AllowLeadingSign | AllowLeadingWhite | AllowThousands | AllowTrailingWhite. Eğer TryParse başarısız olursa dönüştürülemez.
  • C#'ın Version.TryParse çalıştırılacağı sürüm. En az Ana ve Yan bileşenleri içermelidir. Eğer TryParse başarısız olursa dönüştürülemez.

Sürüm

  • Boolean için: True
  • "Dize dönüştür: Major.Minor veya Major.Minor.Build veya Major.Minor.Build.Revision."

SSS

İfadelerin desteklemediğini bir şey yapmak istiyorum. İşlem Hatları işlevselliğini genişletmek için hangi seçeneklerim var?

İfade içeren bir betik kullanarak iş akışınızı özelleştirebilirsiniz. Örneğin, bu kod parçacığı değişkeni alır BUILD_BUILDNUMBER ve Bash kullanarak böler. Bu betik, ana ve yardımcı çalıştırma numaraları için $MAJOR_RUN ve $MINOR_RUN olarak iki yeni değişken oluşturur. İki değişken daha sonra task.setvariable kullanılarak iki işlem hattı değişkeni, $major ve $minor, 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)"