İfadeler

Azure Pipelines | TFS 2018 | TFS 2017,3

Not

Microsoft Team Foundation Server (TFS) 2018 ve önceki sürümlerde, derleme ve yayın işlem hatlarıtanımlarolarak adlandırılır, çalışmalaraderlemelerdenir, hizmet bağlantılarınahizmet uç noktalarıdenir, aşamalarortamlarolarak adlandırılır ve işleraşamalarolarak adlandırılır.

İfadeler, bir 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ı belirlemede koşullardır .

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

İfadelerin başka bir yaygın kullanımı, değişkenlerin tanımlanmasıyla sonuçlanır. İfadeler, derleme zamanında veya çalışmazamanı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 hesaplamak için bir yol 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 ifadesi sözdizimleri arasındaki fark, birincil olarak hangi bağlamın kullanılabildiği. Bir derleme zamanı ifadesinde ( ${{ <expression> }} ), erişimi parameters ve statik olarak tanımlamış olursunuz variables . Çalışma zamanı ifadesinde ( $[ <expression> ] ), daha fazla parametreye erişiminiz vardır variables .

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

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

Bir ifade, bir sabit değer, bir değişkene başvuru, bir bağımlılık, bir işlev veya bunların geçerli bir iç içe birleşimini içerebilir.

Değişmez Değerler

Bir ifadenin parçası olarak, Boolean, null, sayı, dize veya sürüm değişmezlerini 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 Boolean değişmez değer ifadeleridir.

Null

