Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
Önemli
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-Zveya_ile başlayın - Şununla takip edilmelidir:
a-Z,0-9veya_
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
TrueolduğundaTruesonucunu 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.
-
Falsesonrası 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
-
TrueSol 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
-
TrueSol 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ğerlendirirTrue. - 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:
prefixveseed. -
prefixbir dize ifadesidir. İşlev, her benzersizprefixiçin ayrı bir sayaç değeri izler. UTF-16 karakterleriniprefixiçinde kullanın. -
seedsayacı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
Truedoğ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
Trueeş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 durumdapipeline.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
-
TrueSol 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
-
TrueSol 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
Trueherhangi 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
Trueile 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
-
TrueSol 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ürfoo.
litre
-
TrueSol 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
Trueeş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ürTrue.
değil
-
TrueparametreFalseise 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
Truedeğ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
-
TrueHerhangi 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ümbörneklericile değiştirilerek döndürür. - Örnek:
replace('https://www.tinfoilsecurity.com/saml/consume','https://www.tinfoilsecurity.com','http://server')(döndürürhttp://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
Truedoğ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ürBAH
Xor
-
TrueTam 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
Trueolur (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
Truesonucuna 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
Trueolarak değerlendirilir. - İş adları bağımsız değişken olarak verildiğinde, eğer bu işlerden herhangi biri başarısız olduysa,
Truedeğerini alır.
- Önceki herhangi bir işin bağımlılık grafiğinde başarısız olması durumunda, bağımsız değişken olmadan
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
dependsOnile 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
Truedeğ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
Trueolarak değerlendirilir. - İşlem hattı iptal edilirse
Falsesonucuna ulaşılır.
- 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
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
Truedeğ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
Falsedeğerlendirmesine geçmesi dışındaalways()gibidir.- 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
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'))
işten işe bağımlılık (aynı aşama)
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'))
İşin aşama bağımlılığı (farklı evreler)
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:
-
False→0 -
True→1
String’e Çevir
-
False→'False' -
True→'True'
Boş
- Boolean için:
False - Numaralandır:
0 - Dizeye:
''(boş dizgi)
Sayı
- Boole'ya:
0→False, 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.TryParseve aşağıdaki kuralları kullanarak çalıştırır: AllowDecimalPoint | AllowLeadingSign | AllowLeadingWhite | AllowThousands | AllowTrailingWhite. EğerTryParsebaş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ğerTryParsebaş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)"