Urutan eksekusi alur

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

Eksekusi mewakili satu eksekusi alur. Selama eksekusi, alur diproses, dan agen memproses satu atau beberapa pekerjaan. Eksekusi alur mencakup pekerjaan, langkah, dan tugas. Menjalankan alur integrasi berkelanjutan (CI) dan pengiriman berkelanjutan (CD).

Gambaran umum alur

Saat Anda menjalankan alur, banyak hal terjadi di bawah penutup. Meskipun Anda sering tidak perlu tahu tentang mereka, kadang-kadang berguna untuk memiliki gambaran besar. Pada tingkat tinggi, Azure Pipelines akan:

Di sisi agen, untuk setiap pekerjaan, agen akan:

Pekerjaan mungkin berhasil, gagal, atau dibatalkan. Ada juga situasi di mana pekerjaan mungkin tidak selesai. Memahami bagaimana hal ini terjadi dapat membantu Anda memecahkan masalah.

Mari kita uraikan setiap tindakan satu per satu.

Memproses alur

Memperluas templat YAML

Untuk mengubah alur menjadi eksekusi, Azure Pipelines melalui beberapa langkah dalam urutan ini:

  1. Pertama, perluas templat dan evaluasi ekspresi templat.
  2. Selanjutnya, evaluasi dependensi pada tingkat tahap untuk memilih tahap pertama yang akan dijalankan.
  3. Agar setiap tahap yang dipilih berjalan, dua hal terjadi:
    • Semua sumber daya yang digunakan dalam semua pekerjaan dikumpulkan dan divalidasi agar otorisasi berjalan.
    • Evaluasi dependensi di tingkat pekerjaan untuk memilih pekerjaan pertama yang akan dijalankan.
  4. Agar setiap pekerjaan yang dipilih berjalan, perluas multi-konfigurasi (strategy: matrix atau strategy: parallel di YAML) ke dalam beberapa pekerjaan runtime.
  5. Untuk setiap pekerjaan runtime, evaluasi kondisi untuk memutuskan apakah pekerjaan tersebut memenuhi syarat untuk dijalankan.
  6. Minta agen untuk setiap pekerjaan runtime yang memenuhi syarat.

Saat pekerjaan runtime selesai, Azure Pipelines akan melihat apakah ada pekerjaan baru yang memenuhi syarat untuk dijalankan. Jika demikian, langkah 4 - 6 ulangi dengan pekerjaan baru. Demikian pula, saat tahap selesai, langkah 2 - 6 akan diulang untuk setiap tahap baru.

Pengurutan ini membantu menjawab pertanyaan umum: mengapa saya tidak dapat menggunakan variabel tertentu dalam parameter templat saya? Langkah 1, perluasan templat, lakukan operasi pada teks dokumen YAML saja. Variabel runtime tidak tersedia selama langkah tersebut. Setelah langkah 1, parameter templat telah diselesaikan dan tidak lagi tersedia.

Ini juga menjawab masalah umum lainnya: mengapa saya tidak dapat menggunakan variabel untuk menyelesaikan koneksi layanan / nama lingkungan? Sumber daya diotorisasi sebelum tahap dapat mulai berjalan, sehingga variabel tingkat tahap dan pekerjaan tidak tersedia. Variabel tingkat alur dapat digunakan, tetapi hanya variabel tersebut yang secara eksplisit disertakan dalam alur. Grup variabel adalah sumber daya yang tunduk pada otorisasi, sehingga data mereka juga tidak tersedia saat memeriksa otorisasi sumber daya.

Meminta agen

Setiap kali Azure Pipelines perlu menjalankan pekerjaan, Azure Pipelines akan meminta kumpulan untuk agen. (Pekerjaan server adalah pengecualian, karena berjalan di server Azure Pipelines itu sendiri.) Kumpulan agen yang dihostingmicrosoft dan dihost sendiri bekerja sedikit berbeda.

Permintaan kumpulan agen yang dihosting Microsoft

Pertama, layanan memeriksa pekerjaan paralel organisasi Anda. Ini menambahkan semua pekerjaan yang berjalan di semua agen yang dihosting Microsoft dan membandingkannya dengan jumlah pekerjaan paralel yang dibeli. Jika tidak ada slot paralel yang tersedia, pekerjaan harus menunggu di slot untuk membebaskan.

Setelah slot paralel tersedia, pekerjaan dirutekan ke jenis agen yang diminta. Secara konseptual, kumpulan yang dihosting Microsoft adalah satu kumpulan mesin global raksasa. (Pada kenyataannya, banyak kumpulan fisik yang berbeda yang dibagi berdasarkan geografi dan jenis sistem operasi.) Berdasarkan vmImage (dalam YAML) atau nama kumpulan (di editor klasik) yang diminta, agen dipilih.

Pilihan kumpulan

Semua agen di kumpulan Microsoft adalah komputer virtual baru yang baru yang belum menjalankan alur apa pun sebelumnya. Ketika pekerjaan selesai, agen VM akan dibuang.

Permintaan kumpulan agen yang dihost sendiri

Mirip dengan kumpulan yang dihosting Microsoft, layanan ini terlebih dahulu memeriksa pekerjaan paralel organisasi Anda. Ini menambahkan semua pekerjaan yang berjalan di semua agen yang dihost sendiri dan membandingkannya dengan jumlah pekerjaan paralel yang dibeli. Jika tidak ada slot paralel yang tersedia, pekerjaan harus menunggu di slot untuk membebaskan.

Setelah slot paralel tersedia, kumpulan yang dihost sendiri diperiksa untuk agen yang kompatibel. Agen yang dihost sendiri menawarkan kemampuan, yaitu string yang menunjukkan bahwa perangkat lunak tertentu diinstal atau pengaturan dikonfigurasi. Alur memiliki tuntutan, yang merupakan kemampuan yang diperlukan untuk menjalankan pekerjaan. Jika agen gratis yang kemampuannya cocok dengan tuntutan alur tidak dapat ditemukan, pekerjaan akan terus menunggu. Jika tidak ada agen di kumpulan yang kemampuannya cocok dengan tuntutan, pekerjaan akan 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.

Bersiap untuk menjalankan pekerjaan

Setelah agen menerima pekerjaan, agen memiliki beberapa pekerjaan persiapan yang harus dilakukan. Agen mengunduh (dan cache untuk waktu berikutnya) semua tugas yang diperlukan untuk menjalankan pekerjaan. Ini menciptakan ruang kerja pada disk untuk menahan kode sumber, artefak, dan output yang digunakan dalam eksekusi. Kemudian mulai menjalankan langkah-langkah.

Jalankan setiap langkah

Langkah-langkah dijalankan secara berurutan, satu demi satu. Sebelum langkah dapat dimulai, semua langkah sebelumnya harus selesai (atau dilewati).

Menjalankan setiap tugas

Langkah-langkah diimplementasikan oleh tugas. Tugas itu sendiri diimplementasikan sebagai skrip Node.js atau PowerShell. Sistem tugas merutekan input dan output ke skrip cadangan. Ini juga menyediakan beberapa layanan umum seperti mengubah jalur sistem dan membuat variabel alur baru.

Setiap langkah berjalan dalam prosesnya sendiri, mengisolasinya dari lingkungan yang ditinggalkan oleh langkah-langkah sebelumnya. Karena model proses per langkah ini, variabel lingkungan tidak dipertahankan di antara langkah-langkah. Namun, tugas dan skrip memiliki mekanisme untuk berkomunikasi kembali ke agen: perintah pengelogan. Ketika tugas atau skrip menulis perintah pengelogan ke standar keluar, agen akan mengambil tindakan apa pun yang diminta.

Ada perintah agen untuk membuat variabel alur baru. Variabel alur akan secara otomatis dikonversi menjadi variabel lingkungan di langkah berikutnya. Untuk mengatur variabel myVar baru dengan nilai myValue, skrip dapat melakukan ini:

echo '##vso[task.setVariable variable=myVar]myValue'
Write-Host "##vso[task.setVariable variable=myVar]myValue"

Melaporkan dan mengumpulkan hasil

