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')

Özel koşul kullanma örneği:

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.

Devre dışı bırakılan aşamalarla çalıştırılacak aşamaların ekran görüntüsü.