Aşama, bağımlılık ve koşul ekleme
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Aşama, Azure DevOps işlem hattındaki mantıksal bir sınırdır. Aşamalar, yazılım geliştirme sürecinizdeki eylemleri gruplandırmak için kullanılabilir (örneğin, uygulamayı derleme, testleri çalıştırma, ön üretime dağıtma). Her aşama bir veya daha fazla iş içerir.
bir işlem hattında birden çok aşama tanımladığınızda, bunlar varsayılan olarak birbirinin ardından çalışır. Aşamalar da birbirine bağlı olabilir. Bağımlılıkları tanımlamak için anahtar sözcüğünü dependsOn
kullanabilirsiniz. Aşamalar, koşullarla birlikte önceki bir aşamanın sonucuna göre de çalıştırılabilir.
Aşamaların paralel işler ve lisanslama ile nasıl çalıştığını öğrenmek için bkz . Paralel işleri yapılandırma ve ödeme.
Aşamaların işler gibi işlem hattının diğer bölümleriyle ilişkisini öğrenmek için bkz . Anahtar işlem hatları kavramları.
Ayrıca YAML şema aşamaları makalesinde aşamaların işlem hattının bölümleriyle nasıl ilişkili olduğu hakkında daha fazla bilgi edinebilirsiniz.
İşlem hattı işlerini aşamalar halinde düzenleyebilirsiniz. Aşamalar, işlem hattındaki başlıca bölümlerdir: bu uygulamayı derleme, bu testleri çalıştırma ve ön üretime dağıtma, aşamalara iyi örneklerdir. Bunlar, işlem hattınızı duraklatabileceğiniz ve çeşitli denetimler gerçekleştirebileceğiniz işlem hattınızdaki mantıksal sınırlardır.
Açıkça tanımlamasanız bile her işlem hattının en az bir aşaması vardır. Ayrıca aşamaları bir bağımlılık grafiğine yerleştirerek bir aşamanın başka bir aşamadan önce çalıştırılmasını sağlayabilirsiniz. Bir aşama için 256 iş sınırı vardır.
Not
Azure DevOps Server 2019.1'de aşamalar için destek eklendi.
Aşamaları belirtme
Not
Azure DevOps Server 2019.1'de aşamalar için destek eklendi.
En basit durumda, işlem hattınızda herhangi bir mantıksal sınıra ihtiyacınız yoktur. Bu durumda, anahtar sözcüğünü stage
açıkça kullanmanız gerekmez. YAML dosyanızdaki işleri doğrudan belirtebilirsiniz.
# this has one implicit stage and one implicit job
pool:
vmImage: 'ubuntu-latest'
steps:
- bash: echo "Hello world"
# this pipeline has one implicit stage
jobs:
- job: A
steps:
- bash: echo "A"
- job: B
steps:
- bash: echo "B"
İşlem hattınızı birden çok aşamada düzenlerseniz anahtar sözcüğünü stages
kullanırsınız.
stages:
- stage: A
jobs:
- job: A1
- job: A2
- stage: B
jobs:
- job: B1
- job: B2
Aşama düzeyinde bir pool
belirtmeyi seçerseniz, bu aşamada tanımlanan tüm işler iş düzeyinde belirtilmedikçe bu havuzu kullanır.
Not
Azure DevOps Server 2019'da havuzlar yalnızca iş düzeyinde belirtilebilir.
stages:
- stage: A
pool: StageAPool
jobs:
- job: A1 # will run on "StageAPool" pool based on the pool defined on the stage
- job: A2 # will run on "JobPool" pool
pool: JobPool
Aşama belirtmek için tam söz dizimi şöyledir:
stages:
- stage: string # name of the stage, A-Z, a-z, 0-9, and underscore
displayName: string # friendly name to display in the UI
dependsOn: string | [ string ]
condition: string
pool: string | pool
variables: { string: string } | [ variable | variableReference ]
jobs: [ job | templateReference]
Bağımlılıkları belirtme
Not
Azure DevOps Server 2019.1'de aşamalar için destek eklendi.
Bir işlem hattında birden çok aşama tanımladığınızda, varsayılan olarak bunlar YAML dosyasında tanımladığınız sırayla sıralı olarak çalışır. Bunun istisnası, bağımlılıkları eklemenizdir. Bağımlılıklarla, aşamalar gereksinimlerin sırasına dependsOn
göre çalıştırılır.
İşlem hatları bağımlılık içermeyen en az bir aşama içermelidir.
Birden çok aşamayı ve bunların bağımlılıklarını tanımlamak için söz dizimi şöyledir:
stages:
- stage: string
dependsOn: string
condition: string
Sıralı olarak çalışan örnek aşamalar:
# if you do not use a dependsOn keyword, stages run in the order they are defined
stages:
- stage: QA
jobs:
- job:
...
- stage: Prod
jobs:
- job:
...
Paralel çalışan örnek aşamalar:
stages:
- stage: FunctionalTest
jobs:
- job:
...
- stage: AcceptanceTest
dependsOn: [] # this removes the implicit dependency on previous stage and causes this to run in parallel
jobs:
- job:
...
Fan-out ve fan-in örneği:
stages:
- stage: Test
- stage: DeployUS1
dependsOn: Test # this stage runs after Test
- stage: DeployUS2
dependsOn: Test # this stage runs in parallel with DeployUS1, after Test
- stage: DeployEurope
dependsOn: # this stage runs after DeployUS1 and DeployUS2
- DeployUS1
- DeployUS2
Koşulları tanımlama
Her aşamanın ifadelerle çalıştırıldığı koşulları belirtebilirsiniz. Varsayılan olarak, bir aşama başka bir aşamaya bağımlı değilse veya bağımlı olduğu tüm aşamalar tamamlanmış ve başarılıysa çalışır. Önceki bir aşama başarısız olsa bile bir aşamayı çalıştırmaya zorlayarak veya özel bir koşul belirterek bu davranışı özelleştirebilirsiniz.
Bir aşama için önceki adımların varsayılan koşulunu özelleştirirseniz, tamamlanma ve başarı koşullarını kaldırırsınız. Bu nedenle, özel bir koşul kullanıyorsanız, önceki aşamanın başarıyla çalıştırılıp çalıştırılmadığını denetlemek için yaygın olarak kullanılır and(succeeded(),custom_condition)
. Aksi takdirde, önceki aşamanın sonucu ne olursa olsun aşama çalışır.
Not
Aşağıdaki örnekte gösterildiği gibi başarısız ('JOBNAME/STAGENAME') ve başarılı ('JOBNAME/STAGENAME') koşulları yalnızca YAML işlem hatlarında çalışır.
Not
Azure DevOps Server 2019.1'de aşamalar için destek eklendi.
Önceki aşamayı çalıştırma durumuna göre bir aşama çalıştırma örneği:
stages:
- stage: A
# stage B runs if A fails
- stage: B
condition: failed()
# stage C runs if B succeeds
- stage: C
dependsOn:
- A
- B
condition: succeeded('B')
stages:
- stage: A
- stage: B
condition: and(succeeded(), eq(variables['build.sourceBranch'], 'refs/heads/main'))
Kuyruğa alma ilkelerini belirtme
YAML işlem hatları kuyruğa alma ilkelerini desteklemez. İşlem hattının her çalıştırması, diğer çalıştırmalardan bağımsızdır ve bunların farkında değildir. Başka bir deyişle, birbirini izleyen iki işlemeniz iki işlem hattını tetikleyebilir ve her ikisi de birbirini beklemeden aynı aşama dizisini yürütür. Kuyruğa alma ilkelerini YAML işlem hatlarına getirmek için çalışırken, bu önemliyse yürütme sırasını el ile sıralamak ve denetlemek için el ile onaylar kullanmanızı öneririz.
Onayları belirtme
Onay denetimlerini kullanarak bir aşamanın ne zaman çalıştırılması gerektiğini el ile denetleyebilirsiniz. Bu genellikle üretim ortamlarına yapılan dağıtımları denetlemek için kullanılır. Denetimler, işlem hattındaki bir aşamanın kaynağı ne zaman ve ne zaman kullanabileceğini denetlemek için kaynak sahibi tarafından kullanılabilen bir mekanizmadır. Ortam gibi bir kaynağın sahibi olarak, kaynağı kullanan bir aşamanın başlayabilmesi için önce karşılanması gereken denetimler tanımlayabilirsiniz.
Şu anda ortamlarda el ile onay denetimleri desteklenmektedir. Daha fazla bilgi için bkz . Onaylar.
Onaylar henüz Azure DevOps Server'ın bu sürümündeki YAML işlem hatlarında desteklenmemektedir.
El ile tetikleyici ekleme
El ile tetiklenen YAML işlem hattı aşamaları, her zaman tamamlanmak üzere çalıştırmadan birleşik bir işlem hattına sahip olmanıza olanak tanır.
Örneğin işlem hattınız oluşturma, test etme, hazırlama ortamına dağıtma ve üretime dağıtma aşamalarını içerebilir. Hazır olduğunuzda el ile tetiklemesini tercih ettiğiniz üretim dağıtımı dışında tüm aşamaların otomatik olarak çalıştırılmasını isteyebilirsiniz.
Bu özelliği kullanmak için özelliğini bir aşamaya ekleyin trigger: manual
.
Aşağıdaki örnekte, üretim aşaması el ile tetikleme gerektirirken geliştirme aşaması otomatik olarak çalıştırılır. Her iki aşamada da hello world çıkış betiği çalıştırılır.
stages:
- stage: development
displayName: Deploy to development
jobs:
- job: DeployJob
steps:
- script: echo 'hello, world'
displayName: 'Run script'
- stage: production
displayName: Deploy to production
trigger: manual
jobs:
- job: DeployJob
steps:
- script: echo 'hello, world'
displayName: 'Run script'
Bir aşamayı uyumsuz olarak işaretleme
İşlem hattı kullanıcılarının aşamaları atlamasını önlemek için bir aşamayı olarak isSkippable: false
işaretleyin. Örneğin, tüm işlem hatlarında kötü amaçlı yazılım algılaması gerçekleştiren bir aşama ekleyen bir YAML şablonunuz olabilir. Bu aşama için ayarlarsanız isSkippable: false
İşlem Hattı kötü amaçlı yazılım algılamayı atlayamaz.
Aşağıdaki örnekte, Kötü amaçlı yazılım algılama aşaması atlanamaz olarak işaretlenir, yani işlem hattı çalıştırmasının bir parçası olarak yürütülmesi gerekir.
- stage: malware_detection
displayName: Malware detection
isSkippable: false
jobs:
- job: check_job
...
Aşama atlanamaz olduğunda, yapılandırmayı çalıştırma aşamaları panelinde devre dışı bırakılmış bir onay kutusuyla gösterilir.