İfadeler
Azure Pipelines | TFS 2018 | TFS 2017,3
Not
Microsoft Team Foundation Server (TFS) 2018 ve önceki sürümlerde, derleme ve yayın işlem hatlarıtanımlarolarak adlandırılır, çalışmalaraderlemelerdenir, hizmet bağlantılarınahizmet uç noktalarıdenir, aşamalarortamlarolarak adlandırılır ve işleraşamalarolarak adlandırılır.
İfadeler, bir işlem hattı yazarken dize, Boole veya sayı değeri belirtmeniz gereken birçok yerde kullanılabilir. İfadelerin en yaygın kullanımı, bir işin veya adımın çalıştırılıp çalıştırılmayacağını belirlemede koşullardır .
# Expressions are used to define conditions for a step, job, or stage
steps:
- task: ...
condition: <expression>
İfadelerin başka bir yaygın kullanımı, değişkenlerin tanımlanmasıyla sonuçlanır.
İfadeler, derleme zamanında veya çalışmazamanında değerlendirilebilir.
Derleme zamanı ifadeleri her yerde kullanılabilir; çalışma zamanı ifadeleri, değişkenlerde ve koşullarda kullanılabilir. Çalışma zamanı ifadeleri, değişkenlerin ve durumun içeriğini hesaplamak için bir yol olarak tasarlanmıştır (örnek: condition ).
# Two examples of expressions used to define variables
# The first one, a, is evaluated when the YAML file is compiled into a plan.
# The second one, b, is evaluated at runtime.
# Note the syntax ${{}} for compile time and $[] for runtime expressions.
variables:
a: ${{ <expression> }}
b: $[ <expression> ]
Çalışma zamanı ve derleme zaman ifadesi sözdizimleri arasındaki fark, birincil olarak hangi bağlamın kullanılabildiği.
Bir derleme zamanı ifadesinde ( ${{ <expression> }} ), erişimi parameters ve statik olarak tanımlamış olursunuz variables .
Çalışma zamanı ifadesinde ( $[ <expression> ] ), daha fazla parametreye erişiminiz vardır variables .
Bu örnekte, bir çalışma zamanı ifadesi değerini ayarlar $(isMain) . Bir derleme ifadesindeki statik değişken değerini ayarlar $(compileVar) .
variables:
staticVar: 'my value' # static variable
compileVar: ${{ variables.staticVar }} # compile time expression
isMain: $[eq(variables['Build.SourceBranch'], 'refs/heads/main')] # runtime expression
steps:
- script: |
echo ${{variables.staticVar}} # outputs my value
echo $(compileVar) # outputs my value
echo $(isMain) # outputs True
Bir ifade, bir sabit değer, bir değişkene başvuru, bir bağımlılık, bir işlev veya bunların geçerli bir iç içe birleşimini içerebilir.
Değişmez Değerler
Bir ifadenin parçası olarak, Boolean, null, sayı, dize veya sürüm değişmezlerini kullanabilirsiniz.
# Examples
variables:
someBoolean: ${{ true }} # case insensitive, so True or TRUE also works
someNumber: ${{ -1.2 }}
someString: ${{ 'a b c' }}
someVersion: ${{ 1.2.3 }}
Boole
True ve False Boolean değişmez değer ifadeleridir.
Null
Null, sözlük isabetsizlik sınıfından döndürülen özel bir sabit değer ifadesidir, örn. ( variables['noSuch'] ). Null, bir ifadenin çıktısı olabilir, ancak doğrudan bir ifade içinde çağrılamaz.
Sayı
'-', '. ' Veya ' 0 ' ile ' 9 ' arasında başlar.
Dize
Tek tırnak işareti olmalıdır. Örneğin: 'this is a string'.
Sabit bir tek tırnak işareti ifade etmek için, tek bir teklifle kaçış.
Örneğin: 'It''s OK if they''re using contractions.'.
Çok satırlı dizeler için bir dikey çizgi karakteri ( | ) kullanabilirsiniz.
myKey: |
one
two
three
Sürüm
En fazla dört parçaya sahip bir sürüm numarası.
Bir sayıyla başlamalı ve iki ya da üç nokta ( . ) karakteri içermelidir.
Örneğin: 1.2.3.4.
Değişkenler
Bir ifadenin parçası olarak, iki sözdizimlerinden birini kullanarak değişkenlere erişebilirsiniz:
- Dizin sözdizimi:
variables['MyVar'] - Özellik başvurusu sözdizimi:
variables.MyVar
Özellik başvuru söz dizimini kullanmak için, özellik adı şu şekilde olmalıdır:
- Veya ile başlayın
a-Z_ - Arkasından
a-Z0-9veya_
Yürütme bağlamına 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.
- Klasik düzenleyiciyi kullanarak derleme işlem hatları oluşturursanız, derleme değişkenleri kullanılabilir.
- Klasik düzenleyiciyi kullanarak yayın işlem hatları oluşturursanız, serbest bırakma değişkenleri kullanılabilir.
Değişkenler her zaman dizelerdir. Yazılan değerleri kullanmak istiyorsanız, bunun yerine parametreleri kullanmanız gerekir.
Not
Değişkenler sekmesi Kullanıcı arabirimi aracılığıyla bu tür değişkenleri ayarlarken hem klasik hem de YAML işlem hatları için ifadelerle değişkenleri kullanma sınırlaması vardır. İfade olarak tanımlanan değişkenler, her iki ifadenin de düzgün şekilde değerlendirileceğini garanti edilmediği için, değer olarak ifade eden başka bir değişkene bağlı olmamalıdır. Örneğin a$[ <expression> ] , değeri değişkenin değeri için bir bölüm olarak kullanılan bir değişkendir b . İşleme değişkenlerinin sırası garantili değişken olmadığından b değerlendirilmeden sonra yanlış bir değişken değeri olabilir a .
Açıklanan kurulumlarını yalnızca, YAML işlem hattındaki değişken anahtar sözcüğü aracılığıyla değişkenleri ayarlarken izin verilir. Değişkenleri, işlemeden sonra doğru değerleri almak için işlenmeleri gereken sırada yerleştirmeniz gerekir.
İşlevler
Aşağıdaki yerleşik işlevler ifadelerde kullanılabilir.
ve
TrueTüm parametrelerin şu şekilde olduğunu değerlendirirTrue- Min parametreleri: 2. En fazla Parametreler: N
- Değerlendirme için parametreleri Boole değerine yayınlar
- İlkden sonra kısa devre
False - Örnek:
and(eq(variables.letters, 'ABC'), eq(variables.numbers, 123))
Coalesce
- Parametreleri sırayla değerlendirir ve null ya da boş dize değerine eşit olmayan değeri döndürür.
- Min parametreleri: 2. En fazla Parametreler: N
- Örnek:
coalesce(variables.couldBeNull, variables.couldAlsoBeNull, 'literal so it always works')
contains
TrueSol parametre dizesi sağ parametre içeriyorsa değerlendirir- Min parametreleri: 2. En fazla Parametreler: 2
- Değerlendirme için parametreleri dizeye yayınlar
- Sıralı Ignore-Case karşılaştırması gerçekleştirir
- Örnek:
contains('ABCDE', 'BCD')(true döndürür)
containsValue
TrueSol parametrenin bir dizi olup olmadığını değerlendirir ve herhangi bir öğe doğru parametreye eşittir. Ayrıca,Truesol parametrenin bir nesne olması ve herhangi bir özelliğin değerinin doğru parametreye eşit olup olmadığını değerlendirir.- Min parametreleri: 2. En fazla Parametreler: 2
- Sol parametre bir diziyse, her öğeyi sağ parametrenin türüyle eşleşecek şekilde dönüştürün. Sol parametre bir nesneiyorsa, her özelliğin değerini sağ parametrenin türüyle eşleşecek şekilde dönüştürün. Dönüştürme başarısız olursa, belirli bir öğe için eşitlik karşılaştırması değerlendirilir
False. - Dizeler için sıralı Ignore-Case karşılaştırması
- İlk eşleşmesinden sonra kısa devre
Not
Bir dize belirtmek için YAML ardışık düzeninde sabit bir sözdizimi yoktur. Bu işlev, genel işlem hatlarında sınırlı bir kullanım değildir. Bu, adımlar listesi gibi sistem tarafından sunulan diziler ile ardışık düzen dekoratör bağlamında kullanılmak üzere tasarlanmıştır.
convertToJson
- Karmaşık bir nesne alın ve bunu JSON olarak verir.
- Minimum Parametreler: 1. En fazla Parametreler: 1.
parameters:
- name: listOfValues
type: object
default:
this_is:
a_complex: object
with:
- one
- two
steps:
- script: |
echo "${{ convertToJson(parameters.listOfValues) }}"
# Example output
{
this_is: {
a_complex: object,
with: [
one,
two
]
}
}
counter
- Bu işlev, yalnızca bir değişkeni tanımlayan bir ifadede kullanılabilir. Bir adım, iş veya aşama için koşulun bir parçası olarak kullanılamaz.
- İşlem hattının her çalıştırılmasıyla arttırılan bir sayıyı değerlendirir.
- Parametreler: 2.
prefixveseed. - Önek bir dize ifadesidir. Her benzersiz önek değeri için sayacın ayrı bir değeri izlenir. ,
prefixUTF-16 karakterlerini kullanmalıdır. - Çekirdek, sayacın başlangıç değeridir
İşlem hattınızda her yürütme işlemi için otomatik olarak artan bir sayaç oluşturabilirsiniz. Bir sayaç tanımladığınızda, ve ' ı sağlarsınız prefixseed . Bunu gösteren bir örnek aşağıda verilmiştir.
variables:
major: 1
# define minor as a counter with the prefix as variable major, and seed as 100.
minor: $[counter(variables['major'], 100)]
steps:
- bash: echo $(minor)
minorİşlem hattının ilk çalıştırmasında yukarıdaki örnekteki değer 100 olacaktır. İkinci çalıştırmada, değerinin değeri major hala 1 olduğundan 101 olacaktır.
YAML dosyasını düzenlerseniz ve değişkenin değerini major 2 olacak şekilde güncelleştirirseniz, işlem hattının sonraki çalıştırmasında değeri minor 100 olacaktır. Sonraki çalıştırmalar, sayacı 101, 102, 103,... olarak artırır.
Daha sonra, YAML dosyasını düzenler ve değerini major 1 olarak ayarlarsanız, sayacın değeri o ön ek için kaldığınız yerden devam eder. Bu örnekte, 102 tarihinde devam eder.
Burada, 100 ' de başlayan bir sayaç olarak görev yapacak bir değişken ayarlamaya yönelik başka bir örnek, her çalıştırma için 1 ' den arttırılır ve her gün 100 ' e sıfırlanır.
Not
pipeline.startTime ifadeler dışında kullanılamaz. pipeline.startTimesystem.pipelineStartTimebir tarih ve saat nesnesi halinde biçimlendirir ve bu sayede ifadelerle çalışmak için kullanılabilir.
İçin varsayılan saat dilimi pipeline.startTime UTC 'dir. Kuruluşunuzun saat dilimini değiştirebilirsiniz .
jobs:
- job:
variables:
a: $[counter(format('{0:yyyyMMdd}', pipeline.startTime), 100)]
steps:
- bash: echo $(a)
PR 'ler ve CI çalıştırmaları için ayrı bir değer tutan bir sayaca sahip bir örnek aşağıda verilmiştir.
variables:
patch: $[counter(variables['build.reason'], 0)]
Sayaçlar bir işlem hattının kapsamına alınır. Diğer bir deyişle, bu işlem hattının her çalıştırması için değeri artırılır. Proje kapsamındaki sayaç yok.
endsWith
TrueSol parametre dizesinin sağ parametre ile bitip bitmediğini değerlendirir- Min parametreleri: 2. En fazla Parametreler: 2
- Değerlendirme için parametreleri dizeye yayınlar
- Sıralı Ignore-Case karşılaştırması gerçekleştirir
- Örnek:
endsWith('ABCDE', 'DE')(true döndürür)
eq
TrueParametrelerin eşit olup olmadığını değerlendirir- Min parametreleri: 2. En fazla Parametreler: 2
- Sağ parametreyi sol parametrenin türüyle eşleşecek şekilde dönüştürür.
FalseDönüştürmenin başarısız olup olmadığını döndürür. - Dizeler için sıralı Ignore-Case karşılaştırması
- Örnek:
eq(variables.letters, 'ABC')
biçim
- Sondaki parametreleri değerlendirir ve baştaki parametre dizesine ekler
- Minimum Parametreler: 1. En fazla Parametreler: N
- Örnek:
format('Hello {0} {1}', 'John', 'Doe') - Tarih biçimlendirme için .NET özel tarih ve saat biçimi belirticileri kullanır ( ,
yy,MM,M,dd,d,HH,H,m,mm,ss,s,f,ff,ffff,K - Örnek:
format('{0:yyyyMMdd}', pipeline.startTime). Bu durumdapipeline.startTime, özel bir tarih saat nesne değişkenidir. - Katlama ayraçları ile kaçış. Örnek:
format('literal left brace {{ and literal right brace }}')
ge
TrueSol parametrenin sağ parametreden büyük veya ona eşit olup olmadığını değerlendirir- Min parametreleri: 2. En fazla Parametreler: 2
- Sağ parametreyi sol parametrenin türüyle eşleşecek şekilde dönüştürür. Dönüştürme başarısız olursa hatalar.
- Dizeler için sıralı Ignore-Case karşılaştırması
- Örnek:
ge(5, 5)(true döndürür)
gt
TrueSol parametrenin sağ parametreden daha büyük olup olmadığını değerlendirir- Min parametreleri: 2. En fazla Parametreler: 2
- Sağ parametreyi sol parametrenin türüyle eşleşecek şekilde dönüştürür. Dönüştürme başarısız olursa hatalar.
- Dizeler için sıralı Ignore-Case karşılaştırması
- Örnek:
gt(5, 2)(true döndürür)
in
TrueSol parametrenin herhangi bir doğru parametreye eşit olup olmadığını değerlendirir- Minimum Parametreler: 1. En fazla Parametreler: N
- Sağ parametreleri sol parametrenin türüyle eşleşecek şekilde dönüştürür. Eşitlik karşılaştırması
False, dönüştürme başarısız olursa değerlendirir. - Dizeler için sıralı Ignore-Case karşılaştırması
- İlk eşleşmesinden sonra kısa devre
- Örnek:
in('B', 'A', 'B', 'C')(true döndürür)
join
- Sağ parametre dizisindeki tüm öğeleri, sol parametre dizesiyle ayırarak birleştirir.
- Min parametreleri: 2. En fazla Parametreler: 2
- Dizideki her öğe bir dizeye dönüştürülür. Karmaşık nesneler boş dizeye dönüştürülür.
- Sağ parametre bir dizi değilse, sonuç doğru parametre bir dizeye dönüştürülür.
Bu örnekte, dizideki her öğe arasında noktalı virgül eklenir. Parametre türü bir nesnedir.
parameters:
- name: myArray
type: object
default:
- FOO
- BAR
- ZOO
variables:
A: ${{ join(';',parameters.myArray) }}
steps:
- script: echo $A # outputs FOO;BAR;ZOO
le
TrueSol parametrenin sağ parametreye eşit veya daha küçük olduğunu değerlendirir- Min parametreleri: 2. En fazla Parametreler: 2
- Sağ parametreyi sol parametrenin türüyle eşleşecek şekilde dönüştürür. Dönüştürme başarısız olursa hatalar.
- Dizeler için sıralı Ignore-Case karşılaştırması
- Örnek:
le(2, 2)(true döndürür)
length
- Bir dizenin veya bir dizinin uzunluğunu ya da sistemden gelen veya bir parametreden gelen bir diziyi döndürür
- Minimum Parametreler: 1. En fazla parametreler 1
- Örnek:
length('fabrikam')8 döndürür
düşürül
- Bir dize veya değişken değerini tüm küçük harfli karakterlere dönüştürür
- Minimum Parametreler: 1. En fazla parametreler 1
- Bir dizenin küçük harfli eşdeğerini döndürür
- Örnek:
lower('FOO')döndürürfoo
lt
TrueSol parametrenin sağ parametreden küçük olup olmadığını değerlendirir- Min parametreleri: 2. En fazla Parametreler: 2
- Sağ parametreyi sol parametrenin türüyle eşleşecek şekilde dönüştürür. Dönüştürme başarısız olursa hatalar.
- Dizeler için sıralı Ignore-Case karşılaştırması
- Örnek:
lt(2, 5)(true döndürür)
ne
TrueParametrelerin eşit olmadığını değerlendirir- Min parametreleri: 2. En fazla Parametreler: 2
- Sağ parametreyi sol parametrenin türüyle eşleşecek şekilde dönüştürür.
TrueDönüştürmenin başarısız olup olmadığını döndürür. - Dizeler için sıralı Ignore-Case karşılaştırması
- Örnek:
ne(1, 2)(true döndürür)
not
TrueParametrenin olup olmadığını değerlendirirFalse- Minimum Parametreler: 1. En fazla Parametreler: 1
- Değerlendirme için değeri Boole değerine dönüştürür
- Örnek:
not(eq(1, 2))(true döndürür)
Notın
TrueSol parametrenin herhangi bir doğru parametreye eşit olup olmadığını değerlendirir- Minimum Parametreler: 1. En fazla Parametreler: N
- Sağ parametreleri sol parametrenin türüyle eşleşecek şekilde dönüştürür. Eşitlik karşılaştırması
False, dönüştürme başarısız olursa değerlendirir. - Dizeler için sıralı Ignore-Case karşılaştırması
- İlk eşleşmesinden sonra kısa devre
- Örnek:
notIn('D', 'A', 'B', 'C')(true döndürür)
veya
TrueHerhangi bir parametre varsa değerlendirirTrue- Min parametreleri: 2. En fazla Parametreler: N
- Değerlendirme için parametreleri Boole değerine yayınlar
- İlkden sonra kısa devre
True - Örnek:
or(eq(1, 1), eq(2, 3))(true, kısa devreler döndürür)
değiştirin
- Geçerli örnekteki bir dizenin tüm örneklerinin başka bir dizeyle değiştirildiği yeni bir dize döndürür
- Min parametreleri: 3. En fazla Parametreler: 3
replace(a, b, c): c ile değiştirilmiş tüm b örneklerinin bulunduğu bir döndürür- Örnek:
replace('https://www.tinfoilsecurity.com/saml/consume','https://www.tinfoilsecurity.com','http://server')(döndürürhttp://server/saml/consume)
startsWith
TrueSol parametre dizesinin sağ parametreyle başlıyorsa değerlendirir- Min parametreleri: 2. En fazla Parametreler: 2
- Değerlendirme için parametreleri dizeye yayınlar
- Sıralı Ignore-Case karşılaştırması gerçekleştirir
- Örnek:
startsWith('ABCDE', 'AB')(true döndürür)
üst
- Bir dize veya değişken değerini tüm büyük harfli karakterlere dönüştürür
- Minimum Parametreler: 1. En fazla parametreler 1
- Bir dizenin büyük harfli eşdeğerini döndürür
- Örnek:
upper('bah')döndürürBAH
xor
TrueTam olarak bir parametre olduğunu değerlendirirTrue- Min parametreleri: 2. En fazla Parametreler: 2
- Değerlendirme için parametreleri Boole değerine yayınlar
- Örnek:
xor(True, False)(true döndürür)
İş durumu denetim işlevleri
Aşağıdaki durum denetimi işlevlerini koşullarda ifadeler olarak, değişken tanımlarında değil, kullanabilirsiniz.
Her
- Her zaman olarak değerlendirilir
True(iptal edildiğinde bile). Note: kritik bir hata, hala bir görevin çalışmasını engelleyebilir. Örneğin, kaynak alma başarısız olursa.
edilmesi
- İşlem
Truehattının iptal edilip edilmeyeceğini değerlendirir.
başarısız
- Bir adım için, ile eşdeğerdir
eq(variables['Agent.JobStatus'], 'Failed'). - Bir iş için:
- Bağımsız değişken olmadan,
Trueyalnızca bağımlılık grafiğindeki bir önceki iş başarısız olursa olarak değerlendirilir. - Bağımsız değişken olarak iş adlarıyla,
Trueyalnızca bu işlerin herhangi biri başarısız olursa olarak değerlendirilir.
- Bağımsız değişken olmadan,
başarılı
- Bir adım için,
in(variables['Agent.JobStatus'], 'Succeeded', 'SucceededWithIssues') - Bir iş için:
- Bağımsız değişken olmadan,
Trueyalnızca bağımlılık grafiğindeki önceki tüm işler başarılı veya kısmen başarılı olursa olarak değerlendirilir. - Önceki iş başarılı olduysa ancak daha fazla yukarı akış bağımlılığı başarısız olduysa,
succeeded('previousJobName')doğru döndürür. Yalnızca kullandığınızdadependsOn: previousJobName, tüm yukarı akış bağımlılıkları başarılı olmadığından başarısız olur. Yalnızca önceki işi değerlendirmek içinsucceeded('previousJobName')bir koşulda kullanın. - Bağımsız değişken olarak iş adlarıyla,
TrueBu işlerin tümü başarılı veya kısmen başarılı olursa olarak değerlendirilir. Falseİşlem hattının iptal edilip edilmeyeceğini değerlendirir.
- Bağımsız değişken olmadan,
succeededOrFailed
Bir adım için,
in(variables['Agent.JobStatus'], 'Succeeded', 'SucceededWithIssues', 'Failed')Bir iş için:
- Bağımsız değişken olmadan,
Truebağımlılık grafiğindeki işlerin başarılı veya başarısız olmasından bağımsız olarak değerlendirilir. - İş adlarıyla bağımsız değişken olarak,
TrueBu işlerin herhangi birinin başarılı veya başarısız olup olmadığını değerlendirir.
Bu, işlem
always()Falsehattının ne zaman iptal edildiğini değerlendilecektir.- Bağımsız değişken olmadan,
Koşullu ekleme
if, elseif , Ve else yan tümceleri, değişken değerlerini koşullu olarak atamak veya görevler için girişler ayarlamak için kullanabilirsiniz. Ayrıca, bir koşul karşılandığında koşullu olarak bir adımı çalıştırabilirsiniz.
Conditionals yalnızca şablon söz dizimi kullanılırken çalışır. Değişken sözdizimihakkında daha fazla bilgi edinin.
Şablonlar için, bir dizi veya eşleme eklerken koşullu ekleme kullanabilirsiniz. Şablonlara koşullu ekleme hakkında daha fazla bilgi edinebilirsiniz.
Koşullu değişken atama
variables:
${{ if eq(variables['Build.SourceBranchName'], 'main') }}: # only works if you have a main branch
stageName: prod
pool:
vmImage: 'ubuntu-latest'
steps:
- script: echo ${{variables.stageName}}
Bir görev girişini koşullu olarak ayarlama
pool:
vmImage: 'ubuntu-latest'
steps:
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Pipeline.Workspace)'
${{ if eq(variables['Build.SourceBranchName'], 'main') }}:
artifact: 'prod'
${{ else }}:
artifact: 'dev'
publishLocation: 'pipeline'
Bir adımı koşullu olarak çalıştırma
variables:
- name: foo
value: fabrikam # triggers else condition
pool:
vmImage: 'ubuntu-latest'
steps:
- script: echo "start"
- ${{ if eq(variables.foo, 'adaptum') }}:
- script: echo "this is adaptum"
- ${{ elseif eq(variables.foo, 'contoso') }}:
- script: echo "this is contoso"
- ${{ else }}:
- script: echo "the value is not adaptum or contoso"
"Each" anahtar sözcüğü
Parametrelerde nesne each türüyle döngü yapmak için anahtar sözcüğünü kullanabilirsiniz.
parameters:
- name: listOfStrings
type: object
default:
- one
- two
steps:
- ${{ each value in parameters.listOfStrings }}:
- script: echo ${{ value }}
Bağımlılıklar
İfadeler, önceki işlere veya aşamalara başvuru yapmak için bağımlılıklar bağlamını kullanabilir. Bağımlılıkları aşağıdakiler için kullanabilirsiniz:
- Önceki işin iş durumuna başvuru
- Önceki aşamanın aşama durumuna başvuru
- Aynı aşamada önceki işteki çıkış değişkenlerine başvuru
- Bir aşamada önceki aşamadaki çıkış değişkenlerine başvuru
- Aşağıdaki aşamada önceki bir aşamadaki bir işteki çıkış değişkenlerine başvuru
Bağlam, işler ve dependencies aşamalar için çağrılır ve değişkenlere çok benzer şekilde çalışır.
Bir işin içinde, başka bir aşamadaki bir işin çıkış değişkenine başvurursanız bağlam olarak adlandırılan bir bağlam stageDependencies vardır.
Çıkış değişkenlerinin tırnak karakterleriyle ( veya ) ilgili sorunlarıyla ilgili sorun yaşamaları ' için bu sorun giderme "'
Bağımlılıkları aşamaya aşama
Yapısal olarak, dependencies nesnesi ve için iş ve aşama adlarının bir resultsoutputs haritasıdır.
JSON olarak ifade edildi, şöyle olur:
"dependencies": {
"<STAGE_NAME>" : {
"result": "Succeeded|SucceededWithIssues|Skipped|Failed|Canceled",
"outputs": {
"jobName.stepName.variableName": "value"
}
},
"...": {
// another stage
}
}
Değişkenlerle dependencies eşlemek veya aşama düzeyinde koşulları kontrol etmek için bu biçimi kullanın.
Bu örnekte Aşama B, A aşamasının başarılı veya atlanmış olmasıyla çalışır.
Not
Aşağıdaki örneklerde standart işlem hattı söz dizimi kullanılır. Dağıtım işlem hatlarını kullanıyorsanız hem değişken hem de koşullu değişken söz dizimi farklılık gösterir. Belirli bir söz dizimi hakkında daha fazla bilgi için bkz. Dağıtım işleri.
stages:
- stage: A
condition: false
jobs:
- job: A1
steps:
- script: echo Job A1
- stage: B
condition: in(dependencies.A.result, 'Succeeded', 'SucceededWithIssues', 'Skipped')
jobs:
- job: B1
steps:
- script: echo Job B1
Aşamalar başka bir aşamadaki çıkış değişkenlerini de kullanabilir. Bu örnekte B aşaması, A aşamasının bir değişkenine bağlıdır.
stages:
- stage: A
jobs:
- job: A1
steps:
- bash: echo "##vso[task.setvariable variable=shouldrun;isOutput=true]true"
# or on Windows:
# - script: echo ##vso[task.setvariable variable=shouldrun;isOutput=true]true
name: printvar
- stage: B
condition: and(succeeded(), eq(dependencies.A.outputs['A1.printvar.shouldrun'], 'true'))
dependsOn: A
jobs:
- job: B1
steps:
- script: echo hello from Stage B
Not
Varsayılan olarak, bir işlem hattında her aşama YAML dosyasından hemen önceki aşamaya bağlıdır.
Geçerli aşamadan hemen önce olmayan bir aşamaya başvurursanız, aşamaya bir bölüm ekleyerek bu otomatik dependsOn varsayılanı geçersiz kılabilirsiniz.
Bir aşamadaki işden işe bağımlılıkları
Tek bir aşamadaki iş düzeyinde veriler dependencies aşama düzeyinde bilgi içermez.
"dependencies": {
"<JOB_NAME>": {
"result": "Succeeded|SucceededWithIssues|Skipped|Failed|Canceled",
"outputs": {
"stepName.variableName": "value1"
}
},
"...": {
// another job
}
}
Bu örnekte, İş A her zaman atlanır ve İş B çalıştıracak. Tüm bağımlılıkları başarılı veya atlanmış olduğu için C işi çalıştıracak.
jobs:
- job: a
condition: false
steps:
- script: echo Job A
- job: b
steps:
- script: echo Job B
- job: c
dependsOn:
- a
- b
condition: |
and
(
in(dependencies.a.result, 'Succeeded', 'SucceededWithIssues', 'Skipped'),
in(dependencies.b.result, 'Succeeded', 'SucceededWithIssues', 'Skipped')
)
steps:
- script: echo Job C
Bu örnekte, İş B, A İşlerinden bir çıkış değişkenine bağlıdır.
jobs:
- job: A
steps:
- bash: echo "##vso[task.setvariable variable=shouldrun;isOutput=true]true"
# or on Windows:
# - script: echo ##vso[task.setvariable variable=shouldrun;isOutput=true]true
name: printvar
- job: B
condition: and(succeeded(), eq(dependencies.A.outputs['printvar.shouldrun'], 'true'))
dependsOn: A
steps:
- script: echo hello from B
Aşamalar arasında işden işe bağımlılıkları
İş düzeyinde, önceki bir aşamada bir işten çıkışlara da başvurarak çıkışlara başvurarak.
Bunun için bağlamın kullanımı stageDependencies gerekir.
"stageDependencies": {
"<STAGE_NAME>" : {
"<JOB_NAME>": {
"result": "Succeeded|SucceededWithIssues|Skipped|Failed|Canceled",
"outputs": {
"stepName.variableName": "value"
}
},
"...": {
// another job
}
},
"...": {
// another stage
}
}
Bu örnekte, A1 işi başarılı veya atlanmış olsun B1 işi çalıştırılacak. İş B2, çalıştırıp çalıştırmayacaklarını belirlemek için A1 işi çıkış değişkeninin değerini kontrol edin.
trigger: none
pool:
vmImage: 'ubuntu-latest'
stages:
- stage: A
jobs:
- job: A1
steps:
- bash: echo "##vso[task.setvariable variable=shouldrun;isOutput=true]true"
# or on Windows:
# - script: echo ##vso[task.setvariable variable=shouldrun;isOutput=true]true
name: printvar
- stage: B
dependsOn: A
jobs:
- job: B1
condition: in(stageDependencies.A.A1.result, 'Succeeded', 'SucceededWithIssues', 'Skipped')
steps:
- script: echo hello from Job B1
- job: B2
condition: eq(stageDependencies.A.A1.outputs['printvar.shouldrun'], 'true')
steps:
- script: echo hello from Job B2
İş çıkışına bağlı olarak aşama
Derlemeden sonra değişiklik gerekmiyorsa, belirli koşullar altında işlem hattında bir aşamayı atlamak iyi olabilir. Terraform Plan'ı kullanırken onay tetiklemek ve yalnızca plan değişiklik içerdiğinde uygulamak istemeniz buna örnek olarak gösterilir.
Bu koşulu bir aşamada kullanırken değişkenlerini değil, dependencies değişkenlerini kullan stageDependencies gerekir.
Aşağıdaki örnek, bir aşamadaki bir adımda bir değişken ayar eden (Terraform Planı'nın gerçek bilgilerini kullanın) ve ardından ikinci aşamayı yalnızca değişkenin belirli bir değeri varsa çağıran basit bir betiktir.
stages:
- stage: plan_dev
jobs:
- job: terraform_plan_dev
steps:
- bash: echo '##vso[task.setvariable variable=terraform_plan_exitcode;isOutput=true]2'
name: terraform_plan
- stage: apply_dev
dependsOn: plan_dev
condition: eq(dependencies.plan_dev.outputs['terraform_plan_dev.terraform_plan.terraform_plan_exitcode'], '2')
jobs:
- job: part_b
steps:
- bash: echo "BA"
Filtrelenmiş diziler
Bir öğe koleksiyonu üzerinde çalışma söz dizimi kullanarak * filtrelenmiş bir dizi uygulayabilirsiniz. Filtrelenmiş dizi, adlarından bağımsız olarak tüm nesneleri/öğeleri döndürür.
Örnek olarak adlı bir nesne dizisi foo düşünün. Dizimizde yer alan her nesnede id özelliğinin değerlerini içeren bir dizi almak istiyoruz.
[
{ "id": 1, "a": "avalue1"},
{ "id": 2, "a": "avalue2"},
{ "id": 3, "a": "avalue3"}
]
Şunları yapabiliriz:
foo.*.id
Bu, sisteme üzerinde filtrelenmiş foo bir dizi olarak çalışması ve ardından özelliğini seçmesini id söyler.
Bu, şu şekilde olur:
[ 1, 2, 3 ]
Tür atama
İfade değerlendirilip bir ifadede yer alan değerler bir türden diğerine dönüştürmek için kullanılır. Bir ifade değerlendirilirken, parametreler ilgili veri türüyle birikip dizelere geri döner.
Örneğin, bu YAML'de ve değerleri TrueFalse ifade 10 değerlendiriken ve değerlerine dönüştürülür.
Sol parametre lt()True sağ parametreden küçük olduğunda işlevi döndürür.
variables:
firstEval: $[lt(False, True)] # 0 vs. 1, True
secondEval: $[lt(True, False)] # 1 vs. 0, False
steps:
- script: echo $(firstEval)
- script: echo $(secondEval)
Bu örnekte hem değerler hem variables.emptyString de boş dizeler boş dize olarak değerlendirilir.
İşlev, parametreleri sırayla değerlendirir ve null veya boş coalesce() dizeye eşit olmayan ilk değeri döndürür.
variables:
coalesceLiteral: $[coalesce(variables.emptyString, '', 'literal value')]
steps:
- script: echo $(coalesceLiteral) # outputs literal value
Ayrıntılı dönüştürme kuralları aşağıda daha fazla listelenmiştir.
| From / To | Boole | Null | Sayı | Dize | Sürüm |
|---|---|---|---|---|---|
| Boole | - | - | Yes | Yes | - |
| Null | Yes | - | Yes | Yes | - |
| Sayı | Yes | - | - | Yes | Kısmi |
| Dize | Yes | Kısmi | Kısmi | - | Kısmi |
| Sürüm | Yes | - | - | Yes | - |
Boole
Sayı olarak:
False→0True→1
Dizeye:
False→'False'True→'True'
Null
- Boole'a:
False - Sayı olarak:
0 - Dizeye:
''(boş dize)
Sayı
- Boole'a:
0False→, diğer tüm →True - Sürüm: Sıfırdan büyük olmalı ve sıfır olmayan bir ondalık sayı içermesi gerekir. Int32.MaxValue'dan (ondalık bileşen de) küçük olmalıdır.
- Dizeye: Sayıyı binlik ayırıcısı ve ondalık ayırıcısı olan bir dizeye dönüştürür.
Dize
- Boole değerine:
''(boş dize)False→, diğer dizeler →True - Null değerine:
''(boş dize)Null→, diğer dizeler dönüştürülebilir değil - Sayı olarak:
''(boş dize) → 0 ise, C#'leriInt32.TryParse''ve şu kuralları kullanarak çalıştırır: AllowDecimalPoint | AllowLeadingSign | AllowLeadingWhite | allowThousands | Allowtrailingwhite. BaşarısızTryParseolursa, dönüştürülebilir değildir. - Sürüm: C# 'nin sürümünü
Version.TryParseçalıştırır. En azından Ana ve İkincil bileşen içermesi gerekir. BaşarısızTryParseolursa, dönüştürülebilir değildir.
Sürüm
- Boole'a:
True - Dizeye: Major.Minor veya Major.Minor.Build veya Major.Minor.Build.Revision.
SSS
İfadeler tarafından desteklenen bir şey yapmak istiyorum. İşlevselliği genişletmek için hangi Pipelines var?
İşlem Hattınızı bir ifade içeren bir betikle özelleştirebilirsiniz. Örneğin, bu kod parçacığı değişkeni BUILD_BUILDNUMBER alır ve Bash ile böler. Bu betik, ana ve küçük çalıştırma $MAJOR_RUN numaraları için iki yeni değişken $MINOR_RUN (ve) çıkışını verir.
Ardından iki değişken, $major$minor$majorile iki işlem hattı değişkeni oluşturmak için kullanılır. Bu değişkenler aşağı akış adımlarda kullanılabilir. İşlem hatları arasında değişkenleri paylaşmak için bkz. Değişken grupları.
steps:
- bash: |
MAJOR_RUN=$(echo $BUILD_BUILDNUMBER | cut -d '.' -f1)
echo "This is the major run number: $MAJOR_RUN"
echo "##vso[task.setvariable variable=major]$MAJOR_RUN"
MINOR_RUN=$(echo $BUILD_BUILDNUMBER | cut -d '.' -f2)
echo "This is the minor run number: $MINOR_RUN"
echo "##vso[task.setvariable variable=minor]$MINOR_RUN"
- bash: echo "My pipeline variable for major run is $(major)"
- bash: echo "My pipeline variable for minor run is $(minor)"