Koşulları belirtme
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Her aşamanın, işin veya adımın hangi koşullar altında çalıştırılacağını belirtebilirsiniz. Varsayılan olarak, iş veya aşama başka bir işe veya aşamaya bağlı değilse veya bağımlı olduğu tüm işler veya aşamalar tamamlanmış ve başarılıysa çalışır. Bu yalnızca doğrudan bağımlılıkları değil, aynı zamanda özyinelemeli olarak hesaplanan bağımlılıkları da içerir. Varsayılan olarak işinde henüz hiçbir şey başarısız olmadıysa ve ondan hemen önceki adım tamamlandığında bir adım çalıştırılır. Önceki bir bağımlılık başarısız olsa bile bir aşamayı, işi veya adımı çalıştırmaya zorlayarak veya özel bir koşul belirterek bu davranışı özelleştirebilirsiniz.
Bir adımın, işin veya aşamanın tabi olacağı koşulları belirtebilirsiniz.
Yalnızca aynı aracı havuzuna sahip önceki tüm doğrudan ve dolaylı bağımlılıklar başarılı olduğunda. Farklı aracı havuzlarınız varsa bu aşamalar veya işler eşzamanlı olarak çalıştırılır. YAML'de ayarlanmış bir koşul yoksa bu varsayılan değerdir.
Önceki bir bağımlılık başarısız olsa bile, çalıştırma iptal edilmediği sürece. Bu koşul için YAML'de kullanın
succeededOrFailed()
.Önceki bir bağımlılık başarısız olsa bile, çalıştırma iptal edilmiş olsa bile. Bu koşul için YAML'de kullanın
always()
.Yalnızca önceki bir bağımlılık başarısız olduğunda. Bu koşul için YAML'de kullanın
failed()
.
- Özel koşullar
Varsayılan olarak, tüm doğrudan ve dolaylı bağımlılıklar başarılı olursa adımlar, işler ve aşamalar çalıştırılır. "condition: succeeded()" (bkz . başarılı durum işlevi).
jobs:
- job: Foo
steps:
- script: echo Hello!
condition: always() # this step will always run, even if the pipeline is canceled
- job: Bar
dependsOn: Foo
condition: failed() # this job will only run if Foo fails
Değişkenleri koşullarda da kullanabilirsiniz.
variables:
isMain: $[eq(variables['Build.SourceBranch'], 'refs/heads/main')]
stages:
- stage: A
jobs:
- job: A1
steps:
- script: echo Hello Stage A!
- stage: B
condition: and(succeeded(), eq(variables.isMain, true))
jobs:
- job: B1
steps:
- script: echo Hello Stage B!
- script: echo $(isMain)
Koşullar, aşama, iş veya adım başlatılıp başlatılmayeceğine karar vermek için değerlendirilir.
Bu, çalışma zamanında bu çalışma birimi içinde hesaplanan hiçbir şeyin kullanılamayacağı anlamına gelir.
Örneğin, söz dizimi kullanarak çalışma zamanı ifadesi kullanarak $[ ]
değişken ayarlayan bir işiniz varsa, özel koşulunuzda bu değişkeni kullanamazsınız.
YAML, TFS'de desteklenmez.
Not
Bir aşama / iş / adım için kendi condition
özelliğinizi belirttiğinizde, varsayılan condition: succeeded()
değerinin üzerine yazarsınız. Bu, derleme iptal edilse bile aşamanızın / işinizin / adımınızın çalıştırılmasına yol açabilir. Kendi koşullarınızı yazarken üst aşamanın /işin durumunu dikkate aldığınızdan emin olun.
Özel koşulu etkinleştirme
Yerleşik koşullar gereksinimlerinizi karşılamıyorsa özel koşullar belirtebilirsiniz.
Koşullar YAML işlem hatlarında ifade olarak yazılır. Aracı, ifadeyi en içteki işlevden başlayarak değerlendirir ve oradan devam eder. Nihai sonuç görevin, işin veya aşamanın çalıştırılıp çalıştırılmaması gerektiğini belirleyen bir boole değeri olur. Söz diziminin tam kılavuzu için ifadeler makalesine bakın.
Koşullarınızdan herhangi biri, derleme bir kullanıcı tarafından iptal edildikten sonra bile görevin çalışmasını mümkün hale getiriyor mu? Öyleyse, kullanıcı bir çalıştırmayı iptal ettikten sonra bu tür görevlerin tamamlanması için yeterli zamana sahip olması için iptal zaman aşımı için makul bir değer belirtin.
Derleme iptal edildiğinde işlem hattı davranışı
Derleme iptal edildiğinde, tüm aşamaları, işleri veya adımları çalışmayı durdurmaz. Karar, belirttiğiniz aşamaya, işe veya adıma conditions
ve işlem hattının yürütmesinin hangi noktasında derlemeyi iptal ettiğinize bağlıdır.
Durumunuz aşamanızın /işinizin/ adımınızın üst öğesinin durumunu dikkate almazsa, koşul olarak değerlendirilirsetrue
, üst öğesi iptal edilse bile aşamanız, işiniz veya adımınız çalışır. Üst öğesi atlanırsa aşamanız, işiniz veya adımınız çalışmaz.
Bazı örneklere bakalım.
Bu işlem hattında, varsayılan olarak stage2
bir kümeye stage1
bağlıdır ve stage2
buna condition
sahiptir. stage2
yalnızca kaynak dal olduğunda main
çalışır.
stages:
- stage: stage1
jobs:
- job: A
steps:
- script: echo 1; sleep 30
- stage: stage2
condition: eq(variables['Build.SourceBranch'], 'refs/heads/main')
jobs:
- job: B
steps:
- script: echo 2
Daldaki bir derlemeyi main
kuyruğa alır ve çalışırken iptal stage1
ederseniz, stage2
yine de çalışır, çünkü eq(variables['Build.SourceBranch'], 'refs/heads/main')
olarak değerlendirilir true
.
Bu işlem hattında, stage2
öğesine stage1
bağlıdır. İş B
için bir condition
set var.
stages:
- stage: stage1
jobs:
- job: A
steps:
- script: echo 1; sleep 30
- stage: stage2
jobs:
- job: B
condition: eq(variables['Build.SourceBranch'], 'refs/heads/main')
steps:
- script: echo 2
Daldaki bir derlemeyi main
kuyruğa alır ve çalışırken iptal stage1
ederseniz, stage2
durumu olarak değerlendirilen true
bir iş B
içerse bile çalışmaz. Bunun nedenistage2
, iptal edildiğinde stage1
değerlendirilen false
varsayılan condition: succeeded()
değerinin olmasıdır. Bu nedenle atlanır stage2
ve işlerinin hiçbiri çalışmaz.
Aşağıdaki YAML işlem hattına sahip olduğunuzu varsayalım. Varsayılan olarak stage2
buna bağlı stage1
olduğuna ve bunun için bir condition
kümesi olduğuna script: echo 2
dikkat edin.
stages:
- stage: stage1
jobs:
- job: A
steps:
- script: echo 1; sleep 30
- stage: stage2
jobs:
- job: B
steps:
- script: echo 2
condition: eq(variables['Build.SourceBranch'], 'refs/heads/main')
Daldaki bir derlemeyi main
kuyruğa alır ve çalışırken iptal stage1
ederseniz, stage2
durumu olarak değerlendirilen true
bir iş B
adımı içerse bile çalışmaz. Bunun nedeni stage2
iptal edilmeye stage1
yanıt olarak atlanmış olmasıdır.
Derleme iptal edildiğinde aşamaların, işlerin veya adımların conditions
çalışmasını önlemek için, yazarken üstlerinin durumunu dikkate aldığınızdan conditions
emin olun. Daha fazla bilgi için bkz . İş durumu işlevleri.
Örnekler
İptal edilse bile, başarısız olsa bile ana dal için komutunu çalıştırın
eq(variables['Build.SourceBranch'], 'refs/heads/main')
Başarılı olursa ana dal için komutunu çalıştırın
and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
Dal ana değilse, başarılıysa komutunu çalıştırın
and(succeeded(), ne(variables['Build.SourceBranch'], 'refs/heads/main'))
Başarılı olursa, kullanıcı konusu dalları için komutunu çalıştırın
and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/heads/users/'))
Başarılı olursa sürekli tümleştirme (CI) derlemeleri için çalıştırma
and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI'))
Derleme bir çekme isteği için bir dal ilkesi tarafından çalıştırılıyorsa ve başarısız oluyorsa çalıştır
and(failed(), eq(variables['Build.Reason'], 'PullRequest'))
Derleme zamanlanmışsa, başarısız olsa bile, iptal edilse bile komutunu çalıştırın
eq(variables['Build.Reason'], 'Schedule')
Release.Artifacts. {artifact-alias}. SourceBranch, Build.SourceBranch ile eşdeğerdir.
Bir değişken true olarak ayarlandıysa, iptal edilse bile, başarısız olsa bile her zaman çalıştır
eq(variables['System.debug'], true)
Değişken null ise (boş dize) komutunu çalıştırın
Tüm değişkenler Azure Pipelines'da dize olarak işlendiğinden, boş bir dize bu işlem hattındaki ile null
eşdeğerdir.
variables:
- name: testEmpty
value: ''
jobs:
- job: A
steps:
- script: echo testEmpty is blank
condition: eq(variables.testEmpty, '')
Bir koşulun parçası olarak şablon parametresi kullanma
Koşula sahip olduğunuz aynı işlem hattında bir parametre bildirdiğinizde, koşullar dikkate alınmadan önce parametre genişletme gerçekleşir. Bu durumda parametreleri koşulların içine ekleyebilirsiniz. Bu YAML dosyasındaki betik doğru olduğundan parameters.doThing
çalışacaktır.
condition
işlem hattındaki iki işlevi birleştirir: succeeded()
ve eq('${{ parameters.doThing }}', true)
. İşlev, succeeded()
önceki adımın başarılı olup olmadığını denetler. İşlev succeeded()
true değerini döndürür çünkü önceki adım yoktur.
işlevi, eq('${{ parameters.doThing }}', true)
doThing parametresinin değerine true
eşit olup olmadığını denetler. doThing için varsayılan değer true olduğundan, işlem hattında farklı bir değer ayarlanmadığı sürece koşul varsayılan olarak true döndürür.
Daha fazla şablon parametresi örneği için bkz . Şablon türleri ve kullanımı.
parameters:
- name: doThing
default: true
type: boolean
steps:
- script: echo I did a thing
condition: ${{ eq(parameters.doThing, true) }}
Bir parametreyi şablona geçirirken, parametrenin değerini şablonunuzda ayarlamanız veya şablona özellik geçirmek için templateContext kullanmanız gerekir.
# parameters.yml
parameters:
- name: doThing
default: true # value passed to the condition
type: boolean
jobs:
- job: B
steps:
- script: echo I did a thing
condition: ${{ eq(parameters.doThing, true) }}
# azure-pipeline.yml
parameters:
- name: doThing
default: true
type: boolean
trigger:
- none
extends:
template: parameters.yml
Bu işlem hattının çıkışı, I did a thing
parametresinin doThing
true olmasıdır.
Bir işin çıkış değişkenini sonraki bir işteki bir koşulda kullanma
Bir değişkeni gelecekteki işler için kullanılabilir hale getirip bir koşulda belirtebilirsiniz. Gelecekteki işler için kullanılabilen değişkenler kullanılarak isOutput=true
çok işli çıkış değişkenleri olarak işaretlenmelidir.
jobs:
- job: Foo
steps:
- bash: |
echo "This is job Foo."
echo "##vso[task.setvariable variable=doThing;isOutput=true]Yes" #set variable doThing to Yes
name: DetermineResult
- job: Bar
dependsOn: Foo
condition: eq(dependencies.Foo.outputs['DetermineResult.doThing'], 'Yes') #map doThing and check the value
steps:
- script: echo "Job Foo ran and doThing is Yes."
Sonraki adımda bir koşuldaki bir adımdan oluşturulan işlem hattı değişkenini kullanma
Bir değişkeni gelecekteki adımlarda kullanılabilir hale getirip bir koşulda belirtebilirsiniz. Varsayılan olarak, bir adımdan oluşturulan değişkenler gelecekteki adımlarda kullanılabilir ve kullanılarak isOutput=true
çok işli çıkış değişkenleri olarak işaretlenmesi gerekmez.
Yukarıdaki yaklaşım ve kapsam belirleme ile ilgili dikkat edilmesi gereken bazı önemli noktalar vardır:
- bir işteki bir adımda oluşturulan değişkenlerin kapsamı aynı işteki adımlara göre belirlenmiştir.
- Bir adımda oluşturulan değişkenler yalnızca sonraki adımlarda ortam değişkenleri olarak kullanılabilir.
- Bir adımda oluşturulan değişkenler, bunları tanımlayan adımda kullanılamaz.
Aşağıda, bir adımda işlem hattı değişkeni oluşturma ve sonraki bir adımın koşulunda ve betiğinde değişkeni kullanma örneği verilmiştir.
steps:
# This step creates a new pipeline variable: doThing. This variable will be available to subsquent steps.
- bash: |
echo "##vso[task.setvariable variable=doThing]Yes"
displayName: Step 1
# This step is able to use doThing, so it uses it in its condition
- script: |
# You can access the variable from Step 1 as an environment variable.
echo "Value of doThing (as DOTHING env var): $DOTHING."
displayName: Step 2
condition: and(succeeded(), eq(variables['doThing'], 'Yes')) # or and(succeeded(), eq(variables.doThing, 'Yes'))
SSS
Önceki bir iş başarılı olursa ancak sorunlar varsa başka bir işi nasıl tetikleyebilirim?
Önceki işin sonucunu kullanabilirsiniz. Örneğin, bu YAML dosyasında, İş A sorunlarla başarılı olduğundan bu koşul eq(dependencies.A.result,'SucceededWithIssues')
işin çalışmasına izin verir.
jobs:
- job: A
displayName: Job A
continueOnError: true # next job starts even if this one fails
steps:
- script: echo Job A ran
- script: exit 1
- job: B
dependsOn: A
condition: eq(dependencies.A.result,'SucceededWithIssues') # targets the result of the previous job
displayName: Job B
steps:
- script: echo Job B ran
Derlememi iptal ettim ama çalışmaya devam ediyor. Sorun nedir?
Aşamada yapılandırılan koşul bir iş durumu denetimi işlevi içermiyorsa bu sorunla karşılaşırsınız. Sorunu çözmek için koşula bir iş durumu denetimi işlevi ekleyin. Bir işi kuyruktayken iptal ederseniz ancak çalıştırılmazsanız, diğer tüm aşamalar da dahil olmak üzere işin tamamı iptal edilir.
Derleme iptal edildiğinde işlem hattının davranışı hakkında daha fazla bilgi edinin.
İlgili makaleler
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin