Aracılığıyla paylaş


Aşamalar, bağımlılıklar ve koşullar 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. Uygulamayı oluşturma, testleri çalıştırma ve ön üretime dağıtma gibi yazılım geliştirme sürecinizdeki grup eylemlerini aşamalar. 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ıdependsOniçin anahtar sözcüğünü 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şamada en fazla 256 iş olabilir.

Aşamaları belirtme

En basit durumda, işlem hattınızda mantıksal sınırlara ihtiyacınız yoktur. Bu senaryolar için YAML dosyanızdaki işleri anahtar sözcüğü olmadan stages doğrudan belirtebilirsiniz. Örneğin, ayrı ortamlar veya dağıtım adımları gerektirmeden küçük bir uygulamayı derleyen ve test eden basit bir işlem hattınız varsa, aşamaları kullanmadan tüm işleri doğrudan tanımlayabilirsiniz.

pool:
  vmImage: 'ubuntu-latest'

jobs:
- job: BuildAndTest
  steps:
  - script: echo "Building the application"
  - script: echo "Running tests"

Bu işlem hattının bir örtük aşaması ve iki görevi vardır. Yalnızca stages bir aşama olduğundan anahtar sözcük kullanılmamaktadır.

jobs:
- job: Build
  steps:
  - bash: echo "Building"

- job: Test
  steps:
  - bash: echo "Testing"

İşlem hattınızı birden çok aşamada düzenlemek için anahtar sözcüğünü stages kullanın. Bu YAML, her aşamanın birden çok iş içerdiği ve her işin yürütülecek belirli adımlara sahip olduğu iki aşaması olan bir işlem hattı tanımlar.

stages:
- stage: A
  displayName: "Stage A - Build and Test"
  jobs:
  - job: A1
    displayName: "Job A1 - build"
    steps:
    - script: echo "Building the application in Job A1"
      displayName: "Build step"
  - job: A2
    displayName: "Job A2 - Test"
    steps:
    - script: echo "Running tests in Job A2"
      displayName: "Test step"

- stage: B
  displayName: "Stage B - Deploy"
  jobs:
  - job: B1
    displayName: "Job B1 - Deploy to Staging"
    steps:
    - script: echo "Deploying to staging in Job B1"
      displayName: "Staging deployment step"
  - job: B2
    displayName: "Job B2 - Deploy to Production"
    steps:
    - script: echo "Deploying to production in Job B2"
      displayName: "Production deployment step"

Aşama düzeyinde bir pool belirtirseniz, aşama iş düzeyinde belirtilmediği sürece bu aşamadaki tüm işler bu havuzu kullanır.

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

Bağımlılıkları belirtme

bir işlem hattında birden çok aşama tanımladığınızda, bunlar varsayılan olarak YAML dosyasında tanımladığınız sırada 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.

Aşamaları tanımlama hakkında daha fazla bilgi için bkz. YAML şemasındaki aşamalar.

Aşağıdaki örnek aşamalar sıralı olarak çalıştırılır. Anahtar dependsOn sözcük kullanmazsanız, aşamalar tanımlanma sırasıyla çalışır.

stages:
- stage: Build
  displayName: "Build Stage"
  jobs:
  - job: BuildJob
    steps:
    - script: echo "Building the application"
      displayName: "Build Step"

- stage: Test
  displayName: "Test Stage"
  jobs:
  - job: TestJob
    steps:
    - script: echo "Running tests"
      displayName: "Test Step"

Paralel çalışan örnek aşamalar:

stages:
- stage: FunctionalTest
  displayName: "Functional Test Stage"
  jobs:
  - job: FunctionalTestJob
    steps:
    - script: echo "Running functional tests"
      displayName: "Run Functional Tests"

- stage: AcceptanceTest
  displayName: "Acceptance Test Stage"
  dependsOn: [] # Runs in parallel with FunctionalTest
  jobs:
  - job: AcceptanceTestJob
    steps:
    - script: echo "Running acceptance tests"
      displayName: "Run Acceptance Tests"

Fan-out ve fan-in davranışı örneği:

stages:
- stage: Test

- stage: DeployUS1
  dependsOn: Test    #  stage runs after Test

- stage: DeployUS2
  dependsOn: Test    # stage runs in parallel with DeployUS1, after Test

- stage: DeployEurope
  dependsOn:         # stage runs after DeployUS1 and DeployUS2
  - DeployUS1
  - DeployUS2

Koşulları tanımlama

Her aşamanın hangi ifadelerle çalıştırılacağını belirleyen 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 devam eder.

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.

Bir önceki aşamanın çalıştırılma durumu temel alınarak bir aşamayı ç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.

El ile tetikleyici ekleme

El ile tetiklenen YAML işlem hattı aşamaları, tamamına kadar çalıştırmak zorunda kalmadan entegre 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 trigger: manual özelliğini bir aşamaya ekleyin.

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ı atlanamaz olarak işaretle

İş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. Eğer bu aşama için isSkippable: false ayarlarsanız, işlem hattınız kötü amaçlı yazılım algılamayı atlayamayacaktır.

Aşağıdaki örnekte, Kötü amaçlı yazılım algılama aşaması, atlanmaz olarak işaretlenir, yani işlem hattı çalıştırmasının bir parçası olarak mutlaka yürütülmesi gerekir.

- stage: malware_detection
  displayName: Malware detection
  isSkippable: false
  jobs:
  - job: check_job
    ...

Aşama atlanamaz olduğunda, Çalıştırılacak aşamalar yapılandırma 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ü.