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.