Secara tradisional sistem CI hanya melakukan pemantauan tingkat kualitas dalam cabang integrasi, dengan melakukan verifikasi QA pada basis kode di mana perubahan sudah dilakukan, mengawasi regresi dan mengirim pemberitahuan untuk intervensi manusia.
Tetapi ketika regresi ini terdeteksi, cabang sudah dalam masalah setidaknya sejak verifikasi QA masing-masing dimulai dan akan tetap dalam kondisi seperti itu (atau bahkan menjadi lebih buruk!) Sampai semua pelakunya diidentifikasi, perbaikan untuk mereka berkomitmen dan verifikasi QA baru menegaskan tingkat kualitas cabang telah dipulihkan. Cabang dapat dianggap diblokir untuk pengembangan normal selama ini.
Apakah ada alat CI yang mampu benar-benar mencegah regresi tersebut terjadi, yang akan melakukan verifikasi QA pra-komitmen dan memungkinkan komit hanya ketika basis kode diperbarui dengan masing-masing komit akan melewati verifikasi QA pra-komit juga, sehingga menjamin minimum tingkat kualitas cabang?
Pembaruan: asumsinya adalah bahwa verifikasi QA otomatis yang sesuai dengan cakupan yang sesuai untuk dapat mendeteksi masing-masing regresi tersedia untuk pemanggilan oleh alat CI.
sumber
Jawaban:
Sejauh yang saya tahu, Anda sedang mencari alat yang akan menolak komit yang melanggar pembangunan - alat CI mungkin tidak akan dapat mencegah regresi dengan benar-benar memperbaiki kode Anda, tetapi itu dapat menghentikan Anda dari menambahkan kode yang buruk ke repositori.
Atlassian memiliki beberapa aplikasi menarik dari kait Git :
Jika Anda menggunakan Git, kaitnya sangat kuat (dan ada kait serupa untuk SVN , Mercurial , dan sistem kontrol versi lainnya), dan Anda mungkin merasa berguna untuk menggunakannya untuk menjalankan pemeriksaan pra-komit.
Dokumentasi Git memiliki halaman tentang cara membuat kait untuk menolak dorongan jika mereka tidak memenuhi kriteria tertentu yang dapat dengan mudah disesuaikan dengan kasus penggunaan ini.
Namun, banyak orang akan berpendapat bahwa menolak komit adalah ide yang buruk di
feature
cabang — Anda hanya akan membuang-buang waktu melawan sistem CI Anda ketika build rusak karena suatu alasan, daripada benar-benar memperbaiki bug.Di
master
cabang, masuk akal untuk menolak gabungan yang rusak, karena Anda mungkin ingin memastikannya selalu membangun. Untukfeature
cabang, Anda pasti akan memecahkan banyak hal, dan karena kode tidak mulai diproduksi sekarang , lebih masuk akal hanya untuk memperingatkan Anda daripada benar-benar menolak komit Anda sama sekali.sumber
Tidak ada alat yang dapat menjamin tidak ada regresi - yang jauh lebih tergantung pada tes Anda daripada alat yang menjalankannya. Namun, Anda dapat membantu mencegah regresi yang akan tertangkap masuk ke cabang integrasi. Anda dapat melakukan ini dengan kait pra-komit, tetapi seringkali lebih mudah dengan permintaan tarik (yang mudah-mudahan Anda sudah gunakan untuk ulasan kode rekan).
Jika cabang mutakhir dengan upstreamnya (tempat PR dilebur), dan tesnya lolos, maka mereka akan tetap lulus setelah penggabungan; keadaan cabang target setelah penggabungan akan cocok dengan keadaan cabang sumber sebelum penggabungan.
Biasanya tidak terlalu sulit (tergantung pada alat yang digunakan) untuk menunjukkan apakah cabang sumber dalam PR adalah yang terbaru dengan target, dan jika memiliki bangunan CI yang lewat. Anda dapat menggunakan ini sebagai persyaratan (berdasarkan kebijakan, dan / atau diberlakukan dalam perangkat lunak) untuk menggabungkan permintaan tarik.
sumber
Alat integrasi kontinu sejati (bukan hanya pengujian berkelanjutan) seperti Reitveld dan Zuul dapat membantu, meskipun mereka hanya sebagus tes yang Anda tulis dan ulasan kode yang Anda lakukan.
sumber
Gunakan GitLAB, Anda dapat mengatur dalam pengaturan proyek untuk hanya memungkinkan penggabungan ketika pipa berhasil, sehingga dapat memiliki Integrasi Berkelanjutan yang benar-benar, gabungkan bahwa dengan menambahkan QA Anda ke daftar persetujuan penggabungan dan dengan Lingkungan Dinamis, Anda dapat memiliki jaminan kualitas sebelum Anda bergabung dengan master.
sumber
ApartCI adalah sistem CI yang dirancang tepat untuk mencegah regresi, sehingga menjamin tingkat kualitas cabang yang datar. Masih dalam versi beta.
Ini mengatur verifikasi pra-komitmen terpusat sedemikian rupa untuk memastikan bahwa perubahan dilakukan hanya setelah diverifikasi, bersama dengan semua perubahan lain yang dilakukan sebelum itu, untuk memenuhi atau melampaui tingkat kualitas cabang terbaru.
Ini adalah perbedaan utama dibandingkan dengan verifikasi pra-komitmen tradisional yang digerakkan oleh pengembang, sering dilakukan secara paralel, yang memberikan ruang untuk regresi yang disebabkan oleh perubahan yang mengganggu yang tidak pernah diuji bersama.
Alat ini juga dirancang untuk dengan mudah skala - mampu mempertahankan tingkat yang sangat tinggi dari perubahan kandidat yang masuk dan mendukung 100/1000 pengembang yang bekerja di cabang integrasi yang sama.
Penafian: Saya penulis alat dan pendiri perusahaan yang menawarkannya. Permintaan maaf untuk iklan.
sumber