İfadeler
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ı belirleme koşullarıdır .
# Expressions are used to define conditions for a step, job, or stage
steps:
- task: ...
condition: <expression>
İfadelerin bir diğer yaygın kullanımı da değişkenleri tanımlamaktır.
İfadeler derleme zamanında veya çalışma zamanında değerlendirilebilir.
Derleme zamanı ifadeleri her yerde kullanılabilir; çalışma zamanı ifadeleri değişkenlerde ve koşullarda kullanılabilir. Çalışma zamanı ifadeleri, değişkenlerin ve durumun içeriğini hesaplamanın bir yolu olarak tasarlanmıştır (örnek: condition
).
# Two examples of expressions used to define variables
# The first one, a, is evaluated when the YAML file is compiled into a plan.
# The second one, b, is evaluated at runtime.
# Note the syntax ${{}} for compile time and $[] for runtime expressions.
variables:
a: ${{ <expression> }}
b: $[ <expression> ]
Çalışma zamanı ve derleme zamanı ifade söz dizimleri arasındaki fark öncelikle hangi bağlamın kullanılabilir olduğudur.
Derleme zamanı ifadesinde ()${{ <expression> }}
öğesine parameters
erişiminiz vardır ve statik olarak tanımlanmıştır variables
.
Bir çalışma zamanı ifadesinde ()$[ <expression> ]
daha fazla variables
parametreye erişiminiz var ancak parametre 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 değişmez değer, değişken başvurusu, bağımlılık başvurusu, işlev veya bunların geçerli bir iç içe birleşimi olabilir.
Değişmez Değerler
bir ifadenin parçası olarak boole, null, sayı, dize veya sürüm değişmez değerlerini kullanabilirsiniz.
# Examples
variables:
someBoolean: ${{ true }} # case insensitive, so True or TRUE also works
someNumber: ${{ -1.2 }}
someString: ${{ 'a b c' }}
someVersion: ${{ 1.2.3 }}
Boolean
True
ve False
boole değişmez değer ifadeleridir.
Boş
Null, örneğin (variables['noSuch']
) sözlükten döndürülen özel bir değişmez değer ifadesidir. Null, bir ifadenin çıkışı olabilir ancak doğrudan bir ifade içinde çağrılamıyor.
Sayı
'-', '.' veya '0' ile '9' arasında 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
Dört segmente kadar olan bir sürüm numarası.
Bir sayı ile başlamalıdır ve iki veya üç nokta (.
) karakter içermelidir.
Örneğin: 1.2.3.4
.
Değişkenler
bir ifadenin parçası olarak, iki söz dizimlerinden birini kullanarak değişkenlere erişebilirsiniz:
- Dizin söz dizimi:
variables['MyVar']
- Özellik başvuru kaldırma söz dizimi:
variables.MyVar
Özellik başvuru kaldırma söz dizimini kullanmak için özellik adı şunları yapmalıdır:
- veya ile
a-Z
başlayın_
- Veya tarafından
a-Z
0-9
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 değişkeninin a
değeri $[ <expression> ]
için bir parçası olarak kullanılan değişkenimiz b
var. Değişkenleri işleme sırası, değişkenin b
değerlendirmeden sonra yanlış bir değişken a
değerine sahip olabileceği garantili olmadığından.
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.
ile
- Tüm parametrelerin
True
True
- En düşük parametreler: 2. En fazla parametre: N
- Parametreleri değerlendirme için Boole'a yayınlar
- İ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. En fazla parametre: N
- Örnek:
coalesce(variables.couldBeNull, variables.couldAlsoBeNull, 'literal so it always works')
içerir
- Sol parametre Dizesinde
True
doğru parametre olup olmadığını değerlendirir - En düşük parametreler: 2. En fazla parametre: 2
- Parametreleri değerlendirme için Dizeye gönderir
- Sıralı yoksayma-büyük/küçük harf karşılaştırması gerçekleştirir
- Örnek:
contains('ABCDE', 'BCD')
(True döndürür)
containsValue
True
Sol parametrenin bir dizi olup olmadığını ve herhangi bir öğenin doğru parametreye eşit olup olmadığını değerlendirir. Ayrıca sol parametrenin bir nesne olup olmadığını ve herhangi bir özelliğin değerinin doğru parametreye eşit olup olmadığını değ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 sıralı yoksayma-büyük/küçük harf karşılaştırması
- İlk maçtan sonra kısa devreler
Not
YAML işlem hattında dizi belirtmek için değişmez söz dizimi yoktur. Bu işlev genel işlem hatlarında sınırlı kullanımdadır. Adım listesi gibi sistem tarafından sağlanan dizilerle işlem hattı dekoratörü bağlamında kullanıma yöneliktir.
bir nesnede eşleşen bir değer bulmak için ifadeyi containsValue
kullanabilirsiniz. Burada, için eşleşme için kaynak dallar listesine bakmayı gösteren bir örnek verilmiştir Build.SourceBranch
.
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 nesne alın ve JSON olarak çıkışını alır.
- 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) }}
Betik çıkışı:
{
"this_is": {
"a_complex": "object",
"with": [
"one",
"two"
]
}
}
counter
- Bu işlev yalnızca değişken tanımlayan bir ifadede kullanılabilir. Adım, iş veya aşama koşulunun parçası olarak kullanılamaz.
- bir işlem hattının her çalıştırmasıyla artırılan bir sayıyı değerlendirir.
- Parametreler: 2.
prefix
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ırmalar sayacı 101, 102, 103, ...
Daha sonra YAML dosyasını düzenler ve değerini major
1 olarak ayarlarsanız, sayacın değeri bu ön ek için kaldığı yerden devam eder. Bu örnekte 102'de devam eder.
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)
Burada, PR'ler ve CI çalıştırmaları için ayrı bir değer tutan bir sayaç olması örneği verilmiştir.
variables:
patch: $[counter(variables['build.reason'], 0)]
Sayaçların kapsamı bir işlem hattı olarak belirlenmiştir. Başka bir deyişle, bu işlem hattının her çalıştırması için değeri artırılır. Proje kapsamlı sayaç yok.
endsWith
- Sol parametre Dizesinin
True
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
- Sıralı yoksayma-büyük/küçük harf karşılaştırması gerçekleştirir
- Örnek:
endsWith('ABCDE', 'DE')
(True döndürür)
eşittir
- Parametrelerin
True
eşit olup olmadığını değerlendirir - En düşük parametreler: 2. En fazla parametre: 2
- Sağ parametreyi sol parametrenin türüyle eşleşecek şekilde dönüştürür. Dönüştürme başarısız olursa döndürür
False
. - Dizeler için sıralı yoksayma-büyük/küçük harf karşılaştırması
- Örnek:
eq(variables.letters, 'ABC')
format
- Sondaki parametreleri değerlendirir ve bunları baştaki parametre dizesine ekler
- En düşük parametreler: 1. En fazla parametre: N
- Örnek:
format('Hello {0} {1}', 'John', 'Doe')
- Tarih biçimlendirmesi (, ,
yy
,MM
, ,dd
M
,HH
mm
H
d
m
,ss
,s
,f
ff
)K
ffff
için .NET özel tarih ve saat biçimi tanımlayıcılarını kullanıryyyy
- Ö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çış. Ö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 olursa hatalar.
- Dizeler için sıralı yoksayma-büyük/küçük harf karşılaştırması
- Örnek:
ge(5, 5)
(True döndürür)
gt
True
Sol parametrenin doğru parametreden büyük olup olmadığını değerlendirir- En düşük parametreler: 2. En fazla parametre: 2
- Sağ parametreyi sol parametrenin türüyle eşleşecek şekilde dönüştürür. Dönüştürme başarısız olursa hatalar.
- Dizeler için sıralı yoksayma-büyük/küçük harf karşılaştırması
- Örnek:
gt(5, 2)
(True döndürür)
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ı yoksayma-büyük/küçük harf karşılaştırması
- İlk maçtan sonra kısa devreler
- Örnek:
in('B', 'A', 'B', 'C')
(True döndürür)
join
- Sağ parametre dizisindeki tüm öğeleri sol parametre dizesiyle ayırarak birleştirir.
- En düşük parametreler: 2. En fazla parametre: 2
- Dizideki her öğe bir dizeye dönüştürülür. Karmaşık nesneler boş dizeye dönüştürülür.
- Doğru parametre bir dizi değilse, sonuç 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 hatalar.
- Dizeler için sıralı yoksayma-büyük/küçük harf karşılaştırması
- Örnek:
le(2, 2)
(True döndürür)
uzunluk
- Sistemden gelen veya bir parametreden gelen bir dizenin veya dizinin uzunluğunu verir
- En düşük parametreler: 1. En fazla parametre 1
- Örnek:
length('fabrikam')
8 döndürür
indirmek
- 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 1
- Dizenin küçük harf eşdeğerini verir
- Örnek:
lower('FOO')
döndürürfoo
lt
True
Sol parametrenin doğru parametreden küçük olup olmadığını değerlendirir- En düşük parametreler: 2. En fazla parametre: 2
- Sağ parametreyi sol parametrenin türüyle eşleşecek şekilde dönüştürür. Dönüştürme başarısız olursa hatalar.
- Dizeler için sıralı yoksayma-büyük/küçük harf karşılaştırması
- Örnek:
lt(2, 5)
(True döndürür)
ne
- Parametrelerin
True
eşit olup olmadığını değerlendirir - En düşük parametreler: 2. En fazla parametre: 2
- Sağ parametreyi sol parametrenin türüyle eşleşecek şekilde dönüştürür. Dönüştürme başarısız olursa döndürür
True
. - Dizeler için sıralı yoksayma-büyük/küçük harf karşılaştırması
- Örnek:
ne(1, 2)
(True döndürür)
not
True
ParametreninFalse
- En düşük parametreler: 1. En fazla parametre: 1
- Değerlendirme için değeri Boole değerine dönüştürür
- Örnek:
not(eq(1, 2))
(True döndürür)
notIn
- 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ı yoksayma-büyük/küçük harf karşılaştırması
- İlk maçtan sonra kısa devreler
- Örnek:
notIn('D', 'A', 'B', 'C')
(True döndürür)
veya
True
Herhangi bir parametrenin olup olmadığını değerlendirirTrue
- En düşük parametreler: 2. En fazla parametre: N
- Parametreleri değerlendirme için Boole'a yayınlar
- İlk devreden sonra kısa devreler
True
- Örnek:
or(eq(1, 1), eq(2, 3))
(True, short-circuits döndürür)
replace
- 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
)
split
- Belirtilen sınırlandırma karakterlerine göre bir dizeyi alt dizelere böler
- En düşük parametreler: 2. En fazla parametre: 2
- İlk parametre bölünecek dizedir
- İkinci parametre sınırlandırma karakterleridir
- Bir alt dize dizisi döndürür. Sını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 }}
startsWith
- 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
- Sıralı yoksayma-büyük/küçük harf karşılaştırması gerçekleştirir
- Örnek:
startsWith('ABCDE', 'AB')
(True döndürür)
Üst
- Bir 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 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 yayınlar
- Örnek:
xor(True, False)
(True döndürür)
İş durumu denetimi işlevleri
Aşağıdaki durum denetimi işlevlerini koşullarda ifade olarak kullanabilirsiniz, ancak değişken tanımlarında kullanamazsınız.
her zaman
- Her zaman olarak değerlendirilir
True
(iptal edildiğinde bile). Not: Kritik bir hata, bir görevin çalışmasını yine de engelleyebilir. Örneğin, kaynakları alma başarısız olursa.
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')
- İşlerle çalışırken ile
dependsOn
kullanın ve önceki bir işin başarılı olup olmadığını değerlendirmek istiyorsunuz. İşler, aşamalar sırayla çalışırken paralel çalışacak şekilde tasarlanmıştır. - bir iş için:
- Bağımsız değişken olmadan, yalnızca bağımlılık grafiğindeki önceki tüm işler başarılı veya kısmen başarılı olursa olarak değerlendirilir
True
. - bağımsız değişken olarak iş adları ile, bu işlerin tümünün başarılı mı yoksa kısmen başarılı mı olduğunu değerlendirir
True
. False
İşlem hattının iptal edilip iptal edilmediğini değerlendirir.
- Bağımsız değişken olmadan, 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
succeededOrFailed
Bir adım için,
in(variables['Agent.JobStatus'], 'Succeeded', 'SucceededWithIssues', 'Failed')
bir iş için:
- Bağımsız değişken olmadan, bağımlılık grafiğindeki herhangi bir işin başarılı veya başarısız olup olmadığına bakılmaksızın değerini değerlendirir
True
. - bağımsız değişken olarak iş adları ile, bu işlerden herhangi birinin başarılı mı yoksa başarısız mı olduğunu değerlendirir
True
. - Bunun yerine, bağımlılık grafiğinde daha önce atlanan işler olduğunda kullanmak
not(canceled())
isteyebilirsiniz.
İşlem hattı iptal edildiğinde değerlendirilecek
False
olması dışında bu, gibialways()
bir işlemdir.- 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 , elseif
ve else
yan tümcelerini kullanabilirsinizif
. Bir koşul karşılandığında bir adımı koşullu olarak da çalıştırabilirsiniz.
Değişken değerlerini koşullu olarak atamak veya görevler için girişler ayarlamak için kullanabilirsiniz if
. Bir koşul karşılandığında bir adımı koşullu olarak da çalıştırabilirsiniz.
elseif
ve else
yan tümceleri Azure DevOps 2022'den itibaren kullanılabilir ve Azure DevOps 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 adımı koşullu olarak çalıştırma
Değişken kümesi yoksa veya değeri foo
koşullarla if
eşleşmiyorsa deyimi else
çalıştırılır. Burada değeri foo
koşulda elseif
true değerini döndürür.
variables:
- name: foo
value: contoso # triggers elseif condition
pool:
vmImage: 'ubuntu-latest'
steps:
- script: echo "start"
- ${{ if eq(variables.foo, 'adaptum') }}:
- script: echo "this is adaptum"
- ${{ elseif eq(variables.foo, 'contoso') }}: # true
- script: echo "this is contoso"
- ${{ else }}:
- script: echo "the value is not adaptum or contoso"
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 aşama durumuna başvurma
- Aynı aşamadaki önceki işteki çıkış değişkenlerine başvurma
- Bir aşamada önceki aşamadaki çıkış değişkenlerine başvurma
- Aşağıdaki aşamada önceki bir aşamadaki bir işteki çıkış değişkenlerine başvuruda bulunur
Bağlam işler ve aşamalar için çağrılır dependencies
ve değişkenlere çok benzer şekilde çalışır.
Başka bir aşamadaki bir işten bir çıkış değişkenine başvurursanız, bağlam olarak adlandırılır stageDependencies
.
Çıkış değişkenlerinde tırnak karakterleri ('
veya "
) 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)
içindeki bir koşuldaki farklı bir aşamadaki bir işin önceki aşamasından bir çıkış değişkenine stages
başvurma.
- 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)
içinde aynı aşamadaki farklı bir işteki bir çıkış değişkenine stages
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'))
Bağımlılığı hazırlama işi (farklı aşamalar)
içindeki farklı bir aşamadaki bir job
çıkış değişkenine başvurma.
- 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)
içinde farklı bir aşamadaki bir dağıtım işinde çıkış değişkenine başvuruda bulunur 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')
Bağımlılığı aşamaya hazırlama (kaynakla dağıtım işi)
içinde farklı aşamadaki bir kaynağı içeren bir dağıtım işinde çı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.
Bağımlılıkları aşamaya hazırlama
Yapısal olarak, dependencies
nesnesi ve için iş ve aşama adlarının results
outputs
bir haritasıdır.
JSON olarak ifade edilirse şöyle görünür:
"dependencies": {
"<STAGE_NAME>" : {
"result": "Succeeded|SucceededWithIssues|Skipped|Failed|Canceled",
"outputs": {
"jobName.stepName.variableName": "value"
}
},
"...": {
// another stage
}
}
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 , SucceededWithIssues
veya Skipped
ise Succeeded
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, olduğunda shouldrun
true
çalışır. Çünkü shouldrun
, true
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ş bağımlılıklarına iş
Tek bir aşamadaki iş düzeyinde veriler aşama dependencies
düzeyinde bilgi içermez.
"dependencies": {
"<JOB_NAME>": {
"result": "Succeeded|SucceededWithIssues|Skipped|Failed|Canceled",
"outputs": {
"stepName.variableName": "value1"
}
},
"...": {
// another job
}
}
Bu örnekte üç iş (a, b ve c) vardır. a işi, nedeniyle condition: false
her zaman atlanır.
B işi, ilişkili koşul olmadığından çalışır.
C işi çalışır çünkü tüm bağımlılıkları başarılı olur (b işi) veya atlanır (iş a).
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 da başvurabilirsiniz.
Bunun için bağlamın stageDependencies
kullanılması gerekir.
"stageDependencies": {
"<STAGE_NAME>" : {
"<JOB_NAME>": {
"result": "Succeeded|SucceededWithIssues|Skipped|Failed|Canceled",
"outputs": {
"stepName.variableName": "value"
}
},
"...": {
// another job
}
},
"...": {
// another stage
}
}
Bu örnekte, A1 işi atlanırsa B1 işi çalışır. B2 işi, çalıştırılıp çalıştırılmayacağını belirlemek için A1 işinden çıkış değişkeninin değerini denetler.
stages:
- stage: A
jobs:
- job: A1
steps:
- bash: echo "##vso[task.setvariable variable=shouldrun;isOutput=true]true"
# or on Windows:
# - script: echo ##vso[task.setvariable variable=shouldrun;isOutput=true]true
name: printvar
- stage: B
dependsOn: A
jobs:
- job: B1
condition: in(stageDependencies.A.A1.result, 'Skipped') # change condition to `Succeeded and stage will be skipped`
steps:
- script: echo hello from Job B1
- job: B2
condition: eq(stageDependencies.A.A1.outputs['printvar.shouldrun'], 'true')
steps:
- script: echo hello from Job B2
bir iş, farklı bir aşamadaki bir dağıtım işi tarafından tanımlanan bir değişkene bağımlıysa söz dizimi farklıdır. Aşağıdaki örnekte, dağıtım işi run_tests
olarak ayarlandıysa build_job
runTests
true
iş çalışır. 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 çıkış 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. Aşamanın build_job
içinde condition
iki kez göründüğüne test
dikkat edin.
stages:
- stage: build
jobs:
- deployment: build_job
environment:
name: Production
strategy:
runOnce:
deploy:
steps:
- task: PowerShell@2
name: setRunTests
inputs:
targetType: inline
pwsh: true
script: |
$runTests = "true"
echo "setting runTests: $runTests"
echo "##vso[task.setvariable variable=runTests;isOutput=true]$runTests"
- stage: test
dependsOn:
- 'build'
condition: eq(dependencies.build.outputs['build_job.build_job.setRunTests.runTests'], 'true')
jobs:
- job: A
steps:
- script: echo Hello from job A
Yukarıdaki örnekte koşul, ortam kaynağına değil bir ortama başvurur. 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 çalışırken, 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 filtrelenmiş bir dizi olarak çalışmasını foo
ve ardından özelliğini seçmesini id
söyler.
Bu, şunu döndürür:
[ 1, 2, 3 ]
Tür atama
İfadedeki değerler, ifade değerlendirildikçe bir türden diğerine dönüştürülebilir. bir ifade değerlendirildiğinde, parametreler ilgili veri türüyle birleştirilir ve sonra dizelere geri döner.
Örneğin, bu YAML'de ve değerleri ve ifadesi değerlendirildiğinde olarak dönüştürülür 0
1
.True
False
lt()
İşlev, sol parametre sağ parametreden küçük olduğunda döndürürTrue
.
variables:
firstEval: $[lt(False, True)] # 0 vs. 1, True
secondEval: $[lt(True, False)] # 1 vs. 0, False
steps:
- script: echo $(firstEval)
- script: echo $(secondEval)
Bu örnekte, hem değerler variables.emptyString
hem de boş dize boş dizeler olarak değerlendirilir.
İş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ı | String | Sürüm |
---|---|---|---|---|---|
Boolean | - | - | Yes | Yes | - |
Sıfır | Yes | - | Evet | Yes | - |
Numara | Yes | - | - | Yes | Kısmi |
Dize | Yes | Kısmi | Kısmi | - | Kısmi |
Sürüm | Yes | - | - | Yes | - |
Boolean
Numaraya:
False
→0
True
→1
Dizeye:
False
→'False'
True
→'True'
Boş
- Boole'a:
False
- Numaraya:
0
- Dizeye:
''
(boş dize)
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 bileşen de).
- Dizeye: Sayıyı binlik ayırıcısı olmayan ve ondalık ayırıcısı olmayan bir dizeye dönüştürür.
String
- To Boole:
''
(boş dize) →False
, diğer tüm dizeler →True
- To null:
''
(boş dize) →Null
, dönüştürülemez başka bir dize - Numaralandırmak için:
''
(boş dize) 0 →, aksi takdirde, C#'Int32.TryParse
leri InvariantCulture ve şu kuralları kullanarak çalıştırır: AllowDecimalPoint | AllowLeadingSign | AllowLeadingWhite | AllowThousands | AllowTrailingWhite. BaşarısızTryParse
olursa dönüştürülemez. - Sürüme: C# öğesini
Version.TryParse
çalıştırır. En az Birincil ve İkincil bileşen içermelidir. BaşarısızTryParse
olursa dönüştürülemez.
Sürüm
- Boole'a:
True
- Dizeye: Major.Minor veya Major.Minor.Build veya Major.Minor.Build.Revision.
SSS
İfadeler tarafından desteklenmeyen bir şey yapmak istiyorum. İşlem Hatları işlevselliğini genişletmek için hangi seçeneklerim var?
İşlem Hattınızı ifade içeren bir betikle özelleştirebilirsiniz. Örneğin, bu kod parçacığı değişkeni alır BUILD_BUILDNUMBER
ve Bash ile böler. Bu betik, $MAJOR_RUN
birincil ve $MINOR_RUN
ikincil çalıştırma numaraları için ve adlı iki yeni değişkenin çıkışını 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)"