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 2022 - Azure DevOps Server 2019
Ö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.
İfadeler, işlem hattı yazarken dize, boole veya sayı değeri belirtmeniz gereken birçok yerde kullanılabilir. bir ifade bir dizi döndürdüğünde, normal dizin oluşturma kuralları uygulanır ve dizin ile 0
baş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.
İfadeler derleme zamanında veya çalışma zamanında değerlendirilebilir.
Derleme zamanı ifadeleri her yerde kullanılabilir; çalışma zamanı ifadeleri değişkenlerde ve koşullarda kullanılabilir. Çalışma zamanı ifadeleri, değişkenlerin ve durumun içeriğini hesaplamanın bir yolu olarak tasarlanmıştır (örnek: condition
).
# Two examples of expressions used to define variables
# The first one, a, is evaluated when the YAML file is compiled into a plan.
# The second one, b, is evaluated at runtime.
# Note the syntax ${{}} for compile time and $[] for runtime expressions.
variables:
a: ${{ <expression> }}
b: $[ <expression> ]
Çalışma zamanı ve derleme zamanı ifade söz dizimleri arasındaki fark öncelikle hangi bağlamın kullanılabilir olduğudur.
Derleme zamanı ifadesinde (${{ <expression> }}
), 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 bir değer, bir değişkene başvuru, bir bağımlılığa başvuru, bir fonksiyon veya bunların geçerli bir iç içe birleşimi olabilir.
Değişmez Değerler
bir ifadenin parçası olarak boole, null, sayı, dize veya sürüm 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
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.
String
Tek tırnak içine alınmalıdır. Örneğin: 'this is a string'
.
Değişmez bir tek tırnak işaretini ifade etmek için tek bir tırnak işaretiyle kaçış tuşuna basılın.
Ö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 çözme söz dizimini kullanmak için, özellik adı aşağıdaki koşulları sağlamalıdır:
-
a-Z
veya_
ile başlayın - Aşağıdakilerden biri tarafından
a-Z
0-9
veya_
takip edilebilir.
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, bunun yerine parametreleri kullanmanız gerekir.
Not
Değişkenler sekmesi kullanıcı arabirimi aracılığıyla bu tür değişkenleri ayarlarken hem Klasik hem de YAML işlem hatları için ifadelerle değişkenlerin kullanılmasına yönelik bir sınırlama vardır. İfade olarak tanımlanan değişkenler, 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 $[ <expression> ]
olarak kullanılan değişken a
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.
Açıklanan yapılara yalnızca YAML işlem hattında değişkenler anahtar sözcüğü aracılığıyla değişkenleri ayarlarken izin verilir. İşlendikten sonra doğru değerleri almak için değişkenlerin işlenme sırasına göre ayarlanması gerekir.
İşlevler
İfadelerde aşağıdaki yerleşik işlevler kullanılabilir.
ve
- Bütün parametreler
True
ise,True
değerine ulaşır. - En düşük parametreler: 2. Maksimum parametre sayısı: N
- Parametreleri değerlendirilmek üzere Boole olarak dönüştürür
- İlk devreden sonra kısa devreler
False
- Örnek:
and(eq(variables.letters, 'ABC'), eq(variables.numbers, 123))
birleşmek
- Parametreleri sırayla (soldan sağa) değerlendirir ve null veya boş dizeye eşit olmayan ilk değeri döndürür.
- Parametre değerlerinin tümü null veya boş dizeyse değer döndürülür.
- En düşük parametreler: 2. Maksimum parametre sayısı: N
- Örnek:
coalesce(variables.couldBeNull, variables.couldAlsoBeNull, 'literal so it always works')
içerir
- Sol parametre Dizesinin sağ parametreyi içerip içermediğini değerlendirir
True
- En düşük parametreler: 2. En fazla parametre: 2
- Parametreleri değerlendirme için Dizeye gönderir
- Büyük/küçük harf farkı gözetmeksizin sıralı karşılaştırma yapar
- Örnek:
contains('ABCDE', 'BCD')
(True 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ğerlendirirTrue
. - En düşük parametreler: 2. En fazla parametre: 2
- Sol parametre bir diziyse, her öğeyi doğru parametrenin türüyle eşleşecek şekilde dönüştürün. Sol parametre bir nesneyse, her özelliğin değerini doğru parametrenin türüyle eşleşecek şekilde dönüştürün. Her bir öğe için eşitlik karşılaştırması, dönüştürmenin başarısız olup olmadığını değerlendirir
False
. - Dizeler için büyük/küçük harfe duyarlı olmayan sıralı karşılaştırma
- İ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"
convertToJson
- 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"
]
}
}
counter
- Bu işlev yalnızca değişken tanımlayan bir ifadede kullanılabilir. Adım, iş veya aşama koşulunun parçası olarak kullanılamaz.
- Bir işlem hattının her çalıştırmasıyla artırılan bir sayıyı değerlendirir.
- Parametreler: 2.
prefix
veseed
. - Ön ek bir dize ifadesidir. Her benzersiz ön ek değeri için ayrı bir sayaç değeri izlenir. UTF-16
prefix
karakterlerini kullanmalıdır. - Tohum, sayacın başlangıç değeridir
İşlem hattınızın her yürütmesinde otomatik olarak bir artırılan bir sayaç oluşturabilirsiniz. Bir sayaç tanımladığınızda, bir prefix
ve seed
sağlarsınız. Bunu gösteren bir örnek aşağıda verilmiştir.
variables:
major: 1
# define minor as a counter with the prefix as variable major, and seed as 100.
minor: $[counter(variables['major'], 100)]
steps:
- bash: echo $(minor)
minor
İşlem hattının ilk çalıştırmasında yukarıdaki örnekte değeri 100'dür. İkinci çalıştırmada değeri major
hala 1 olması koşuluyla 101'dir.
YAML dosyasını düzenler ve değişkenin major
değerini 2 olarak güncelleştirirseniz, işlem hattının bir sonraki çalıştırmasında değeri minor
100 olur. Sonraki çalıştırmalarda sayaç 101, 102, 103, ... şeklinde artar.
Daha sonra YAML dosyasını düzenler ve değerini major
1 olarak ayarlarsanız, sayacın değeri bu ön ek için kaldığı yerden devam eder. Bu örnekte, işlem 102'de devam eder.
Aşağıda, 100'de başlayan, her çalıştırma için 1 artırılan ve her gün 100'e sıfırlanan bir sayaç olarak davranacak bir değişken ayarlamanın başka bir örneği verilmişti.
Not
pipeline.startTime
ifadelerin dışında kullanılamaz.
pipeline.startTime
bir tarih ve saat nesnesine biçimlendirerek system.pipelineStartTime
ifadelerle çalışabilmesini sağlar.
için pipeline.startTime
varsayılan saat dilimi UTC'dir. Kuruluşunuzun saat dilimini değiştirebilirsiniz.
jobs:
- job:
variables:
a: $[counter(format('{0:yyyyMMdd}', pipeline.startTime), 100)]
steps:
- bash: echo $(a)
İşte PR'ler ve CI çalıştırmaları için ayrı bir değer tutan bir sayaç örneği.
variables:
patch: $[counter(variables['build.reason'], 0)]
Sayaçların kapsamı bir işlem hattı olarak belirlenmiştir. Başka bir deyişle, bu işlem hattının her çalıştırılmasında değeri artırılır. Proje kapsamında sayaç yok.
ile biter
- Sol parametre Dizesinin
True
doğru parametreyle bitip bitmediğini değerlendirir - En düşük parametreler: 2. En fazla parametre: 2
- Parametreleri değerlendirme için Dizeye gönderir
- Büyük/küçük harf fark etmeksizin sıralı karşılaştırma gerçekleştirir.
- Örnek:
endsWith('ABCDE', 'DE')
(True değerini döndürür)
eq
- Parametrelerin
True
eşit olup olmadığını değerlendirir - En düşük parametreler: 2. En fazla parametre: 2
- Sağ parametreyi sol parametrenin türüyle eşleşecek şekilde dönüştürür. Dönüştürme başarısız olursa döndürür
False
. - Dizeler için sıraya göre büyük/küçük harf duyarsız karşılaştırma
- Örnek:
eq(variables.letters, 'ABC')
biçim
- Sondaki parametreleri değerlendirir ve bunları baştaki parametre dizesine ekler
- En düşük parametreler: 1. Azami parametreler: 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
-
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: 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ıraya göre büyük/küçük harf duyarsız karşılaştırma
- Ö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: 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şacak hatalar.
- Dizeler için sıralı yoksayma-büyük/küçük harf karşılaştırması
- Örnek:
gt(5, 2)
(doğru değeri 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. En fazla parametre: N
- Sağ parametreleri sol parametrenin türüyle eşleşecek şekilde dönüştürür. Eşitlik karşılaştırması
False
, dönüştürmenin başarısız olup olmadığını değerlendirir. - Dizeler için sıralı, büyük/küçük harf duyarsız karşılaştırma
- İ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: 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: 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 bir hata oluşur.
- Dizeler için büyük/küçük harf duyarsız sıralama 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. Azami 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 1 parametre.
- Dizenin küçük harf eşdeğerini verir
- Örnek:
lower('FOO')
döndürürfoo
litre
-
True
Sol parametrenin doğru parametreden küçük olup olmadığını değerlendirir - En düşük parametreler: 2. En fazla parametre: 2
- Sağ parametreyi sol parametrenin türüyle eşleşecek şekilde dönüştürür. Dönüştürme başarısız olursa oluşan hatalar.
- Dizeler için sıralı yoksayma-büyük/küçük harf karşılaştırması
- Örnek:
lt(2, 5)
(True döndürür)
ne
- Parametrelerin
True
eşit olup olmadığını değerlendirir - En düşük parametreler: 2. En fazla parametre: 2
- Sağ parametreyi sol parametrenin türüyle eşleşecek şekilde dönüştürür. Dönüştürme başarısız olursa döndürür
True
. - Dizeler için sıralı yoksayma-büyük/küçük harf karşılaştırması
- Örnek:
ne(1, 2)
(Doğru döndürür)
değil
-
True
parametreFalse
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 maçtan 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. Maksimum parametre: N
- Parametreleri değerlendirmek için Boole'a dönüştürür
- İlk devreden sonra kısa devreler
True
- Ö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: 3
-
replace(a, b, c)
: tüm b örneklerinin c ile değiştirilerek a döndürür - Örnek:
replace('https://www.tinfoilsecurity.com/saml/consume','https://www.tinfoilsecurity.com','http://server')
(döndürü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: 2
- İlk parametre bölünecek dizedir
- İkinci parametre sınırlandırma karakterleridir
- Bir alt dize dizisi döndürür. Sınırlayıcı karakterler 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: 2
- Parametreleri değerlendirme için Dizeye gönderir
- Büyük/küçük harf dikkate almadan sıralı karşılaştırma yapar
- Örnek:
startsWith('ABCDE', 'AB')
("True" 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. Parametre sayısı en fazla 1
- Dizenin büyük harf eşdeğerini verir
- Örnek:
upper('bah')
döndürürBAH
xor
-
True
Tam olarak bir parametre olup olmadığını değerlendirirTrue
- En düşük parametreler: 2. En fazla parametre: 2
- Parametreleri değerlendirme için Boole'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 koşullarda ifade olarak kullanabilirsiniz, ancak değişken tanımlarında kullanamazsınız.
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ş
-
True
İşlem hattının iptal edilip iptal edilmediğini değerlendirir.
başarısız
- Bir adım için, ile eşdeğerdir
eq(variables['Agent.JobStatus'], 'Failed')
. - bir iş için:
- Bağımsız değişken olmadan, yalnızca bağımlılık grafiğindeki önceki bir iş başarısız olursa olarak değerlendirilir
True
. - bağımsız değişken olarak iş adları ile, yalnızca bu işlerden herhangi biri başarısız olursa olarak değerlendirilir
True
.
- Bağımsız değişken olmadan, yalnızca bağımlılık grafiğindeki önceki bir iş başarısız olursa olarak değerlendirilir
Başarılı
- Bir adım için,
in(variables['Agent.JobStatus'], 'Succeeded', 'SucceededWithIssues')
- Önceki bir işin başarılı olup olmadığını değerlendirmek istediğinizde ve işlerle çalışırken
dependsOn
ile kullanın. İşler paralel çalışacak şekilde tasarlanmıştır ve aşamalar sırayla çalışır. - bir iş için:
- Bağımsız değişken olmadan, yalnızca bağımlılık grafiğindeki önceki tüm işler başarılı ya da kısmen başarılı olursa
True
olarak değerlendirilir. - 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ğımsız değişken olmadan, yalnızca bağımlılık grafiğindeki önceki tüm işler başarılı ya da kısmen başarılı olursa
başarılı veya başarısız
Bir adım için,
in(variables['Agent.JobStatus'], 'Succeeded', 'SucceededWithIssues', 'Failed')
eşdeğerBir iş için:
- Bağımsız değişken olmadan, bağımlılık grafiğindeki herhangi bir işin başarılı veya başarısız olup olmadığına bakılmaksızın değerini değerlendirir
True
. - İş adı argümanlarıyla
True
, bu işlerden herhangi birinin başarılı mı yoksa başarısız mı olduğunu değerlendirir. - Bunun yerine, bağımlılık grafiğinde daha önce atlanan işler olduğunda
not(canceled())
kullanmak isteyebilirsiniz.
Bu,
always()
gibi bir işlemdir, ancak işlem hattı iptal edildiğindeFalse
değerlendirilecektir.- Bağımsız değişken olmadan, bağımlılık grafiğindeki herhangi bir işin başarılı veya başarısız olup olmadığına bakılmaksızın değerini değerlendirir
Koşullu ekleme
Değişken değerleri koşullu olarak atamak veya görevler için girişler ayarlamak için , if
ve elseif
yan tümcelerini kullanabilirsinizelse
. Bir koşul karşılandığında bir adımı koşullu olarak da çalıştırabilirsiniz.
Değişken değerlerini koşullu olarak atamak veya görevler için girişler ayarlamak için kullanabilirsiniz if
. Bir koşul karşılandığında, bir adımı koşullu şekilde de çalıştırabilirsiniz.
elseif
ve else
yan tümceleri Azure DevOps 2022'den itibaren kullanılabilir ve Azure DevOps Server 2020 ve Önceki Azure DevOps sürümlerinde kullanılamaz.
Koşullular yalnızca şablon söz dizimi kullanılırken çalışır. Değişken söz dizimi hakkında daha fazla bilgi edinin.
Şablonlar için, bir dizi veya eşleme eklerken koşullu ekleme kullanabilirsiniz. Şablonlara koşullu ekleme hakkında daha fazla bilgi edinin.
Bir değişkeni koşullu olarak atama
variables:
${{ if eq(variables['Build.SourceBranchName'], 'main') }}: # only works if you have a main branch
stageName: prod
pool:
vmImage: 'ubuntu-latest'
steps:
- script: echo ${{variables.stageName}}
Görev girişini koşullu olarak ayarlama
pool:
vmImage: 'ubuntu-latest'
steps:
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Pipeline.Workspace)'
${{ if eq(variables['Build.SourceBranchName'], 'main') }}:
artifact: 'prod'
${{ else }}:
artifact: 'dev'
publishLocation: 'pipeline'
Bir 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. Burada, foo
değeri elseif
koşulunda true değerini döndürür.
variables:
- name: foo
value: contoso # triggers elseif condition
pool:
vmImage: 'ubuntu-latest'
steps:
- script: echo "start"
- ${{ if eq(variables.foo, 'adaptum') }}:
- script: echo "this is adaptum"
- ${{ elseif eq(variables.foo, 'contoso') }}: # true
- script: echo "this is contoso"
- ${{ else }}:
- script: echo "the value is not adaptum or contoso"
Her anahtar sözcük
Anahtar sözcüğünü each
kullanarak nesne türüyle parametreler arasında döngü yapabilirsiniz.
parameters:
- name: listOfStrings
type: object
default:
- one
- two
steps:
- ${{ each value in parameters.listOfStrings }}:
- script: echo ${{ value }}
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 işin iş durumuna başvurma
- Ö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şamadan aşamaya 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 (dağıtım 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 stratejisine bağlı olarak dağıtım işlerinde çıkış değişkenleri için farklı söz dizimleri de vardır. 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 edilirse şö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şula false
sahiptir ve sonuç olarak hiçbir zaman ç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 da vardır. Aşama A, çıkış değişkenlerini shouldrun
olarak true
ayarlayan A1 adlı bir iş içerir. Aşama B, shouldrun
true
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şamada işler arası 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. İş A, condition: false
nedeniyle her zaman atlanacaktır.
B işi, ilişkili koşul 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 runTests
true
olarak ayarlandıysa. Sözlük için kullanılan anahtarın outputs
olduğuna build_job.setRunTests.runTests
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'
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
için dağıtım build_job
ayarına shouldTest
true
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 adlı bir ortam sanal makine kaynağına vmtest
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 koleksiyonu üzerinde işlem yaparken, filtrelenmiş bir dizi uygulamak için *
söz dizimini kullanabilirsiniz. Filtrelenmiş bir dizi, adlarından bağımsız olarak tüm nesneleri/öğeleri döndürür.
Örneğin, adlı foo
bir nesne dizisi düşünün. Dizimizdeki her nesnedeki özelliğin değerlerinin bir dizisini id
almak istiyoruz.
[
{ "id": 1, "a": "avalue1"},
{ "id": 2, "a": "avalue2"},
{ "id": 3, "a": "avalue3"}
]
Aşağıdakileri yapabiliriz:
foo.*.id
Bu, sisteme foo
ile filtrelenmiş bir dizi olarak çalışmasını ve ardından id
özelliğini seçmesini söyler.
Bu, şu sonucu 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 ifade değerlendirildiğinde, parametreler ilgili veri türüyle birleştirilir ve sonra dizelere geri döner.
Örneğin, bu YAML'de True
ve False
değerleri, ifade değerlendirildiğinde 1
ve 0
olarak 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 0
true
1
öğ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ş dizeye eşit olmayan ilk değeri döndürür.
variables:
coalesceLiteral: $[coalesce(variables.emptyString, '', 'literal value')]
steps:
- script: echo $(coalesceLiteral) # outputs literal value
Ayrıntılı dönüştürme kuralları aşağıda daha ayrıntılı olarak listelenmiştir.
Kimden / Son | Boolean | Boş | Sayı | Dize | Sürüm |
---|---|---|---|---|---|
Boolean | - | - | Yes | Yes | - |
Sıfır | Yes | - | Yes | Yes | - |
Numara | Yes | - | - | Yes | Kısmi |
Dize | Yes | Kısmi | Kısmi | - | Kısmi |
Sürüm | Yes | - | - | Yes | - |
Boolean
Numaralandır:
-
False
→0
-
True
→1
String’e Çevir
-
False
→'False'
-
True
→'True'
Boş
- To Boolean:
False
- Numaralandır:
0
- Dizeye:
''
(boş dizgi)
Sayı
- Boole'ya:
0
→False
, başka bir sayı →True
- Sürüm: Sıfırdan büyük olmalı ve sıfır olmayan bir ondalık içermelidir. Int32.MaxValue değerinden küçük olmalıdır (ondalık 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.
String
- 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#'ı InvariantCulture ve aşağıdaki kuralları kullanarakInt32.TryParse
çalıştırır: AllowDecimalPoint | AllowLeadingSign | AllowLeadingWhite | AllowThousands | AllowTrailingWhite. EğerTryParse
başarısız olursa dönüştürülemez. - Sürüme: C# öğesini
Version.TryParse
çalıştırır. En az Ana ve Yan bileşenleri içermelidir. BaşarısızTryParse
olursa dönüştürülemez.
Sürüm
- Boolean'a Dönüştür:
True
- Dizeye: Major.Minor veya Major.Minor.Build veya Major.Minor.Build.Revision.
SSS
İfadeler tarafından desteklenmeyen bir şey yapmak istiyorum. İşlem Hatları işlevselliğini genişletmek için hangi seçeneklerim var?
İşlem Hattınızı bir ifade içeren betikle özelleştirebilirsiniz. Örneğin, bu kod parçacığı değişkeni alır BUILD_BUILDNUMBER
ve Bash ile 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.
ardından iki değişken, $major
$minor
task.setvariable ile iki işlem hattı değişkeni oluşturmak için kullanılır. Bu değişkenler aşağı akış adımlarında kullanılabilir. İşlem hatları arasında değişkenleri paylaşmak için bkz . Değişken grupları.
steps:
- bash: |
MAJOR_RUN=$(echo $BUILD_BUILDNUMBER | cut -d '.' -f1)
echo "This is the major run number: $MAJOR_RUN"
echo "##vso[task.setvariable variable=major]$MAJOR_RUN"
MINOR_RUN=$(echo $BUILD_BUILDNUMBER | cut -d '.' -f2)
echo "This is the minor run number: $MINOR_RUN"
echo "##vso[task.setvariable variable=minor]$MINOR_RUN"
- bash: echo "My pipeline variable for major run is $(major)"
- bash: echo "My pipeline variable for minor run is $(minor)"