Null, sözlük isabetsizlik sınıfından döndürülen özel bir sabit değer ifadesidir, örn. ( 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şareti olmalıdır. Örneğin: 'this is a string'.

Sabit bir tek tırnak işareti ifade etmek için, tek bir teklifle kaçış. Örneğin: 'It''s OK if they''re using contractions.'.

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

myKey: |
  one
  two
  three

Sürüm

En fazla dört parçaya sahip bir sürüm numarası. Bir sayıyla başlamalı ve iki ya da üç nokta ( . ) karakteri içermelidir. Örneğin: 1.2.3.4.

Değişkenler

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

  • Dizin sözdizimi: variables['MyVar']
  • Özellik başvurusu sözdizimi: variables.MyVar

Özellik başvuru söz dizimini kullanmak için, özellik adı şu şekilde olmalıdır:

  • Veya ile başlayın a-Z_
  • Arkasından a-Z0-9 veya_

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

Değişkenler her zaman dizelerdir. 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şkenleri kullanma sınırlaması vardır. İfade olarak tanımlanan değişkenler, her iki ifadenin de düzgün şekilde değerlendirileceğini garanti edilmediği için, değer olarak ifade eden başka bir değişkene bağlı olmamalıdır. Örneğin a$[ <expression> ] , değeri değişkenin değeri için bir bölüm olarak kullanılan bir değişkendir b . İşleme değişkenlerinin sırası garantili değişken olmadığından b değerlendirilmeden sonra yanlış bir değişken değeri olabilir a .

Açıklanan kurulumlarını yalnızca, YAML işlem hattındaki değişken anahtar sözcüğü aracılığıyla değişkenleri ayarlarken izin verilir. Değişkenleri, işlemeden sonra doğru değerleri almak için işlenmeleri gereken sırada yerleştirmeniz gerekir.

İşlevler

Aşağıdaki yerleşik işlevler ifadelerde kullanılabilir.

ve

  • TrueTüm parametrelerin şu şekilde olduğunu değerlendirirTrue
  • Min parametreleri: 2. En fazla Parametreler: N
  • Değerlendirme için parametreleri Boole değerine yayınlar
  • İlkden sonra kısa devre False
  • Örnek: and(eq(variables.letters, 'ABC'), eq(variables.numbers, 123))

Coalesce

  • Parametreleri sırayla değerlendirir ve null ya da boş dize değerine eşit olmayan değeri döndürür.
  • Min parametreleri: 2. En fazla Parametreler: N
  • Örnek: coalesce(variables.couldBeNull, variables.couldAlsoBeNull, 'literal so it always works')

contains

  • TrueSol parametre dizesi sağ parametre içeriyorsa değerlendirir
  • Min parametreleri: 2. En fazla Parametreler: 2
  • Değerlendirme için parametreleri dizeye yayınlar
  • Sıralı Ignore-Case karşılaştırması gerçekleştirir
  • Örnek: contains('ABCDE', 'BCD') (true döndürür)

containsValue

  • TrueSol parametrenin bir dizi olup olmadığını değerlendirir ve herhangi bir öğe doğru parametreye eşittir. Ayrıca, True sol parametrenin bir nesne olması ve herhangi bir özelliğin değerinin doğru parametreye eşit olup olmadığını değerlendirir.
  • Min parametreleri: 2. En fazla Parametreler: 2
  • Sol parametre bir diziyse, her öğeyi sağ parametrenin türüyle eşleşecek şekilde dönüştürün. Sol parametre bir nesneiyorsa, her özelliğin değerini sağ parametrenin türüyle eşleşecek şekilde dönüştürün. Dönüştürme başarısız olursa, belirli bir öğe için eşitlik karşılaştırması değerlendirilir False .
  • Dizeler için sıralı Ignore-Case karşılaştırması
  • İlk eşleşmesinden sonra kısa devre

Not

Bir dize belirtmek için YAML ardışık düzeninde sabit bir sözdizimi yoktur. Bu işlev, genel işlem hatlarında sınırlı bir kullanım değildir. Bu, adımlar listesi gibi sistem tarafından sunulan diziler ile ardışık düzen dekoratör bağlamında kullanılmak üzere tasarlanmıştır.

convertToJson

  • Karmaşık bir nesne alın ve bunu JSON olarak verir.
  • Minimum Parametreler: 1. En fazla Parametreler: 1.
parameters:
  - name: listOfValues
    type: object
    default:
      this_is:
        a_complex: object
        with:
          - one
          - two

steps:
- script: |
    echo "${{ convertToJson(parameters.listOfValues) }}"
# Example output
{
  this_is: {
    a_complex: object,
    with: [
      one,
      two
    ]
  }
}

counter

  • Bu işlev, yalnızca bir değişkeni tanımlayan bir ifadede kullanılabilir. Bir adım, iş veya aşama için koşulun bir parçası olarak kullanılamaz.
  • İşlem hattının her çalıştırılmasıyla arttırılan bir sayıyı değerlendirir.
  • Parametreler: 2. prefix ve seed .
  • Önek bir dize ifadesidir. Her benzersiz önek değeri için sayacın ayrı bir değeri izlenir. , prefix UTF-16 karakterlerini kullanmalıdır.
  • Çekirdek, sayacın başlangıç değeridir

İşlem hattınızda her yürütme işlemi için otomatik olarak artan bir sayaç oluşturabilirsiniz. Bir sayaç tanımladığınızda, ve ' ı sağlarsınız prefixseed . 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 örnekteki değer 100 olacaktır. İkinci çalıştırmada, değerinin değeri major hala 1 olduğundan 101 olacaktır.

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

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

Burada, 100 ' de başlayan bir sayaç olarak görev yapacak bir değişken ayarlamaya yönelik başka bir örnek, her çalıştırma için 1 ' den arttırılır ve her gün 100 ' e sıfırlanır.

Not

pipeline.startTime ifadeler dışında kullanılamaz. pipeline.startTimesystem.pipelineStartTimebir tarih ve saat nesnesi halinde biçimlendirir ve bu sayede ifadelerle çalışmak için kullanılabilir. İçin varsayılan saat dilimi pipeline.startTime UTC 'dir. Kuruluşunuzun saat dilimini değiştirebilirsiniz .

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

PR 'ler ve CI çalıştırmaları için ayrı bir değer tutan bir sayaca sahip bir örnek aşağıda verilmiştir.

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

Sayaçlar bir işlem hattının kapsamına alınır. Diğer bir deyişle, bu işlem hattının her çalıştırması için değeri artırılır. Proje kapsamındaki sayaç yok.

endsWith

  • TrueSol parametre dizesinin sağ parametre ile bitip bitmediğini değerlendirir
  • Min parametreleri: 2. En fazla Parametreler: 2
  • Değerlendirme için parametreleri dizeye yayınlar
  • Sıralı Ignore-Case karşılaştırması gerçekleştirir
  • Örnek: endsWith('ABCDE', 'DE') (true döndürür)

eq

  • TrueParametrelerin eşit olup olmadığını değerlendirir
  • Min parametreleri: 2. En fazla Parametreler: 2
  • Sağ parametreyi sol parametrenin türüyle eşleşecek şekilde dönüştürür. FalseDönüştürmenin başarısız olup olmadığını döndürür.
  • Dizeler için sıralı Ignore-Case karşılaştırması
  • Örnek: eq(variables.letters, 'ABC')

biçim

  • Sondaki parametreleri değerlendirir ve baştaki parametre dizesine ekler
  • Minimum Parametreler: 1. En fazla Parametreler: N
  • Örnek: format('Hello {0} {1}', 'John', 'Doe')
  • Tarih biçimlendirme için .NET özel tarih ve saat biçimi belirticileri kullanır ( , 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.
  • Katlama ayraçları ile kaçış. Örnek: format('literal left brace {{ and literal right brace }}')

ge

  • TrueSol parametrenin sağ parametreden büyük veya ona eşit olup olmadığını değerlendirir
  • Min parametreleri: 2. En fazla Parametreler: 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ı Ignore-Case karşılaştırması
  • Örnek: ge(5, 5) (true döndürür)

gt

  • TrueSol parametrenin sağ parametreden daha büyük olup olmadığını değerlendirir
  • Min parametreleri: 2. En fazla Parametreler: 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ı Ignore-Case karşılaştırması
  • Örnek: gt(5, 2) (true döndürür)

in

  • TrueSol parametrenin herhangi bir doğru parametreye eşit olup olmadığını değerlendirir
  • Minimum Parametreler: 1. En fazla Parametreler: 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ürme başarısız olursa değerlendirir.
  • Dizeler için sıralı Ignore-Case karşılaştırması
  • İlk eşleşmesinden sonra kısa devre
  • Ö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.
  • Min parametreleri: 2. En fazla Parametreler: 2
  • Dizideki her öğe bir dizeye dönüştürülür. Karmaşık nesneler boş dizeye dönüştürülür.
  • Sağ parametre bir dizi değilse, sonuç doğru parametre bir dizeye dönüştürülür.

Bu örnekte, dizideki her öğe arasında 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

  • TrueSol parametrenin sağ parametreye eşit veya daha küçük olduğunu değerlendirir
  • Min parametreleri: 2. En fazla Parametreler: 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ı Ignore-Case karşılaştırması
  • Örnek: le(2, 2) (true döndürür)

length

  • Bir dizenin veya bir dizinin uzunluğunu ya da sistemden gelen veya bir parametreden gelen bir diziyi döndürür
  • Minimum Parametreler: 1. En fazla parametreler 1
  • Örnek: length('fabrikam') 8 döndürür

düşürül

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

lt

  • TrueSol parametrenin sağ parametreden küçük olup olmadığını değerlendirir
  • Min parametreleri: 2. En fazla Parametreler: 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ı Ignore-Case karşılaştırması
  • Örnek: lt(2, 5) (true döndürür)

ne

  • TrueParametrelerin eşit olmadığını değerlendirir
  • Min parametreleri: 2. En fazla Parametreler: 2
  • Sağ parametreyi sol parametrenin türüyle eşleşecek şekilde dönüştürür. TrueDönüştürmenin başarısız olup olmadığını döndürür.
  • Dizeler için sıralı Ignore-Case karşılaştırması
  • Örnek: ne(1, 2) (true döndürür)

not

  • TrueParametrenin olup olmadığını değerlendirirFalse
  • Minimum Parametreler: 1. En fazla 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)

Notın

  • TrueSol parametrenin herhangi bir doğru parametreye eşit olup olmadığını değerlendirir
  • Minimum Parametreler: 1. En fazla Parametreler: 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ürme başarısız olursa değerlendirir.
  • Dizeler için sıralı Ignore-Case karşılaştırması
  • İlk eşleşmesinden sonra kısa devre
  • Örnek: notIn('D', 'A', 'B', 'C') (true döndürür)

veya

  • TrueHerhangi bir parametre varsa değerlendirirTrue
  • Min parametreleri: 2. En fazla Parametreler: N
  • Değerlendirme için parametreleri Boole değerine yayınlar
  • İlkden sonra kısa devre True
  • Örnek: or(eq(1, 1), eq(2, 3)) (true, kısa devreler döndürür)

değiştirin

  • Geçerli örnekteki bir dizenin tüm örneklerinin başka bir dizeyle değiştirildiği yeni bir dize döndürür
  • Min parametreleri: 3. En fazla Parametreler: 3
  • replace(a, b, c): c ile değiştirilmiş tüm b örneklerinin bulunduğu bir 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 )

