Tidak, bukan karena dua alasan:
Kecepatan
Komitmen harus cepat. Komit yang membutuhkan 500 ms., Misalnya, terlalu lambat dan akan mendorong pengembang untuk melakukan lebih hemat. Mengingat bahwa pada proyek apa pun yang lebih besar dari Hello World, Anda akan memiliki lusinan atau ratusan pengujian, akan membutuhkan terlalu banyak waktu untuk menjalankannya selama pra-komit.
Tentu saja, keadaan menjadi lebih buruk untuk proyek yang lebih besar dengan ribuan tes yang berjalan selama beberapa menit pada arsitektur terdistribusi, atau berminggu-minggu atau berbulan-bulan pada satu mesin.
Bagian terburuknya adalah tidak banyak yang dapat Anda lakukan untuk membuatnya lebih cepat. Proyek-proyek Python kecil yang, katakanlah, ratusan unit test, membutuhkan setidaknya satu detik untuk berjalan di server rata-rata, tetapi seringkali jauh lebih lama. Untuk aplikasi C #, itu akan rata-rata empat-lima detik, karena waktu kompilasi.
Dari titik itu, Anda dapat membayar ekstra $ 10.000 untuk server yang lebih baik yang akan mengurangi waktu, tetapi tidak banyak, atau menjalankan tes pada beberapa server, yang hanya akan memperlambat segalanya.
Keduanya membayar dengan baik ketika Anda memiliki ribuan tes (serta tes fungsional, sistem dan integrasi), memungkinkan untuk menjalankannya dalam hitungan menit, bukan minggu, tetapi ini tidak akan membantu Anda untuk proyek skala kecil.
Yang dapat Anda lakukan, sebaliknya, adalah:
Dorong pengembang untuk menjalankan tes yang sangat terkait dengan kode yang mereka modifikasi secara lokal sebelum melakukan komit. Mereka mungkin tidak dapat menjalankan ribuan unit test, tetapi mereka dapat menjalankan lima-sepuluh dari mereka.
Pastikan menemukan tes yang relevan dan menjalankannya sebenarnya mudah (dan cepat). Visual Studio, misalnya, mampu mendeteksi tes mana yang mungkin dipengaruhi oleh perubahan yang dilakukan sejak menjalankan terakhir. IDE / platform / bahasa / kerangka kerja lain mungkin memiliki fungsi yang serupa.
Pertahankan komit secepat mungkin. Menegakkan aturan gaya tidak apa-apa, karena seringkali, itu satu-satunya tempat untuk melakukannya, dan karena pemeriksaan seperti itu sering kali sangat cepat. Melakukan analisis statis adalah OK begitu tetap cepat, yang jarang terjadi. Tes unit yang berjalan tidak OK.
Jalankan tes unit pada server Integrasi Berkelanjutan Anda.
Pastikan pengembang mendapat informasi secara otomatis ketika mereka melanggar build (atau ketika unit test gagal, yang praktis adalah hal yang sama jika Anda menganggap kompiler sebagai alat yang memeriksa beberapa kesalahan yang mungkin Anda dapat masukkan ke dalam kode Anda).
Misalnya, membuka halaman web untuk memeriksa build terakhir bukanlah solusi. Mereka harus diinformasikan secara otomatis . Menampilkan sembulan atau mengirim SMS adalah dua contoh bagaimana mereka dapat diinformasikan.
Pastikan pengembang memahami bahwa melanggar build (atau gagal tes regresi) tidak OK, dan segera setelah itu terjadi, prioritas utama mereka adalah untuk memperbaikinya. Tidak masalah apakah mereka mengerjakan fitur prioritas tinggi yang diminta bos mereka untuk dikirim besok: mereka gagal membangun, mereka harus memperbaikinya.
Keamanan
Server yang menampung repositori tidak boleh menjalankan kode khusus, seperti pengujian unit, terutama untuk alasan keamanan. Alasan-alasan itu sudah dijelaskan di CI runner di server yang sama dengan GitLab?
Jika, di sisi lain, ide Anda adalah meluncurkan proses pada server build dari pre-commit hook, maka itu akan memperlambat lebih banyak komit.