Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
Bu makalede, Bir Azure Pipelines aşamasının, işinin veya adımının çalıştırılmasına izin veren farklı koşullar ve yaml işlem hattı tanımında bu koşulların nasıl ayarlanacağı açıklanmaktadır.
Not
Bu makalede YAML işlem hattı özellikleri ele alınmaktadır. Klasik işlem hatları için, görevlerin veya işlerin çalıştırıldığı bazı koşulları her görevin Denetim Seçenekleri'nde ve yayın işlem hattındaki bir iş için ek seçenekler bölümünde belirtebilirsiniz.
Aşama, iş veya adımın altında çalıştığı koşullar
Varsayılan olarak, işlem hattı işi veya aşaması başka bir işe veya aşamaya bağımlı değilse veya tüm bağımlılıkları tamamlanmış ve başarılıysa çalışır. Bağımlılık gereksinimi, doğrudan bağımlılıklar ve bunların özyinelemeli olarak hesaplanan dolaylı bağımlılıkları için geçerlidir.
Varsayılan olarak, görevinde henüz hiçbir şey başarısız olmazsa ve hemen önceki adım tamamlandıysa, adım çalışır. Aşamalar, işler ve adımlar hakkında daha fazla bağlam için, bkz. Azure Pipelines için temel kavramlar.
Bu varsayılan davranışları geçersiz kılabilir veya özelleştirmek için, bir aşama, iş veya adımı, yalnızca önceki bir bağımlılık başarısız olsa veya başka bir sonuca sahip olsa bile çalıştırılacak şekilde ayarlayabilirsiniz.
Özel koşullar da tanımlayabilirsiniz. YAML işlem hattı tanımında, bir aşamanın, işin veya adımın condition hangi koşullar altında çalışabileceğini belirtmek için özelliğini kullanırsınız.
Not
Koşullar, aynı aracı havuzuna sahip önceki tüm doğrudan ve dolaylı bağımlılıklar için geçerlidir. Farklı aracı havuzlarındaki aşamalar veya işler eşzamanlı olarak çalışır.
Önceki bağımlılık durumuna dayalı koşullar şunlardır:
-
Başarılı: Yalnızca önceki tüm bağımlılıklar başarılı olursa komutunu çalıştırın. YAML'de hiçbir koşul ayarlanmadıysa bu davranış varsayılandır. Bu koşulu uygulamak için belirtin
condition: succeeded(). -
Başarılı veya başarısız: Çalıştırma iptal edilmediği sürece önceki bir bağımlılık başarısız olsa bile çalıştırın. Bu koşulu uygulamak için belirtin
condition: succeededOrFailed(). -
Her zaman: Önceki bir bağımlılık başarısız olsa bile çalıştırma iptal edilse bile çalıştırın. Bu koşulu uygulamak için belirtin
condition: always(). -
Başarısız: Yalnızca önceki bir bağımlılık başarısız olduğunda çalıştırın. Bu koşulu uygulamak için belirtin
condition: failed().
Önemli
Aşama, iş veya adım için bir condition özellik belirttiğinizde, varsayılan koşulun üzerine yazarsınız. Derleme iptal edilse bile aşamanız, işiniz veya adımınız çalıştırılabilir. Koşullarınızın üst aşamanın veya işin durumunu hesaba katdığından emin olun.
Koşul örneği
Aşağıdaki YAML örneği ve always() koşullarını gösterirfailed(). İş 1'deki ilk betik görevinin bir always koşulu vardır, bu nedenle bağımlılıklar başarısız olsa veya derleme iptal edilse bile çalışır. İkinci betik görevinde exit job1 işin job1 başarısız olmasını zorlar.
İşlem hattı aşamaları varsayılan olarak sıralı olarak çalışır, ancak işler paralel olarak çalıştırılabilir. Aşamalar veya işler arasındaki bağımlılıkları açıkça tanımlamak için özelliğini kullanabilirsiniz dependsOn .
Başka bir işin sonucuna bağlı bir işin koşullarını ayarlamak için, bağımlılığı tanımlamak için kullanın dependsOn . Aşağıdaki örnekte, job2 başarısız olduğundan job1 ve çalıştırmalarına job1 bağlıdır.
jobs:
- job: job1
steps:
- script: echo Hello!
condition: always() # this step runs even if the build is canceled
- script: |
echo "This task will fail."
exit job1
- job: job2
dependsOn: job1
condition: failed() # this job runs only if job1 fails
Not
Üst aşama başarısız olduğunda bağımlı aşamaları el ile çalıştırmak için Azure Pipelines kullanıcı arabirimini de kullanabilirsiniz. Daha fazla bilgi için bkz. Üst aşama başarısız olduğunda alt aşamaları çalıştırma.
Özel koşullar
Yerleşik koşullar gereksinimlerinizi karşılamıyorsa YAML işlem hattı tanımlarında ifade olarak özel koşullar belirtebilirsiniz.
Aracı, ifadeyi en içteki işlevden başlayıp dışa doğru ilerleterek değerlendirir. Nihai sonuç, aşama, iş veya adımın çalıştırılıp çalıştırılmayacağını belirleyen boole değeridir. Söz diziminin tam kılavuzu için bkz . İfadeler.
Önemli
Koşullar, aşama, iş veya adım başlatılıp başlatılmayacağını belirlemek için değerlendirilir. Bu nedenle, bir aşama, iş veya adımın çalışma zamanı sırasında hesaplanan hiçbir şey aynı aşama, iş veya adım içinde kullanılamaz. Örneğin, söz dizimi içeren $[ ] bir çalışma zamanı ifadesi kullanarak bir işte değişken ayarlarsanız, bu iş içindeki koşullarda bu değişkeni kullanamazsınız.
Koşullardaki değişkenler
İşlem hattı değişkenlerini ayarlayabilir ve koşullarda kullanabilirsiniz. Aşağıdaki işlem hattı bir isMain değişken ayarlar ve bunu yalnızca derleme kaynak dalı mainolduğunda B Aşamasını çalıştıran bir koşulda kullanır.
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)
Bir değişken null veya boş bir dizeyse çalışacak bir koşul ayarlayabilirsiniz. Tüm değişkenler Azure Pipelines'da dize olarak değerlendirilir, bu nedenle boş bir dize aşağıdaki işlem hattına eşdeğerdir null :
variables:
- name: testEmpty
value: ''
jobs:
- job: A
steps:
- script: echo testEmpty is blank
condition: eq(variables.testEmpty, '')
Diğer iş koşullarında kullanılan iş çıktı değişkenleri
Bir işte, aynı aşamadaki diğer işlerin koşullarda belirtebileceği bir değişken oluşturabilirsiniz. Bağımlı işler için kullanılabilen değişkenler, aşağıdaki kodda olduğu gibi kullanılarak isOutput=true olarak işaretlenmelidir:
jobs:
- job: A
steps:
- bash: |
echo "This is job A."
echo "##vso[task.setvariable variable=doThing;isOutput=true]Yes" #set variable doThing to Yes
name: DetermineResult
- job: B
dependsOn: A
condition: eq(dependencies.A.outputs['DetermineResult.doThing'], 'Yes') #map doThing and check the value
steps:
- script: echo "Job A ran and doThing is Yes."
Sonraki adım koşullarında kullanılan adım değişkenleri
Aynı işte gelecekteki adımların koşullarda belirtebileceği bir adımda değişken oluşturabilirsiniz. Adımlardan oluşturulan değişkenler, işteki gelecekteki adımlarda varsayılan olarak kullanılabilir ve çok işli çıkış değişkenleri olarak işaretlenmesi gerekmez.
bir işteki bir adımda oluşturulan değişkenlerin sınırlamaları şunlardır:
- Kapsamı aynı işteki adımlarla belirlenmiş .
- Sonraki adımlarda yalnızca ortam değişkenleri olarak kullanılabilir.
- Bunları tanımlayan aynı adımda kullanılamaz.
Aşağıdaki örnek, bir adımda bir işlem hattı değişkeni oluşturur ve değişkeni sonraki bir adımın betik koşulunda kullanır.
steps:
# This step creates a new pipeline variable: doThing. This variable is available to subsequent steps.
- bash: |
echo "##vso[task.setvariable variable=doThing]Yes"
displayName: Step 1
# This step uses doThing in its condition
- script: |
# 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'))
Çeşitli sonuçlar için koşul ayarları
Aşağıdaki tabloda, istenen çeşitli sonuçların üretilmesine yönelik ayarlar gösterilmektedir condition .
| İstenen sonuç | Örnek koşul ayarı |
|---|---|
Üst veya önceki aşama, iş veya adım başarısız olsa veya iptal edilmiş olsa bile kaynak dal ise mainkomutunu çalıştırın. |
eq(variables['Build.SourceBranch'], 'refs/heads/main') |
Kaynak dal main ve üst dal veya önceki aşama, iş veya adım başarılıysa komutunu çalıştırın. |
and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main')) |
Kaynak dal değilse mainve üst veya önceki aşama, iş veya adım başarılıysa komutunu çalıştırın. |
and(succeeded(), ne(variables['Build.SourceBranch'], 'refs/heads/main')) |
Üst veya önceki aşama, iş veya adım başarılı olursa dallar için user komutunu çalıştırın. |
and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/heads/users/')) |
| Üst veya önceki aşama, iş veya adım başarılı olduysa sürekli tümleştirme (CI) derlemeleri için komutunu çalıştırın. | and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI')) |
| Derlemeyi bir çekme isteği tetiklediyse ve üst veya önceki aşama, iş veya adım başarısız olursa komutunu çalıştırın. | and(failed(), eq(variables['Build.Reason'], 'PullRequest')) |
| Üst veya önceki aşama, iş veya adım başarısız olsa veya iptal edilmiş olsa bile zamanlanmış bir derleme için çalıştırın. | eq(variables['Build.Reason'], 'Schedule') |
Üst veya önceki aşama, iş veya adım başarısız olsa veya iptal edilmiş olsa bile değişkeni olarak ayarlanmışsa System.debugtruekomutunu çalıştırın. |
eq(variables['System.debug'], true) |
Not
Release.Artifacts.{artifact-alias}.SourceBranch eşdeğeri, Build.SourceBranch olur.
Derleme iptal edildiğinde koşullara bağlı sonuçlar
Derlemeyi iptal etmek, tüm aşamalarının, işlerinin ve adımlarının çalışmayı durdurduğu anlamına gelmez. Hangi işlerin, aşamaların veya adımların çalışmayı durdurduğu belirttiğiniz koşullara ve işlem hattının yürütülmesinin hangi noktasında derlemeyi iptal ettiğinize bağlıdır. Aşama, iş veya adımın üst öğesi atlanırsa, aşama, iş veya adım koşulları ne olursa olsun çalışmaz.
Aşama, iş veya bir adımın koşulları true olarak değerlendirildiğinde çalışır. Bir koşul görevin üst öğesinin durumunu hesaba katımazsa, üst öğesi iptal edilse bile görev çalıştırılabilir. Derleme iptal edildiğinde işlerin, aşamaların veya adımların çalışıp çalışmayacağını denetlemek için, koşullarınıza bir iş durumu denetimi işlevi ekleyin.
Bir derlemeyi kuyruk aşamasındayken iptal ederseniz ancak henüz çalışmıyorsanız, diğer tüm aşamalar da dahil olmak üzere tüm çalıştırma iptal edilir.
Not
Koşullarınızdan herhangi biri, derleme iptal edildikten sonra bile görevlerin çalışmasını mümkün hale getirirse, iptal zaman aşımı için, çalıştırma iptal edildikten sonra görevlerin tamamlanması için yeterli süre sağlayan bir değer belirtin.
Örnek aşama koşulu sonuçları
Aşağıdaki örneklerde, derleme iptal edildiğinde aşamalar üzerinde ayarlanan çeşitli koşulların sonuçları gösterilmektedir.
Aşama örneği 1
Aşağıdaki işlem hattında, varsayılan olarak stage2 başarıyla tamamlanmasına stage1 bağlıdır. Ancak, stage2 durum ne olursa olsun condition kaynak dal her olduğunda çalışacak şekilde main ayarlanmıştırstage1.
Daldaki bir derlemeyi main kuyruğa alır ve çalışmakta olan stage1 iptal ederseniz, stage2 yine de çalışır çünkü eq(variables['Build.SourceBranch'], 'refs/heads/main')true olarak değerlendirilir.
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
Aşama örneği 2
Aşağıdaki işlem hattında, varsayılan olarak stage2 başarıyla tamamlanmasına stage1 bağlıdır. içindeki işinB, kaynak dal her olduğunda çalıştırılacak bir stage2 kümesi vardırcondition.main
Daldaki bir derlemeyi main kuyruğa alır ve çalışırken stage1 iptal stage2 ederseniz ve aşaması koşulu olarak değerlendirilen truebir iş içerse bile işleri hiç çalışmaz.
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
Aşama örneği 3
Aşağıdaki işlem hattında, varsayılan olarak stage2 başarıyla tamamlanmasına stage1 bağlıdır. içindeki işin Bstage2 içindeki adım, kaynak dal her olduğunda conditionçalıştırılacak bir main kümeye sahiptir.
Daldaki bir derlemeyi main kuyruğa alır ve çalışırken stage1 iptal stage2 ederseniz ve işB, koşulu olarak değerlendirilen Bbir adım içerse bile hiç true çalışmaz.
Stage2 tamamen atlandı çünkü stage1 iptal edildi.
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')
Örnek iş koşulu sonuçları
Aşağıdaki örneklerde, derleme iptal edildiğinde işlerde ayarlanan çeşitli koşulların sonuçları gösterilmektedir.
İş örneği 1
Aşağıdaki YAML işlem hattında çalıştırılan iş B , çalışan işe A bağlıdır. İş B ayrıca kaynak dal her olduğunda conditionçalıştırılacak bir main ayara sahiptir.
Eğer main dalında bir derleme kuyruğa alır ve A işi çalışırken iptal ederseniz, B işi yine de çalışır çünkü condition: eq(variables['Build.SourceBranch'], 'refs/heads/main')true olarak değerlendirilir.
jobs:
- job: A
steps:
- script: sleep 30
- job: B
dependsOn: A
condition: eq(variables['Build.SourceBranch'], 'refs/heads/main')
steps:
- script: echo step 2.1
İşin yalnızca iş B başarılı olduğunda A ve derleme kaynağı olduğunda mainçalışmasını istiyorsanız değerini olarak ayarlamanız conditionand(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))gerekir.
İş örneği 2
Aşağıdaki YAML işlem hattında iş, işin BA başarılı olduğuna bağlıdır. İş B başarılı olduğunda işin condition çalıştırılacak bir A kümesi vardır ve derleme kaynak dalı olurmain.
Daldaki bir derlemeyi main kuyruğa alır ve iş A çalışırken iptal ederseniz, olarak değerlendirilen Bbir condition derlemesi olsa bile iş true çalışmaz. İş başarılı olmadığından, işteki Bfalse koşul olarak değerlendirilirA. Bu nedenle, iş B ve adımları atlanır.
jobs:
- job: A
steps:
- script: sleep 30
- job: B
dependsOn: A
steps:
- script: echo step 2.1
condition: and(eq(variables['Build.SourceBranch'], 'refs/heads/main'), succeeded())
Örnek adım koşulu sonucu
Adımların koşullarını da ayarlayabilirsiniz. Aşağıdaki işlem hattında, kaynak dal condition olduğunda 2.3 adımını çalıştıracak bir main kümesi vardır.
Bir derlemeyi main dalına kuyruğa alırsanız ve adımlar 2.1 veya 2.2 çalışırken iptal ederseniz, adım 2.3 yine çalışır çünkü eq(variables['Build.SourceBranch'], 'refs/heads/main')true olarak değerlendirilir.
steps:
- script: echo step 2.1
- script: echo step 2.2; sleep 30
- script: echo step 2.3
condition: eq(variables['Build.SourceBranch'], 'refs/heads/main')
Koşullardaki parametreler
Parametreleri koşullarda kullanabilirsiniz. İşlem hattı çalışmadan önce parametre genişletme gerçekleşir ve ile çevrelenen ${{ }} değerleri değişmez parametre değerleriyle değiştirir. Parametre genişletme, koşul değerlendirmeden önce gerçekleştiğinden, bir işlem hattında parametre bildirebilir ve parametreyi bu işlem hattındaki herhangi bir koşula ekleyebilirsiniz.
condition Aşağıdaki örnekte iki işlevi birleştirir: succeeded() ve ${{ eq(parameters.doThing, true) }}. İşlev, succeeded() önceki adımın başarılı olup olmadığını denetler. Bu işlev, önceki bir adım yoksa da döndürür true .
İşlev, ${{ eq(parameters.doThing, true) }} parametresinin doThing değerine eşit trueolup olmadığını denetler. Aşağıdaki örnekteki betik adımı, önceki bir adım olmadığından ve parameters.doThing varsayılan olarak çalıştığından çalıştırılır true .
parameters:
- name: doThing
default: true
type: boolean
steps:
- script: echo I did a thing
condition: and(succeeded(), ${{ eq(parameters.doThing, true) }})
Koşullarda şablon parametreleri
İşlem hattı şablonuna parametre geçirdiğinizde, parametrenin değerini şablon dosyasında ayarlayabilir veya templateContext kullanarak parametreyi şablona geçirebilirsiniz.
Aşağıdaki parameters.yml şablon dosyası parametresini doThing varsayılan değeriyle true bildirir ve parametresini bir iş koşulunda kullanır.
# parameters.yml
parameters:
- name: doThing
default: true
type: boolean
jobs:
- job: B
steps:
- script: echo I did a thing
condition: ${{ eq(parameters.doThing, true) }}
Aşağıdaki azure-pipelines.yml işlem hattı tanımı , parameters.yml şablon dosyasındaki işe başvurur. İşlem hattının çıkışı, I did a thing parametrenin doThing varsayılan olarak true olmasıdır.
# azure-pipelines.yml
extends:
template: parameters.yml
Daha fazla şablon parametresi örneği için bkz . Şablon kullanımı başvurusu.
SSS
Önceki bir iş başarılı olursa ancak sorunlar varsa başka bir işi nasıl tetikleyebilirim?
Bir koşulda önceki işin sonucunu kullanabilirsiniz. Aşağıdaki YAML'de koşuleq(dependencies.A.result,'SucceededWithIssues'), iş başarılı olduktan sonra B sorunlarıyla A çalışacak şekilde ayarlar.
jobs:
- job: A
steps:
- script: echo Job A ran
- job: B
dependsOn: A
condition: eq(dependencies.A.result,'SucceededWithIssues') # targets the result of the previous job
steps:
- script: echo Job A had issues
Derlemem iptal edildikten sonra neden hala çalışıyor?
Bir aşamada yapılandırılan bir koşul iş durumu denetimi işlevi içermiyorsa bu sorunla karşılaşabilirsiniz. Sorunu çözmek için koşula bir iş durumu denetimi işlevi ekleyin. Daha fazla bilgi için bkz. Derleme iptal edildiğinde koşul sonuçları.