Bagikan melalui


Menambahkan tahapan, dependensi, & kondisi

Layanan Azure DevOps | Azure DevOps Server 2022 - Azure DevOps Server 2019

Tahap adalah batas logis dalam alur Azure DevOps. Tahapan dapat digunakan untuk mengelompokkan tindakan dalam proses pengembangan perangkat lunak Anda (misalnya, membangun aplikasi, menjalankan pengujian, menyebarkan ke praproduksi). Setiap tahap berisi satu atau beberapa pekerjaan.

Saat Anda menentukan beberapa tahap dalam alur, secara default, mereka menjalankan satu demi satu. Tahapan juga dapat bergantung satu sama lain. Anda dapat menggunakan dependsOn kata kunci untuk menentukan dependensi. Tahapan juga dapat berjalan berdasarkan hasil tahap sebelumnya dengan kondisi.

Untuk mempelajari cara kerja tahapan dengan pekerjaan dan lisensi paralel, lihat Mengonfigurasi dan membayar pekerjaan paralel.

Untuk mengetahui bagaimana tahapan terkait dengan bagian lain dari alur seperti pekerjaan, lihat Konsep alur utama.

Anda juga dapat mempelajari selengkapnya tentang bagaimana tahapan terkait dengan bagian alur dalam artikel tahapan skema YAML.

Anda dapat mengatur pekerjaan alur menjadi beberapa tahapan. Tahapan adalah divisi utama dalam alur: membangun aplikasi ini, menjalankan pengujian ini, dan menyebarkan ke praproduksi adalah contoh tahap yang baik. Ini adalah batas logis di alur Anda di mana Anda dapat menjeda alur dan melakukan berbagai pemeriksaan.

Setiap alur memiliki setidaknya satu tahap bahkan jika Anda tidak secara eksplisit mendefinisikannya. Anda juga dapat mengatur tahapan ke dalam grafik dependensi sehingga satu tahap berjalan di depan tahap lain. Ada batas 256 pekerjaan untuk satu tahap.

Catatan

Dukungan untuk tahap ditambahkan di Azure DevOps Server 2019.1.

Tentukan tahapan

Catatan

Dukungan untuk tahap ditambahkan di Azure DevOps Server 2019.1.

Dalam kasus paling sederhana, Anda tidak memerlukan batas logis apa pun di alur Anda. Dalam hal ini, Anda tidak perlu secara eksplisit menggunakan stage kata kunci. Anda dapat langsung menentukan pekerjaan dalam file YAML Anda.

# 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"

Jika Anda mengatur alur Anda ke dalam beberapa tahap, Anda menggunakan stages kata kunci.

stages:
- stage: A
  jobs:
  - job: A1
  - job: A2

- stage: B
  jobs:
  - job: B1
  - job: B2

Jika Anda memilih untuk menentukan pool pada tingkat tahap, maka semua pekerjaan yang ditentukan dalam tahap tersebut menggunakan kumpulan tersebut kecuali ditentukan pada tingkat pekerjaan.

Catatan

Di Azure DevOps Server 2019, kumpulan hanya dapat ditentukan pada tingkat pekerjaan.

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

Sintaks lengkap untuk menentukan tahap adalah:

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]

Tentukan dependensi

Catatan

Dukungan untuk tahap ditambahkan di Azure DevOps Server 2019.1.

Saat Anda menentukan beberapa tahap dalam alur, secara default, mereka berjalan secara berurutan dalam urutan di mana Anda menentukannya dalam file YAML. Pengecualian untuk ini adalah ketika Anda menambahkan dependensi. Dengan dependensi, tahapan berjalan sesuai urutan dependsOn persyaratan.

Alur harus berisi setidaknya satu tahap tanpa dependensi.

Sintaks untuk menentukan beberapa tahap dan dependensinya adalah:

stages:
- stage: string
  dependsOn: string
  condition: string

Contoh tahapan yang berjalan secara berurutan:

# 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:
    ...

Contoh tahapan yang berjalan secara paralel:

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:
    ...

Contoh fan-out dan fan-in:

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

Tentukan kondisi

Anda dapat menentukan kondisi di mana setiap tahap berjalan dengan ekspresi. Secara default, tahap berjalan jika tidak bergantung pada tahap lain, atau jika semua tahapan yang bergantung pada telah selesai dan berhasil. Anda dapat menyesuaikan perilaku ini dengan memaksa tahap untuk dijalankan meskipun tahap sebelumnya gagal atau dengan menentukan kondisi kustom.

