Saya selalu meluncurkan build setelah setiap komit, tetapi pada proyek baru ini, arsitek hanya meminta saya untuk mengubah frekuensi menjadi "satu build setiap 15 menit", dan saya tidak bisa mengerti mengapa itu akan menjadi alasan yang bagus vs " membangun pada setiap komit ".
Pertama, beberapa detail:
- Proyek Objective-C (iOS 5)
- 10 pengembang
- setiap build sebenarnya membutuhkan ~ 1 menit, dan termasuk pengujian build dan unit.
- server integrasi adalah Mac Mini, jadi daya komputasi tidak terlalu menjadi masalah di sini
- kami menggunakan Jenkins dengan plugin XCode
Argumen saya adalah bahwa jika Anda membangun di setiap komit, Anda dapat melihat sekarang apa yang salah, dan memperbaiki kesalahan Anda secara langsung, tanpa terlalu sering mengganggu para dev lainnya. Ditambah tester kami kurang terganggu oleh kesalahan UT dengan cara ini. Argumennya adalah bahwa devs akan dibanjiri oleh "build error" mail (yang tidak sepenuhnya benar, karena Jenkins dapat dikonfigurasi untuk mengirim email hanya untuk build yang rusak pertama), dan metrik tidak dapat dilakukan dengan benar jika frekuensinya build terlalu tinggi.
Jadi, apa pendapat Anda tentang ini?
sumber
Jawaban:
Gagal cepat adalah prinsip yang baik - semakin cepat Anda tahu build rusak, semakin cepat komit yang melanggar dapat diidentifikasi dan build diperbaiki.
Membangun setiap komitmen adalah hal yang benar untuk dilakukan.
Membangun setiap 15 menit bisa sia-sia jika proyek memiliki volume komitmen yang tinggi dalam jangka waktu seperti itu - melacak komit yang buruk akan memakan waktu lebih lama dan mungkin sulit untuk ditentukan (satu mungkin juga berada dalam situasi di mana banyak komit memiliki hal yang berbeda yang istirahat build). Ada juga kemungkinan bahwa di waktu tenang (waktu malam?) Anda akhirnya membangun kembali meskipun tidak ada perubahan yang dilakukan.
Jika build sering rusak sehingga menjadi masalah, jawablah untuk mendidik kembali tim tentang pentingnya tidak melanggar build dan dalam teknik yang memastikan hal ini tidak terjadi (sering mengambil, checkin dance, menyusun dan menjalankan unit test secara lokal dll ...).
sumber
Tidak ada gunanya melakukan build setiap 15 menit jika tidak ada yang berubah. Tetapi sama-sama tidak ada downside, afaik, jenkins hanya akan mengirim email tentang gagal dan kemudian berhasil dan tidak semuanya di antaranya (misalnya 10 gagal).
Kami melakukannya pada setiap komitmen. Namun kami melakukan polling repositori setiap lima belas menit dan memeriksa perubahan, mungkin itulah yang dirujuk oleh rekan kerja Anda.
Anda berharap 10 dev Anda melakukan lebih dari sekali setiap lima belas menit? Kedengarannya seperti estimasi yang tinggi. 10 dev berarti bahwa setelah setiap 150 menit orang yang sama berkomitmen lagi, jadi 2,5 jam. Jadi dalam hari rata-rata Anda setiap dev melakukan 3 kali. Secara pribadi saya melakukan satu komit ~ 2 hari ... kadang-kadang lebih kadang kurang.
sumber
Ini akan membanjiri pengembang dengan email lebih banyak jika setiap 15 menit saja. Itu karena tidak akan tahu pasti siapa yang melanggar pembangunan dan dengan demikian mengirim lebih banyak orang.
Sedangkan untuk metrik, jika itu benar-benar masalah — yang tidak bisa saya katakan karena saya tidak tahu apa metrik yang menurut mereka ada masalah dengan—, Anda selalu dapat membuat pekerjaan lain untuk mengumpulkan metrik.
sumber
Mungkin persyaratannya harus "membangun paling banyak sekali per 15 menit". Ini bisa masuk akal untuk proyek dengan aktivitas komit yang sangat sering (yaitu beberapa komit dalam beberapa menit) dan mungkin waktu pembangunan yang lama. Tentu saja itu tergantung juga pada bagaimana membangun digunakan. Untuk penguji mungkin agak membingungkan untuk mendapatkan beberapa build dalam waktu 15 menit ...
Tetapi saya setuju bahwa tidak masuk akal untuk membangun jika tidak ada yang berubah.
sumber
Beberapa pengembang ingin diizinkan melakukan komitmen dengan cara di mana file milik satu perubahan fungsional tidak dilakukan dalam satu prosedur atom. Mereka memerlukan dua atau tiga menit untuk melakukan "komitmen logis", yang terdiri dari beberapa "komitmen fisik". Ini biasanya terjadi ketika devs Anda langsung berkomitmen ke repositori pusat, tidak menggunakan DVCS.
Untuk kasus ini, mungkin ide yang baik untuk membiarkan server CI Anda menunggu beberapa saat setelah komit terakhir sebelum memulai membangun baru. Tetapi 15 menit tampaknya merupakan angka yang sangat tinggi, 5 menit atau kurang seharusnya sudah cukup.
Atau, lebih baik (!), Cobalah untuk membimbing devs Anda untuk bekerja hanya dalam porsi kecil, hanya satu hal pada satu waktu, membuatnya lebih mudah untuk melakukan hanya komitmen fisik "fungsional lengkap". Kemudian build setelah setiap commit akan bekerja tanpa terlihat.
sumber
Bahkan jika Anda memiliki Jenkins yang didirikan untuk membangun di atas kontrol sumber yang dikomit ke proyek atau salah satu dari dependensinya, ini tidak mencegah pengembang dari penggelaran ke repositori artefak tanpa terlebih dahulu berkomitmen untuk kontrol sumber. Jika mereka menggunakan perubahan API yang tidak terkoordinasi atau bug dalam ketergantungan ke repositori artefak, ini dapat merusak bangunan Anda tanpa memicu pekerjaan Jenkins. Saya pribadi ingin tahu tentang ASAP ini.
Idealnya Anda akan membangun untuk setiap komit dan juga pada jadwal untuk memeriksa situasi seperti yang baru saja saya jelaskan. Secara konseptual ini berarti Anda membangun setidaknya setiap 15 menit sekali .
Jika Anda memiliki pekerjaan Jenkins yang diatur untuk dijalankan pada penyebaran artefak dependensi (dan jika Anda melakukannya ... Bravo), Anda dapat memeriksa kap bangunan yang dijadwalkan jika unit test Anda solid (artinya mereka tidak menguji dependensi) dan Anda tes integrasi / fungsional bukan bagian dari pekerjaan Jenkins.
Sejauh masalah "banjir dengan email", saya katakan dibanjiri dengan email pada bangunan yang rusak adalah hal yang baik. Pastikan Anda memaksa pengembang untuk merespons email dengan deskripsi dan Anda akan melihat bangunan Anda yang rusak turun, percayalah.
sumber
Kamu bilang kamu tidak bisa mengerti alasan mereka, jadi kamu harus bertanya pada mereka. Jangan hanya menebak apa yang mereka inginkan dan mencoba mengimplementasikannya, dan tentu saja tidak hanya mengimplementasikan apa yang mereka minta tanpa memahami mengapa mereka memintanya.
Yang mengatakan, untuk menjawab pertanyaan umum, itu tergantung pada filosofi pengembangan yang Anda gunakan. Jika setiap komit diharapkan berfungsi, maka setiap komit harus diuji. Jika Anda menggunakan DVCS dengan filosofi bahwa setiap dorongan harus bekerja, maka uji setiap dorongan.
Secara umum, lebih baik memberi tahu orang sesuatu yang tidak mereka ketahui, kemudian mengulangi apa yang mereka tahu. Misalnya, jika mereka ingin mengurangi jumlah email berlebihan yang mereka dapatkan, atur pengaturan email, bukan frekuensi build.
sumber