startsWith

  • TrueSol parametre dizesinin sağ parametreyle başlıyorsa değerlendirir
  • Min parametreleri: 2. En fazla Parametreler: 2
  • Değerlendirme için parametreleri dizeye yayınlar
  • Sıralı Ignore-Case 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 harfli karakterlere dönüştürür
  • Minimum Parametreler: 1. En fazla parametreler 1
  • Bir dizenin büyük harfli eşdeğerini döndürür
  • Örnek: upper('bah') döndürür BAH

xor

  • TrueTam olarak bir parametre olduğunu değerlendirirTrue
  • Min parametreleri: 2. En fazla Parametreler: 2
  • Değerlendirme için parametreleri Boole değerine yayınlar
  • Örnek: xor(True, False) (true döndürür)

İş durumu denetim işlevleri

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

Her

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

edilmesi

  • İşlem True hattının iptal edilip edilmeyeceğ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, True yalnızca bağımlılık grafiğindeki bir önceki iş başarısız olursa olarak değerlendirilir.
    • Bağımsız değişken olarak iş adlarıyla, True yalnızca bu işlerin herhangi biri başarısız olursa olarak değerlendirilir.

başarılı

  • Bir adım için, in(variables['Agent.JobStatus'], 'Succeeded', 'SucceededWithIssues')
  • Bir iş için:
    • Bağımsız değişken olmadan, True yalnızca bağımlılık grafiğindeki önceki tüm işler başarılı veya kısmen başarılı olursa olarak değerlendirilir.
    • Önceki iş başarılı olduysa ancak daha fazla yukarı akış bağımlılığı başarısız olduysa, succeeded('previousJobName') doğru döndürür. Yalnızca kullandığınızda dependsOn: previousJobName , tüm yukarı akış bağımlılıkları başarılı olmadığından başarısız olur. Yalnızca önceki işi değerlendirmek için succeeded('previousJobName') bir koşulda kullanın.
    • Bağımsız değişken olarak iş adlarıyla, True Bu işlerin tümü başarılı veya kısmen başarılı olursa olarak değerlendirilir.
    • Falseİşlem hattının iptal edilip edilmeyeceğini değerlendirir.