Jika Anda menyesuaikan kondisi default langkah-langkah sebelumnya untuk suatu tahap, Anda menghapus kondisi untuk penyelesaian dan keberhasilan. Jadi, jika Anda menggunakan kondisi kustom, biasanya digunakan and(succeeded(),custom_condition) untuk memeriksa apakah tahap sebelumnya berhasil dijalankan. Jika tidak, tahap berjalan terlepas dari hasil tahap sebelumnya.

Catatan

Kondisi untuk gagal ('JOBNAME/STAGENAME') dan berhasil ('JOBNAME/STAGENAME') seperti yang ditunjukkan dalam contoh berikut hanya berfungsi untuk alur YAML.

Catatan

Dukungan untuk tahap ditambahkan di Azure DevOps Server 2019.1.

Contoh untuk menjalankan tahap berdasarkan status menjalankan tahap sebelumnya:

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

Contoh penggunaan kondisi kustom:

stages:
- stage: A

- stage: B
  condition: and(succeeded(), eq(variables['build.sourceBranch'], 'refs/heads/main'))

Tentukan kebijakan antrean

Alur YAML tidak mendukung kebijakan antrean. Setiap eksekusi alur independen dari dan tidak menyadari eksekusi lain. Dengan kata lain, dua penerapan berturut-turut Anda dapat memicu dua alur, dan keduanya akan menjalankan urutan tahap yang sama tanpa menunggu satu sama lain. Meskipun kami bekerja untuk membawa kebijakan antrean ke alur YAML, kami sarankan Anda menggunakan persetujuan manual untuk mengurutkan dan mengontrol urutan eksekusi secara manual jika ini penting.

Tentukan persetujuan

Anda dapat mengontrol secara manual kapan tahap harus berjalan menggunakan pemeriksaan persetujuan. Ini biasanya digunakan untuk mengontrol penyebaran ke lingkungan produksi. Pemeriksaan adalah mekanisme yang tersedia bagi pemilik sumber daya untuk mengontrol apakah dan kapan tahap dalam alur dapat menggunakan sumber daya. Sebagai pemilik sumber daya, seperti lingkungan, Anda dapat menentukan pemeriksaan yang harus dipenuhi sebelum tahap menggunakan sumber daya tersebut dapat dimulai.

Saat ini, pemeriksaan persetujuan manual didukung pada lingkungan. Untuk informasi selengkapnya, lihat Persetujuan.

Persetujuan belum didukung di alur YAML dalam versi Azure DevOps Server ini.

Menambahkan pemicu manual

Tahapan alur YAML yang dipicu secara manual memungkinkan Anda memiliki alur terpadu tanpa selalu menjalankannya hingga selesai.

Misalnya, alur Anda mungkin mencakup tahapan untuk membangun, menguji, menyebarkan ke lingkungan penahapan, dan menyebarkan ke produksi. Anda mungkin ingin semua tahap berjalan secara otomatis kecuali untuk penyebaran produksi, yang lebih Anda pilih untuk dipicu secara manual saat siap.

Untuk menggunakan fitur ini, tambahkan properti ke trigger: manual tahap.

Dalam contoh berikut, tahap pengembangan berjalan secara otomatis, sementara tahap produksi memerlukan pemicu manual. Kedua tahap menjalankan skrip output hello world.

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'

Menandai panggung sebagai tidak dapat dihentikan

Tandai tahap sebagai isSkippable: false untuk mencegah pengguna alur melewati tahapan. Misalnya, Anda mungkin memiliki templat YAML yang menyuntikkan tahap yang melakukan deteksi malware di semua alur. Jika Anda mengatur isSkippable: false untuk tahap ini, Alur tidak akan dapat melewati deteksi malware.

Dalam contoh berikut, tahap deteksi Malware ditandai sebagai tidak dapat dilewati, yang berarti harus dijalankan sebagai bagian dari eksekusi alur.

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

Ketika tahap tidak dapat dilewati, tahapan akan ditampilkan dengan kotak centang yang dinonaktifkan di tahapan untuk menjalankan panel konfigurasi.

Cuplikan layar tahapan yang akan dijalankan dengan tahap yang dinonaktifkan.