Setiap langkah dapat melaporkan peringatan, kesalahan, dan kegagalan. Kesalahan dan peringatan dilaporkan ke halaman ringkasan alur, menandai tugas sebagai "berhasil dengan masalah". Kegagalan juga dilaporkan ke halaman ringkasan, tetapi menandai tugas sebagai "gagal". Langkah adalah kegagalan jika secara eksplisit melaporkan kegagalan (menggunakan ##vso perintah) atau mengakhiri skrip dengan kode keluar bukan nol.

Log dan hasil mengalir dari agen ke layanan

Saat langkah-langkah berjalan, agen terus mengirim baris output ke layanan. Itu sebabnya Anda dapat melihat umpan langsung konsol. Di akhir setiap langkah, seluruh output dari langkah juga diunggah sebagai file log. Log dapat diunduh setelah alur selesai. Item lain yang dapat diunggah agen termasuk artefak dan hasil pengujian. Ini 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 akan diperbarui. Pekerjaan selalu mencerminkan hasil "terburuk" dari setiap langkahnya: jika langkah gagal, pekerjaan juga gagal.

Sebelum menjalankan langkah, agen akan memeriksa kondisi langkah tersebut untuk menentukan apakah harus berjalan. Secara default, langkah hanya akan berjalan ketika status pekerjaan berhasil atau berhasil dengan masalah. Banyak pekerjaan memiliki langkah-langkah pembersihan yang perlu dijalankan apa pun yang terjadi, sehingga pekerjaan dapat menentukan kondisi "always()". Langkah-langkah pembersihan mungkin juga diatur untuk berjalan hanya pada pembatalan. Langkah pembersihan yang berhasil tidak dapat menyelamatkan pekerjaan dari kegagalan; pekerjaan tidak pernah dapat kembali ke kesuksesan setelah memasuki kegagalan.

Waktu habis dan terputus

Setiap pekerjaan memiliki batas waktu. Jika pekerjaan belum selesai dalam waktu yang ditentukan, server akan membatalkan pekerjaan. Ini akan mencoba memberi sinyal kepada agen untuk berhenti, dan itu akan menandai pekerjaan sebagai dibatalkan. Di sisi agen, ini berarti membatalkan semua langkah yang tersisa dan mengunggah hasil yang tersisa.

Pekerjaan memiliki masa tenggang yang dikenal sebagai batas waktu pembatalan untuk menyelesaikan pekerjaan pembatalan apa pun. (Ingat, langkah-langkah dapat ditandai untuk berjalan bahkan pada pembatalan.) Setelah batas waktu ditambah batas waktu pembatalan, jika agen belum melaporkan bahwa pekerjaan telah berhenti, server akan menandai pekerjaan sebagai kegagalan.

Karena Azure Pipelines mendistribusikan pekerjaan ke mesin agen, dari waktu ke waktu, agen mungkin berhenti merespons server. Ini dapat terjadi jika komputer host agen hilang (kehilangan daya, VM dimatikan) atau jika ada kegagalan jaringan. Untuk membantu mendeteksi kondisi ini, agen mengirim pesan heartbeat sekali per menit untuk memberi tahu server bahwa kondisi masih beroperasi. Jika server tidak menerima heartbeat selama lima menit berturut-turut, server mengasumsikan agen tidak akan kembali. Pekerjaan ditandai sebagai kegagalan, memberi tahu pengguna bahwa mereka harus mencoba kembali alur.

Mengelola eksekusi melalui CLI

Dengan menggunakan Azure DevOps CLI, Anda dapat mencantumkan eksekusi alur di proyek Anda dan melihat detail tentang eksekusi tertentu. Anda juga dapat menambahkan dan menghapus tag dalam eksekusi alur Anda.

Prasyarat

  • Anda harus telah menginstal ekstensi Azure DevOps CLI seperti yang dijelaskan dalam Mulai menggunakan Azure DevOps CLI.
  • Masuk ke Azure DevOps menggunakan az login.
  • Untuk contoh dalam artikel ini, atur organisasi default menggunakan az devops configure --defaults organization=YourOrganizationURL.

Mencantumkan eksekusi alur

Cantumkan eksekusi alur dalam proyek Anda dengan perintah az pipelines runs list . Untuk memulai, lihat Mulai menggunakan Azure DevOps CLI.

az pipelines runs list [--branch]
                       [--org]
                       [--pipeline-ids]
                       [--project]
                       [--query-order {FinishTimeAsc, FinishTimeDesc, QueueTimeAsc, QueueTimeDesc, StartTimeAsc, StartTimeDesc}]
                       [--reason {all, batchedCI, buildCompletion, checkInShelveset, individualCI, manual, pullRequest, schedule, triggered, userCreated, validateShelveset}]
                       [--requested-for]
                       [--result {canceled, failed, none, partiallySucceeded, succeeded}]
                       [--status {all, cancelling, completed, inProgress, none, notStarted, postponed}]
                       [--tags]
                       [--top]

Parameter opsional

  • cabang: Filter menurut build untuk cabang ini.
  • org: URL organisasi Azure DevOps. Anda dapat mengonfigurasi organisasi default menggunakan az devops configure -d organization=ORG_URL. Diperlukan jika tidak dikonfigurasi sebagai default atau diambil menggunakan git config. Contoh: --org https://dev.azure.com/MyOrganizationName/.
  • pipeline-ids: ID definisi yang dipisahkan spasi untuk membuat daftar.
  • project: Nama atau ID proyek. Anda dapat mengonfigurasi proyek default menggunakan az devops configure -d project=NAME_OR_ID. Diperlukan jika tidak dikonfigurasi sebagai default atau diambil menggunakan git config.
  • urutan kueri: Tentukan urutan di mana eksekusi alur dicantumkan. Nilai yang diterima adalah FinishTimeAsc, FinishTimeDesc, QueueTimeAsc, QueueTimeDesc, StartTimeAsc, dan StartTimeDesc.
  • alasan: Hanya buat daftar karena alasan yang ditentukan ini. Nilai yang diterima adalah batchedCI, buildCompletion, checkInShelveset, individualCI, manual, pullRequest, schedule, triggered, userCreated, dan validateShelveset.
  • requested-for: Batasi build yang diminta untuk pengguna atau grup tertentu.
  • result: Batasi build dengan hasil tertentu. Nilai yang diterima dibatalkan, gagal, tidak ada, sebagianSucceeded, dan berhasil.
  • status: Batasi build dengan status tertentu. Nilai yang diterima adalah semua, membatalkan, menyelesaikan, inProgress, tidak ada, notStarted, dan ditunda.
  • tag: Batasi build dengan setiap tag yang ditentukan. Spasi dipisahkan.
  • top: Jumlah maksimum build untuk dicantumkan.

Contoh

Perintah berikut mencantumkan tiga eksekusi alur pertama yang memiliki status selesai dan hasil berhasil, dan mengembalikan hasilnya 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 . Untuk memulai, lihat Mulai menggunakan Azure DevOps CLI.

az pipelines runs show --id
                       [--open]
                       [--org]
                       [--project]

Parameter

  • id: Diperlukan. ID eksekusi alur.
  • buka: Opsional. Membuka halaman hasil build di browser web Anda.
  • org: URL organisasi Azure DevOps. Anda dapat mengonfigurasi organisasi default menggunakan az devops configure -d organization=ORG_URL. Diperlukan jika tidak dikonfigurasi sebagai default atau diambil menggunakan git config. Contoh: --org https://dev.azure.com/MyOrganizationName/.
  • project: Nama atau ID proyek. Anda dapat mengonfigurasi proyek default menggunakan az devops configure -d project=NAME_OR_ID. Diperlukan jika tidak dikonfigurasi sebagai default atau diambil menggunakan git config.

Contoh

Perintah berikut menunjukkan detail untuk eksekusi alur dengan ID 123 dan mengembalikan hasilnya dalam format tabel. Ini juga membuka browser web Anda ke halaman hasil build.

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 . Untuk memulai, lihat Mulai menggunakan Azure DevOps CLI.

az pipelines runs tag add --run-id
                          --tags
                          [--org]
                          [--project]

Parameter

  • run-id: Diperlukan. ID eksekusi alur.
  • tag: Diperlukan. Tag yang akan ditambahkan ke eksekusi alur (nilai yang dipisahkan koma).
  • org: URL organisasi Azure DevOps. Anda dapat mengonfigurasi organisasi default menggunakan az devops configure -d organization=ORG_URL. Diperlukan jika tidak dikonfigurasi sebagai default atau diambil menggunakan git config. Contoh: --org https://dev.azure.com/MyOrganizationName/.
  • project: Nama atau ID proyek. Anda dapat mengonfigurasi proyek default menggunakan az devops configure -d project=NAME_OR_ID. Diperlukan jika tidak dikonfigurasi sebagai default atau diambil menggunakan git config.

Contoh

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 . Untuk memulai, lihat Mulai menggunakan Azure DevOps CLI.

az pipelines runs tag list --run-id
                           [--org]
                           [--project]

Parameter

  • run-id: Diperlukan. ID eksekusi alur.
  • org: URL organisasi Azure DevOps. Anda dapat mengonfigurasi organisasi default menggunakan az devops configure -d organization=ORG_URL. Diperlukan jika tidak dikonfigurasi sebagai default atau diambil menggunakan git config. Contoh: --org https://dev.azure.com/MyOrganizationName/.
  • project: Nama atau ID proyek. Anda dapat mengonfigurasi proyek default menggunakan az devops configure -d project=NAME_OR_ID. Diperlukan jika tidak dikonfigurasi sebagai default atau diambil menggunakan git config.

Contoh

Perintah berikut mencantumkan tag untuk eksekusi alur dengan ID 123 dan mengembalikan hasilnya 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 alur az menjalankan perintah hapus tag . Untuk memulai, lihat Mulai menggunakan Azure DevOps CLI.

az pipelines runs tag delete --run-id
                             --tag
                             [--org]
                             [--project]

Parameter

  • run-id: Diperlukan. ID eksekusi alur.
  • tag: Diperlukan. Tag yang akan dihapus dari eksekusi alur.
  • org: URL organisasi Azure DevOps. Anda dapat mengonfigurasi organisasi default menggunakan az devops configure -d organization=ORG_URL. Diperlukan jika tidak dikonfigurasi sebagai default atau diambil menggunakan git config. Contoh: --org https://dev.azure.com/MyOrganizationName/.
  • project: Nama atau ID proyek. Anda dapat mengonfigurasi proyek default menggunakan az devops configure -d project=NAME_OR_ID. Diperlukan jika tidak dikonfigurasi sebagai default atau diambil menggunakan git config.

Contoh

Perintah berikut menghapus tag YAML dari eksekusi alur dengan ID 123.

az pipelines runs tag delete --run-id 123 --tag YAML