succeededOrFailed

  • Bir adım için, in(variables['Agent.JobStatus'], 'Succeeded', 'SucceededWithIssues', 'Failed')

  • Bir iş için:

    • Bağımsız değişken olmadan, True bağımlılık grafiğindeki işlerin başarılı veya başarısız olmasından bağımsız olarak değerlendirilir.
    • İş adlarıyla bağımsız değişken olarak, True Bu işlerin herhangi birinin başarılı veya başarısız olup olmadığını değerlendirir.

    Bu, işlem always()False hattının ne zaman iptal edildiğini değerlendilecektir.

Koşullu ekleme

if, elseif , Ve else yan tümceleri, değişken değerlerini koşullu olarak atamak veya görevler için girişler ayarlamak için kullanabilirsiniz. Ayrıca, bir koşul karşılandığında koşullu olarak bir adımı çalıştırabilirsiniz.

Conditionals yalnızca şablon söz dizimi kullanılırken çalışır. Değişken sözdizimihakkı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 edinebilirsiniz.

Koşullu değişken 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}}

Bir 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

variables:
  - name: foo
    value: fabrikam # triggers else condition

pool:
  vmImage: 'ubuntu-latest'

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

"Each" anahtar sözcüğü

Parametrelerde nesne each türüyle döngü yapmak için anahtar sözcüğünü kullanabilirsiniz.

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şvuru yapmak için bağımlılıklar bağlamını kullanabilir. Bağımlılıkları aşağıdakiler için kullanabilirsiniz:

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

Bağlam, işler ve dependencies aşamalar için çağrılır ve değişkenlere çok benzer şekilde çalışır. Bir işin içinde, başka bir aşamadaki bir işin çıkış değişkenine başvurursanız bağlam olarak adlandırılan bir bağlam stageDependencies vardır.

Çıkış değişkenlerinin tırnak karakterleriyle ( veya ) ilgili sorunlarıyla ilgili sorun yaşamaları ' için bu sorun giderme "'

Bağımlılıkları aşamaya aşama

Yapısal olarak, dependencies nesnesi ve için iş ve aşama adlarının bir resultsoutputs haritasıdır. JSON olarak ifade edildi, şöyle olur:

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

Değişkenlerle dependencies eşlemek veya aşama düzeyinde koşulları kontrol etmek için bu biçimi kullanın. Bu örnekte Aşama B, A aşamasının başarılı veya atlanmış olmasıyla çalışı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. Belirli bir söz dizimi hakkında daha fazla 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 B aşaması, A aşamasının bir değişkenine 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ında 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şvurursanız, aşamaya bir bölüm ekleyerek bu otomatik dependsOn varsayılanı geçersiz kılabilirsiniz.

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

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

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

Bu örnekte, İş A her zaman atlanır ve İş B çalıştıracak. Tüm bağımlılıkları başarılı veya atlanmış olduğu için C işi çalıştıracak.

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 İşlerinden 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şden işe bağımlılıkları

