Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Layanan Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022
Tahap adalah batas logis dalam alur Azure DevOps. Tahapan tindakan grup dalam proses pengembangan perangkat lunak Anda, seperti membangun aplikasi, menjalankan pengujian, dan menyebarkan ke praproduksi. Setiap tahap berisi satu atau beberapa pekerjaan.
Saat Anda menentukan beberapa tahap dalam alur, secara otomatis, mereka dijalankan satu demi satu. Tahapan juga dapat bergantung satu sama lain. Anda dapat menggunakan dependsOn kata kunci untuk menentukan dependensi. Tahap-tahap 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 di alur kerja menjadi tahap-tahap. Tahap adalah pembagian utama dalam alur kerja: membangun aplikasi ini, menjalankan tes ini, dan menyebarkannya ke praproduksi adalah contoh yang baik dari tahap. 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. Panggung dapat memiliki hingga 256 pekerjaan.
Tentukan tahapan
Dalam kasus paling sederhana, Anda tidak memerlukan batas logis di alur Anda. Untuk skenario tersebut, Anda dapat langsung menentukan pekerjaan dalam file YAML Anda tanpa stages kata kunci. Misalnya, jika Anda memiliki alur sederhana yang membangun dan menguji aplikasi kecil tanpa memerlukan lingkungan atau langkah penyebaran terpisah, Anda dapat menentukan semua pekerjaan secara langsung tanpa menggunakan tahapan.
pool:
vmImage: 'ubuntu-latest'
jobs:
- job: BuildAndTest
steps:
- script: echo "Building the application"
- script: echo "Running tests"
Alur ini memiliki satu tahap implisit dan dua pekerjaan. Kata stages kunci tidak digunakan karena hanya ada satu tahap.
jobs:
- job: Build
steps:
- bash: echo "Building"
- job: Test
steps:
- bash: echo "Testing"
Untuk menata alur Anda ke dalam beberapa tahap, gunakan stages kata kunci. YAML ini mendefinisikan alur dengan dua tahap di mana setiap tahap berisi beberapa pekerjaan, dan setiap pekerjaan memiliki langkah-langkah khusus untuk dijalankan.
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"
Jika Anda menentukan pool pada tingkat tahap, semua pekerjaan dalam tahap tersebut menggunakan kumpulan tersebut kecuali tahap 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
Tentukan dependensi
Saat Anda menentukan beberapa tahap dalam alur, tahap tersebut berjalan secara berurutan secara default dalam urutan yang Anda tentukan dalam file YAML. Pengecualian untuk ini adalah ketika Anda menambahkan dependensi. Berdasarkan dependensi, tahapan berjalan sesuai urutan dependsOn persyaratan.
Alur harus berisi setidaknya satu tahap tanpa dependensi.
Untuk informasi selengkapnya tentang cara menentukan tahapan, lihat tahapan dalam skema YAML.
Contoh tahap berikut berjalan secara berurutan. Jika Anda tidak menggunakan dependsOn kata kunci, tahapan berjalan dalam urutan yang ditentukan.
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"
Contoh tahapan yang berjalan secara paralel:
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"
Contoh perilaku fan-out dan fan-in:
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
Tentukan kondisi
Anda dapat menentukan kondisi di mana setiap tahap berjalan dengan ekspresi. Secara bawaan, tahap berjalan jika tidak bergantung pada tahap lain, atau jika semua tahap yang bergantung padanya 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 ini tetap berjalan terlepas dari hasil tahap sebelumnya.
Catatan
Kondisi untuk gagal ('JOBNAME/STAGENAME') dan berhasil ('JOBNAME/STAGENAME') seperti yang ditunjukkan dalam contohnya hanya berfungsi untuk pipeline YAML.
Contoh menjalankan tahap berdasarkan status 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 khusus:
stages:
- stage: A
- stage: B
condition: and(succeeded(), eq(variables['build.sourceBranch'], 'refs/heads/main'))
Tentukan kebijakan antrean
Pipeline YAML tidak mendukung kebijakan antrean. Setiap eksekusi pada alur kerja berdiri sendiri dan tidak dipengaruhi oleh eksekusi lainnya. Dengan kata lain, dua commit berturut-turut Anda mungkin memicu dua pipeline, dan keduanya akan menjalankan urutan tahap yang sama persis tanpa saling menunggu. Meskipun kami bekerja untuk membawa kebijakan antrian ke alur YAML, kami sarankan Anda menggunakan persetujuan manual untuk mengurutkan dan mengontrol eksekusi secara manual jika ini penting.
Spesifikasikan 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 secara manual didukung di lingkungan. Untuk informasi selengkapnya, lihat Persetujuan.
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 otomatis, kecuali penyebaran produksi yang ingin Anda picu secara manual saat sudah siap.
Untuk menggunakan fitur ini, tambahkan properti trigger: manual ke suatu tahap.
Dalam contoh berikut, tahap pengembangan berjalan secara otomatis, sementara tahap produksi memerlukan pemicu manual. Kedua tahap menjalankan skrip yang menghasilkan 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 tahapan sebagai tidak dapat dilewati
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 Anda tidak akan dapat melewati deteksi malware.
Dalam contoh berikut, tahap deteksi malware ditandai sebagai tidak dapat dilewati, yang berarti harus dijalankan sebagai bagian dari menjalankan alur.
- stage: malware_detection
displayName: Malware detection
isSkippable: false
jobs:
- job: check_job
...
Ketika tahap tidak dapat dilewati, tahap tersebut akan ditampilkan dengan kotak centang yang dinonaktifkan di panel konfigurasi Tahap yang dijalankan.