Saya telah membaca sedikit tentang server CI seperti Jenkins dan saya bertanya-tanya: pada titik mana ini berguna?
Karena tentunya untuk proyek kecil di mana Anda hanya akan memiliki 5 kelas dan 10 unit tes, tidak perlu.
Di sini kita punya sekitar 1500 unit tes dan mereka lulus (pada workstation Core 2 Duo lama) dalam waktu sekitar 90 detik (karena mereka benar-benar menguji "unit" dan karenanya sangat cepat). Aturan yang kami miliki adalah bahwa kami tidak dapat melakukan kode ketika tes gagal.
Jadi setiap pengembang meluncurkan semua tesnya untuk mencegah regresi.
Jelas, karena semua pengembang selalu meluncurkan semua tes, kami menangkap kesalahan karena perubahan yang bertentangan segera setelah satu pengembang menarik perubahan dari yang lain (bila ada).
Masih belum jelas bagi saya: haruskah saya mengatur server CI seperti Jenkins? Apa yang akan dibawanya?
Apakah ini hanya berguna untuk peningkatan kecepatan? (bukan masalah dalam kasus kami)
Apakah ini berguna karena bangunan lama dapat diciptakan kembali? (tapi kita bisa melakukan ini dengan Mercurial, dengan memeriksa rev lama)
Pada dasarnya saya mengerti itu bisa berguna tetapi saya gagal melihat persis mengapa.
Penjelasan apa pun yang memperhitungkan poin-poin yang saya sampaikan di atas akan sangat disambut.
sumber
Anda mungkin belum membutuhkan CI dulu, tetapi saya pikir itu akan menjadi berguna ketika Anda sampai pada tahap pengujian. Jenkins diatur dalam beberapa jam dan itu akan menyederhanakan pengujian Anda dan membantu menghindari kesalahan konyol (itu terjadi terutama ketika Anda terburu-buru memperbaiki cepat untuk produksi).
sumber
Bagi saya, CI akan menarik jika tim Anda memiliki lebih dari 1 anggota.
Anda harus berhenti menganggap CI sebagai "PC lain yang menjalankan tes untuk saya". CI tentang memiliki proses pembangunan yang ditetapkan dan otomatis serta manajemen rilis.
CI adalah entitas otoritatif tunggal yang membuat rilis perangkat lunak Anda. Jika tidak dibangun di atas CI, itu tidak terjadi.
Dengan CI Anda memiliki batasan untuk mengotomatiskan segala sesuatu yang akan menunjukkan kepada Anda semua tweak manual, retas, dan pintasan yang Anda miliki dan hanya tidak bekerja dengan CI dan harus dihindari sejak awal.
Masalah yang dihindari:
Keuntungan (terlalu banyak untuk disebutkan semua):
sumber
Ada satu masalah mendasar tentang Continuous Integration (CI) yang benar-benar tercermin dalam pertanyaan Anda: Praktik CI sulit diimplementasikan dan dipertahankan karena perangkat lunak server CI tidak sepele untuk pengaturan, juga tidak sepele untuk mendapatkan proyek Anda dan menjalankan melalui CI server. Dengan ini, menjadi sulit untuk benar-benar melihat di mana keuntungan dalam merangkul CI sama sekali.
Pertama-tama, CI adalah tentang wawasan dan kualitas. CI yang baik membawa Anda lebih dekat ke proyek Anda, memberi Anda umpan balik yang tepat tentang metrik kualitas, dokumentasi, kepatuhan standar pengkodean, dll. Ini akan memberi Anda alat untuk dengan mudah memvisualisasikan semua ini, dan memungkinkan Anda untuk sekilas mengenali dan dengan mudah kaitkan satu set perubahan dengan cuplikan spesifik dari semua metrik proyek ini.
Ini bukan hanya tentang menjalankan unit test. Tidak semuanya! Yang membawa saya ke kualitas. CI mencakup kesalahan, itu tidak menghindarinya atau membuangnya. Apa yang dilakukannya cukup sederhananya memberi Anda alat untuk melakukan kesalahan sejak awal, alih-alih nanti. Jadi Anda tidak benar-benar melakukan kode yang diuji sebelumnya ke server CI. Meskipun Anda harus berusaha untuk melakukan kode yang bersih dan tidak rusak, Anda benar-benar menggunakan server CI untuk secara otomatis menjalankan pembangun integrasi secara otomatis melalui kode Anda dan membuatnya menilai jika semuanya keluar dengan benar. Jika sudah, rapi! Jika tidak, tidak ada masalah - praktik CI yang baik menyatakan bahwa prioritas Anda berikutnya adalah memperbaiki apa saja yang telah rusak. Yang, di server CI yang baik, harus dengan mudah ditunjukkan untuk Anda.
Ketika ukuran tim meningkat, integrasi kode setiap orang secara alami menjadi lebih sulit. Seharusnya tugas server CI terpusat untuk menguji semua bagian yang terintegrasi dan mengambil beban itu dari anggota tim. Jadi, Anda harus meminta semua orang melakukan komitmen lebih awal (dan sebersih mungkin) dan kemudian memantau status build (biasanya ada notifikasi yang dilibatkan). Dan lagi, jika ada sesuatu yang rusak karena komitmen beberapa pengembang, itu segera menjadi tanggung jawabnya untuk memperbaikinya dan membuat bangunan otomatis itu kembali ke status OK segera.
Jadi Anda tahu, menurut saya setiap proyek mendapat manfaat dari Terintegrasi Secara Berkelanjutan. Masalahnya adalah, sampai sekarang dan karena kompleksitas yang membingungkan dari setiap server CI tunggal yang saya tahu, orang benar-benar menangkis praktik CI pada proyek yang lebih kecil / sederhana. Karena, ayolah, orang-orang memiliki hal-hal yang lebih baik untuk dilakukan daripada menghabiskan waktu berhari-hari mengonfigurasi perangkat lunak yang jelek, terlalu rumit, pengirimannya rendah, dan kembung.
Saya memiliki masalah yang sama persis, dan itulah yang membuat saya mengembangkan Cintient di waktu luang saya sejak sekitar setahun yang lalu sekarang. Premis saya adalah membuatnya mudah untuk menginstal, mengonfigurasi, dan menggunakan, dan membuatnya memberikan metrik kualitas yang setiap orang gagal atau underdelivers. Jadi, setelah jawaban yang panjang ini datang plug saya yang tidak tahu malu menunjukkan tautan GitHub untuk proyek (yang gratis dan open-source, natch). Ini juga memiliki beberapa tangkapan layar yang bagus. :-) https://github.com/matamouros/cintient
Semoga saya membantu Anda.
(CATATAN: Diedit setelah komentar Bryan Oakley, pada kenyataan bahwa saya seharusnya mengambil lebih banyak waktu untuk membangun jawaban yang lebih baik. Saya juga berpikir dia benar.)
sumber