Eksekusi alur
Layanan Azure DevOps | Azure DevOps Server 2022 - Azure DevOps Server 2019
Artikel ini menjelaskan urutan aktivitas dalam eksekusi alur Azure Pipelines. Eksekusi mewakili satu eksekusi alur. Baik alur integrasi berkelanjutan (CI) dan pengiriman berkelanjutan (CD) terdiri dari eksekusi. Selama eksekusi, Azure Pipelines memproses alur, dan agen memproses satu atau beberapa pekerjaan, langkah, dan tugas.
Untuk setiap eksekusi, Azure Pipelines:
- Memproses alur.
- Meminta satu atau beberapa agen untuk menjalankan pekerjaan.
- Serahkan pekerjaan kepada agen dan kumpulkan hasilnya.
Untuk setiap pekerjaan, agen:
- Bersiap untuk pekerjaan.
- Menjalankan setiap langkah dalam pekerjaan.
- Melaporkan hasil.
Pekerjaan mungkin berhasil, gagal, dibatalkan, atau tidak selesai. Memahami hasil ini dapat membantu Anda memecahkan masalah.
Bagian berikut menjelaskan proses eksekusi alur secara rinci.
Pemrosesan alur
Untuk memproses alur untuk dijalankan, Azure Pipelines terlebih dahulu:
- Memperluas templat dan mengevaluasi ekspresi templat.
- Mengevaluasi dependensi pada tingkat tahap untuk memilih tahap pertama yang akan dijalankan.
Untuk setiap tahap yang dipilih untuk dijalankan, Azure Pipelines:
- Mengumpulkan dan memvalidasi semua sumber daya pekerjaan agar otorisasi dapat dijalankan.
- Mengevaluasi dependensi di tingkat pekerjaan untuk memilih pekerjaan pertama yang akan dijalankan.
Azure Pipelines melakukan aktivitas berikut untuk setiap pekerjaan yang dipilihnya untuk dijalankan:
- Memperluas YAML
strategy: matrix
ataustrategy: parallel
multi-konfigurasi ke dalam beberapa pekerjaan runtime. - Mengevaluasi kondisi untuk memutuskan apakah pekerjaan memenuhi syarat untuk dijalankan.
- Meminta agen untuk setiap pekerjaan yang memenuhi syarat.
Setelah pekerjaan runtime selesai, Azure Pipelines memeriksa apakah ada pekerjaan baru yang memenuhi syarat untuk dijalankan. Demikian pula, saat tahapan selesai, Azure Pipelines memeriksa apakah ada tahapan lagi.
Variabel
Memahami urutan pemrosesan mengklarifikasi mengapa Anda tidak dapat menggunakan variabel tertentu dalam parameter templat. Langkah ekspansi templat pertama hanya beroperasi pada teks file YAML. Variabel runtime belum ada selama langkah tersebut. Setelah langkah itu, parameter templat sudah diselesaikan.
Anda juga tidak dapat menggunakan variabel untuk mengatasi koneksi layanan atau nama lingkungan, karena alur mengotorisasi sumber daya sebelum tahap dapat mulai berjalan. Variabel tingkat tahap dan pekerjaan belum tersedia. Grup variabel adalah sumber daya yang tunduk pada otorisasi, sehingga data mereka tidak tersedia saat memeriksa otorisasi sumber daya.
Anda dapat menggunakan variabel tingkat alur yang secara eksplisit disertakan dalam definisi sumber daya alur. Untuk informasi selengkapnya, lihat Metadata sumber daya alur sebagai variabel yang telah ditentukan sebelumnya.
Agen
Saat Azure Pipelines perlu menjalankan pekerjaan, Azure Pipelines meminta agen dari kumpulan. Proses ini bekerja secara berbeda untuk kumpulan agen yang dihosting Microsoft dan dihost sendiri.
Catatan
Pekerjaan server tidak menggunakan kumpulan karena berjalan di server Azure Pipelines itu sendiri.
Pekerjaan paralel
Pertama, Azure Pipelines memeriksa pekerjaan paralel organisasi Anda. Layanan ini menambahkan semua pekerjaan yang sedang berjalan di semua agen dan membandingkannya dengan jumlah pekerjaan paralel yang diberikan atau dibeli.
Jika tidak ada slot paralel yang tersedia, pekerjaan harus menunggu di slot untuk membebaskan. Setelah slot paralel tersedia, pekerjaan akan dirutekan ke jenis agen yang sesuai.
Agen yang dihosting Microsoft
Secara konseptual, kumpulan yang dihosting Microsoft adalah satu kumpulan mesin global, meskipun secara fisik banyak kumpulan yang berbeda dibagi berdasarkan jenis geografi dan sistem operasi. Berdasarkan nama kumpulan editor YAML vmImage
atau Klasik yang diminta, Azure Pipelines memilih agen.
Semua agen di kumpulan Microsoft adalah komputer virtual (VM) baru segar yang belum pernah menjalankan alur apa pun. Ketika pekerjaan selesai, agen VM dibuang.
Agen yang di-hosting secara mandiri
Setelah slot paralel tersedia, Azure Pipelines memeriksa kumpulan yang dihost sendiri untuk agen yang kompatibel. Agen yang dihost sendiri menawarkan kemampuan, yang menunjukkan bahwa perangkat lunak tertentu diinstal atau pengaturan dikonfigurasi. Alur memiliki tuntutan, yang merupakan kemampuan yang diperlukan untuk menjalankan pekerjaan.
Jika Azure Pipelines tidak dapat menemukan agen gratis yang kemampuannya sesuai dengan tuntutan alur, pekerjaan akan terus menunggu. Jika tidak ada agen di kumpulan yang kemampuannya sesuai dengan tuntutan, pekerjaan gagal.
Agen yang dihost sendiri biasanya digunakan kembali dari eksekusi untuk dijalankan. Untuk agen yang dihost sendiri, pekerjaan alur dapat memiliki efek samping, seperti menghangatkan cache atau memiliki sebagian besar penerapan yang sudah tersedia di repositori lokal.
Persiapan pekerjaan
Setelah agen menerima pekerjaan, agen melakukan pekerjaan persiapan berikut:
- Mengunduh semua tugas yang diperlukan untuk menjalankan pekerjaan dan menyimpannya untuk digunakan di masa mendatang.
- Membuat ruang kerja pada disk untuk menahan kode sumber, artefak, dan output yang digunakan dalam proses.
Eksekusi langkah
Agen menjalankan langkah-langkah secara berurutan secara berurutan. Sebelum langkah dapat dimulai, semua langkah sebelumnya harus diselesaikan atau dilewati.
Langkah-langkah diimplementasikan oleh tugas, yang dapat Node.js, PowerShell, atau skrip lainnya. Sistem tugas merutekan input dan output ke skrip cadangan. Tugas juga menyediakan layanan umum seperti mengubah jalur sistem dan membuat variabel alur baru.
Setiap langkah berjalan dalam prosesnya sendiri, mengisolasi lingkungannya dari langkah-langkah sebelumnya. Karena model proses per langkah ini, variabel lingkungan tidak dipertahankan di antara langkah-langkah. Namun, tugas dan skrip dapat menggunakan mekanisme yang disebut perintah pengelogan untuk berkomunikasi kembali ke agen. Ketika tugas atau skrip menulis perintah pengelogan ke output standar, agen mengambil tindakan apa pun yang diminta perintah.
Anda dapat menggunakan perintah pengelogan untuk membuat variabel alur baru. Variabel alur secara otomatis dikonversi menjadi variabel lingkungan di langkah berikutnya. Skrip dapat mengatur variabel myVar
baru dengan nilai myValue
sebagai berikut:
echo '##vso[task.setVariable variable=myVar]myValue'
Write-Host "##vso[task.setVariable variable=myVar]myValue"
Pelaporan dan pengumpulan hasil
Setiap langkah dapat melaporkan peringatan, kesalahan, dan kegagalan. Langkah melaporkan kesalahan dan peringatan pada halaman ringkasan alur dengan menandai tugas sebagai berhasil dengan masalah, atau melaporkan kegagalan dengan menandai tugas sebagai gagal. Langkah gagal jika secara eksplisit melaporkan kegagalan dengan menggunakan ##vso
perintah atau mengakhiri skrip dengan kode keluar bukan nol.
Saat langkah-langkah berjalan, agen terus mengirim baris output ke Azure Pipelines, sehingga Anda dapat melihat umpan langsung konsol. Di akhir setiap langkah, seluruh output dari langkah diunggah sebagai file log. Anda dapat mengunduh log setelah alur selesai.
Agen juga dapat mengunggah artefak dan hasil pengujian, yang juga tersedia setelah alur selesai.
Status dan kondisi
Agen melacak keberhasilan atau kegagalan setiap langkah. Saat langkah-langkah berhasil dengan masalah atau gagal, status pekerjaan diperbarui. Pekerjaan selalu mencerminkan hasil terburuk dari setiap langkahnya. Jika langkah gagal, pekerjaan juga gagal.
Sebelum agen menjalankan langkah, agen memeriksa kondisi langkah tersebut untuk menentukan apakah langkah harus berjalan. Secara default, langkah hanya berjalan saat status pekerjaan berhasil atau berhasil dengan masalah, tetapi Anda dapat mengatur kondisi lain.
Banyak pekerjaan memiliki langkah-langkah pembersihan yang perlu dijalankan apa pun yang terjadi, sehingga mereka dapat menentukan kondisi always()
. Pembersihan atau langkah-langkah lain juga dapat diatur untuk berjalan hanya pada pembatalan.
Langkah pembersihan yang berhasil tidak dapat menyimpan pekerjaan dari kegagalan. Pekerjaan tidak pernah dapat kembali ke kesuksesan setelah memasuki kegagalan.
Waktu habis dan terputus
Setiap pekerjaan memiliki batas waktu. Jika pekerjaan tidak selesai dalam waktu yang ditentukan, server membatalkan pekerjaan. Server mencoba memberi sinyal kepada agen untuk berhenti, dan menandai pekerjaan sebagai dibatalkan. Di sisi agen, pembatalan berarti membatalkan semua langkah yang tersisa dan mengunggah hasil yang tersisa.
Pekerjaan memiliki masa tenggang yang disebut batas waktu pembatalan untuk menyelesaikan pekerjaan pembatalan apa pun. Anda juga dapat menandai langkah-langkah untuk dijalankan bahkan pada pembatalan. Setelah batas waktu pekerjaan ditambah batas waktu pembatalan, jika agen tidak melaporkan bahwa pekerjaan dihentikan, server menandai pekerjaan sebagai kegagalan.
Mesin agen dapat berhenti merespons server jika komputer host agen kehilangan daya atau dimatikan, atau jika ada kegagalan jaringan. Untuk membantu mendeteksi kondisi ini, agen mengirim pesan heartbeat sekali per menit untuk memberi tahu server bahwa kondisi tersebut masih beroperasi.
Jika server tidak menerima heartbeat selama lima menit berturut-turut, ia mengasumsikan agen tidak akan kembali. Pekerjaan ditandai sebagai kegagalan, memberi tahu pengguna bahwa mereka harus mencoba kembali alur.
Mengelola eksekusi melalui Azure DevOps CLI
Anda dapat mengelola eksekusi alur dengan menggunakan eksekusi alur az di Azure DevOps CLI. Untuk memulai, lihat Mulai menggunakan Azure DevOps CLI. Untuk referensi perintah lengkap, lihat Referensi perintah Azure DevOps CLI.
Contoh berikut menunjukkan cara menggunakan Azure DevOps CLI untuk mencantumkan eksekusi alur di proyek Anda, melihat detail tentang eksekusi tertentu, dan mengelola tag untuk eksekusi alur.
Prasyarat
- Azure CLI dengan ekstensi Azure DevOps CLI diinstal seperti yang dijelaskan di Mulai menggunakan Azure DevOps CLI. Masuk ke Azure menggunakan
az login
. - Organisasi default diatur dengan menggunakan
az devops configure --defaults organization=<YourOrganizationURL>
.
Mencantumkan eksekusi alur
Cantumkan eksekusi alur di proyek Anda dengan perintah az pipelines runs list .
Perintah berikut mencantumkan tiga eksekusi alur pertama yang memiliki status selesai dan hasil berhasil, dan mengembalikan hasil dalam format tabel.
az pipelines runs list --status completed --result succeeded --top 3 --output table
Run ID Number Status Result Pipeline ID Pipeline Name Source Branch Queued Time Reason
-------- ---------- --------- --------- ------------- -------------------------- --------------- -------------------------- ------
125 20200124.1 completed succeeded 12 Githubname.pipelines-java master 2020-01-23 18:56:10.067588 manual
123 20200123.2 completed succeeded 12 Githubname.pipelines-java master 2020-01-23 11:55:56.633450 manual
122 20200123.1 completed succeeded 12 Githubname.pipelines-java master 2020-01-23 11:48:05.574742 manual
Perlihatkan detail eksekusi alur
Tampilkan detail untuk eksekusi alur di proyek Anda dengan perintah az pipelines runs show .
Perintah berikut menunjukkan detail untuk eksekusi alur dengan ID 123, mengembalikan hasil dalam format tabel, dan membuka browser web Anda ke halaman hasil build Azure Pipelines.
az pipelines runs show --id 122 --open --output table
Run ID Number Status Result Pipeline ID Pipeline Name Source Branch Queued Time Reason
-------- ---------- --------- --------- ------------- -------------------------- --------------- -------------------------- --------
123 20200123.2 completed succeeded 12 Githubname.pipelines-java master 2020-01-23 11:55:56.633450 manual
Menambahkan tag ke proses alur
Tambahkan tag ke eksekusi alur di proyek Anda dengan perintah az pipelines runs tag add .
Perintah berikut menambahkan tag YAML ke eksekusi alur dengan ID 123 dan mengembalikan hasilnya dalam format JSON.
az pipelines runs tag add --run-id 123 --tags YAML --output json
[
"YAML"
]
Mencantumkan tag eksekusi alur
Cantumkan tag untuk eksekusi alur di proyek Anda dengan perintah az pipelines runs tag list . Perintah berikut mencantumkan tag untuk eksekusi alur dengan ID 123 dan mengembalikan hasil dalam format tabel.
az pipelines runs tag list --run-id 123 --output table
Tags
------
YAML
Menghapus tag dari eksekusi alur
Hapus tag dari eksekusi alur di proyek Anda dengan perintah az pipelines runs tag delete . Perintah berikut menghapus tag YAML dari eksekusi alur dengan ID 123.
az pipelines runs tag delete --run-id 123 --tag YAML