İş düzeyinde, önceki bir aşamada bir işten çıkışlara da başvurarak çıkışlara başvurarak. Bunun için bağlamın kullanımı stageDependencies 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 başarılı veya atlanmış olsun B1 işi çalıştırılacak. İş B2, çalıştırıp çalıştırmayacaklarını belirlemek için A1 işi çıkış değişkeninin değerini kontrol edin.

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, 'Succeeded', 'SucceededWithIssues', '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

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

Derlemeden sonra değişiklik gerekmiyorsa, belirli koşullar altında işlem hattında bir aşamayı atlamak iyi olabilir. Terraform Plan'ı kullanırken onay tetiklemek ve yalnızca plan değişiklik içerdiğinde uygulamak istemeniz buna örnek olarak gösterilir.

Bu koşulu bir aşamada kullanırken değişkenlerini değil, dependencies değişkenlerini kullan stageDependencies gerekir.

Aşağıdaki örnek, bir aşamadaki bir adımda bir değişken ayar eden (Terraform Planı'nın gerçek bilgilerini kullanın) ve ardından ikinci aşamayı yalnızca değişkenin belirli bir değeri varsa ç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"

Filtrelenmiş diziler

Bir öğe koleksiyonu üzerinde çalışma söz dizimi kullanarak * filtrelenmiş bir dizi uygulayabilirsiniz. Filtrelenmiş dizi, adlarından bağımsız olarak tüm nesneleri/öğeleri döndürür.

Örnek olarak adlı bir nesne dizisi foo düşünün. Dizimizde yer alan her nesnede id özelliğinin değerlerini içeren bir dizi almak istiyoruz.

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

Şunları yapabiliriz:

foo.*.id

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

Bu, şu şekilde olur:

[ 1, 2, 3 ]

Tür atama

İfade değerlendirilip bir ifadede yer alan değerler bir türden diğerine dönüştürmek için kullanılır. Bir ifade değerlendirilirken, parametreler ilgili veri türüyle birikip dizelere geri döner.

Örneğin, bu YAML'de ve değerleri TrueFalse ifade 10 değerlendiriken ve değerlerine dönüştürülür. Sol parametre lt()True sağ parametreden küçük olduğunda işlevi döndürür.

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

From / To Boole Null Sayı Dize Sürüm
Boole - - Yes Yes -
Null Yes - Yes Yes -
Sayı Yes - - Yes Kısmi
Dize Yes Kısmi Kısmi - Kısmi
Sürüm Yes - - Yes -

Boole

Sayı olarak:

  • False0
  • True1

Dizeye:

  • False'False'
  • True'True'

Null

  • Boole'a: False
  • Sayı olarak: 0
  • Dizeye: '' (boş dize)

Sayı

  • Boole'a: 0False →, diğer tüm → True
  • Sürüm: Sıfırdan büyük olmalı ve sıfır olmayan bir ondalık sayı içermesi gerekir. Int32.MaxValue'dan (ondalık bileşen de) küçük olmalıdır.
  • Dizeye: Sayıyı binlik ayırıcısı ve ondalık ayırıcısı olan bir dizeye dönüştürür.

Dize

  • Boole değerine: '' (boş dize) False →, diğer dizeler → True
  • Null değerine: '' (boş dize) Null →, diğer dizeler dönüştürülebilir değil
  • Sayı olarak: '' (boş dize) → 0 ise, C#'leri Int32.TryParse'' ve şu kuralları kullanarak çalıştırır: AllowDecimalPoint | AllowLeadingSign | AllowLeadingWhite | allowThousands | Allowtrailingwhite. Başarısız TryParse olursa, dönüştürülebilir değildir.
  • Sürüm: C# 'nin sürümünü Version.TryParse çalıştırır. En azından Ana ve İkincil bileşen içermesi gerekir. Başarısız TryParse olursa, dönüştürülebilir değildir.

Sürüm

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

SSS

İfadeler tarafından desteklenen bir şey yapmak istiyorum. İşlevselliği genişletmek için hangi Pipelines var?

İşlem Hattınızı bir ifade içeren bir betikle özelleştirebilirsiniz. Örneğin, bu kod parçacığı değişkeni BUILD_BUILDNUMBER alır ve Bash ile böler. Bu betik, ana ve küçük çalıştırma $MAJOR_RUN numaraları için iki yeni değişken $MINOR_RUN (ve) çıkışını verir. Ardından iki değişken, $major$minor$majorile iki işlem hattı değişkeni oluşturmak için kullanılır. Bu değişkenler aşağı akış adımlarda 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)"