Seberapa pentingkah build harian? [Tutup]

20

Salah satu kriteria Tes Joel adalah build harian. Idenya adalah bahwa jika bangunan rusak, siapa pun yang merusaknya ada di sekitar untuk memperbaikinya. Jika build tidak dapat diperbaiki, semua orang harus memeriksa versi yang lama dan mengerjakannya. Saya bisa mengerti bagaimana ini bisa sangat buruk pada kontrol versi terpusat di mana penting untuk menghindari penggabungan dan percabangan sebanyak mungkin, tetapi ini hanya terdengar seperti gangguan kecil untuk kontrol versi terdistribusi. Apakah kamu setuju dengan ini? Apakah ada alasan lain mengapa bangunan harian itu penting?

Casebash
sumber
2
Joel harus memperbarui itu menjadi "Tes harian dan tes Otomatis"
Paul
1
Atau lebih baik lagi "integrasi berkelanjutan dengan tes otomatis" - kadang-kadang kita tidak membangun satu hari, kadang-kadang kita membangun selusin kali sehari. Sekali mesin melakukannya, itu tidak masalah.
Wyatt Barnett
@ WyattBarnett Saya setuju sepenuhnya =) Saya bekerja pada proyek yang memulai kode membangun setiap 15 menit (kecuali aktivitas check in sedang terjadi) dan itu luar biasa.
Patrick Hughes

Jawaban:

19

Saya pikir apa yang penting untuk dicatat di sini adalah bahwa bangunan biasa membantu menangkap kesalahan lebih cepat daripada nanti . Tidak harus menjadi setiap hari, tapi cukup sering. Idealnya, ini juga dapat menjalankan tes unit Anda.

Tujuannya adalah untuk mengetahui kapan build rusak sebelum fase pengujian akhir, untuk menemukannya sesegera mungkin.

Cukup setel untuk membangun cabang pengembangan utama Anda.

Kami menggunakannya di tempat kerja (meskipun kami membangun setiap jam), dan seringkali ketika kami lupa mengaturnya, kami menemukan masalah hanya beberapa jam sebelum dirilis.

mbillard
sumber
2
Bangun DAN Uji setiap hari.
Paul
1
@ Paul: Hanya jika Anda tidak bisa melakukannya lebih sering. Melakukannya pada setiap komit (yah, dengan waktu histeresis) itu bagus.
Donal Fellows
4

Perlu menambahkan sedikit ke ini (dan @GoodEnoughs):

tetapi ini hanya terdengar seperti gangguan kecil untuk kontrol versi terdistribusi.

Dengan tegas tidak ada - apa yang dilakukan "server" adalah memberitahu Anda bahwa bagasi Anda akan membangun dan lulus pengujian lebih atau kurang dari bersih (semakin sedikit jumlah konfigurasi yang perlu Anda lakukan terhadap lingkungan Anda).

Saya sedang mempertimbangkan untuk beralih ke DVCS tetapi bahkan setelah melakukannya Anda akan menyeret integrasi terus menerus saya dari tangan saya yang mati.

Untuk mengambil contoh sederhana - Anda sedang mengembangkan fitur "a" dia sedang mengembangkan fitur "b" yang didistribusikan atau tidak pada titik tertentu Anda perlu menjahit semuanya bersama-sama - jika, ketika Anda berkomitmen, Anda lupa menambahkan file yang akan dibangun aplikasi pada mesin Anda tetapi tidak akan di tempat lain. Jadi ketika Anda mendorong build ke "trunk" Anda, Continuous Integration akan memicu dan build akan gagal dan Anda akan tahu dan mudah-mudahan sebelum ada yang menarik kode Anda yang tidak begitu lengkap, Anda akan dapat mengambil langkah-langkah.

Jika Anda mengerjakan proyek dengan banyak pengembang, Anda harus dapat menentukan dari mana versi rilis berasal - trunk yang berlaku - ini benar terlepas dari bagaimana kontrol versi Anda bekerja.

Jika Anda telah menambahkan fitur - terutama di mana orang lain memiliki ketergantungan - untuk dapat yakin bahwa ketika didorong untuk "hidup" itu ia membangun dan lulus tes di tempat lain selain lingkungan dev Anda sangat besar. Lebih dari itu, saya menggunakan dari build dari build server saya - jenisnya bagaimana menentukan build "definitive". Pada akhirnya, saya akan meminta pengguna membangun build penyebaran. Tidak ada gunanya mengatakan bahwa Anda dapat bekerja di sekitarnya - Anda tidak bisa jika Anda membutuhkannya (dan saya telah mengacak kotak dev di kantor untuk menemukan dan melakukan file yang hilang).

Apakah itu semua agak kuat? Tidak tahu - tetapi server build saya adalah salah satu dari hal-hal itu yang saya tidak ingin balas memberikan.

Murph
sumber
3

Build harian yang saya percaya sangat penting. Jika Anda memiliki tim terdistribusi di zona waktu yang berbeda, maka yang terbaik adalah menemukan waktu yang kira-kira 'akhir hari' bagi sebagian besar tim. Selain itu jika build harian memiliki komponen uji otomatis maka itu lebih diinginkan.

Pada hari-hari sistem kontrol sumber pusat, saya akan menganjurkan membangun terus menerus berjalan setiap 5-10 menit ketika ada sesuatu yang diubah dalam kode sumber. Karena kesalahan kompilasi memiliki potensi memperlambat sebagian besar tim. Untuk organisasi yang menjalankan sistem kontrol sumber terdistribusi, pembangunan berkelanjutan mungkin tidak diperlukan karena pengembang menyentuh basis kode 'asli' secara langsung lebih jarang.

khivi
sumber
1

Idealnya, kecuali Anda membangun sesuatu yang masif yang membutuhkan lebih dari setengah hari untuk membangun, Anda akan membangun lebih dari sekali sehari. Setelah menyiapkan server integrasi berkelanjutan, seperti Hudson atau TeamCity , build akan terjadi secara otomatis, biasanya setiap jam atau pada setiap komit, dan Anda akan diberitahu jika ada masalah.

Ini adalah cara yang baik untuk menangkap kesalahan sejak dini, terutama jika Anda juga menjalankan tes otomatis sebagai bagian dari build. Ini sangat berguna untuk menemukan kesalahan konfigurasi di mana build bekerja pada mesin satu pengembang tetapi tidak bekerja di tempat lain karena ada sesuatu yang dihilangkan dari repositori atau lingkungan.

Server integrasi berkesinambungan yang lebih canggih juga memungkinkan Anda melacak metrik dari waktu ke waktu (mis. Persentase cakupan kode, waktu pembuatan, garis kode, dll.)

Dan Dyer
sumber
1

Build harian baik-baik saja. Anda pasti membutuhkannya jika Anda tidak punya apa-apa selain jujur ​​saya pikir tes Joel sedikit keluar tanggal hari ini.

Menurut pendapat saya, Anda harus membangun terus menerus sepanjang hari, menjalankan unit, sistem dan kasus uji tingkat fungsional dan idealnya mengemas dan menyebar ke lingkungan seperti tahap pada saat yang sama sambil memverifikasi bahwa setiap mekanisme perubahan versi DB dan lingkungan yang Anda miliki di tempat bekerja seperti yang diharapkan.

Jika waktu pengembangan atau penyebaran berlebihan, pertimbangkan untuk menyingkirkan masalah-masalah ini dengan disk ram fisik atau perangkat lunak, koneksi internet yang lebih cepat, pembuatan paralelisasi, dll. .

Keith Membawa
sumber
1

Build harian tidak penting. Build harian yang selalu sukses adalah (atau yang hanya rusak selama satu jam). Memiliki CI ketika build rusak 70% dari waktu tidak terlalu berguna, karena jika sebagian besar rusak itu tidak membantu Anda mengidentifikasi kesalahan.

segera
sumber
0

Saya pikir itu harus harian membangun, menguji, dan menyebarkan ke server panggung.

Gagasan di balik 'pembangunan harian' adalah untuk selalu memiliki sesuatu yang siap yang dapat dijalankan oleh penguji dan manajer proyek sehingga setiap orang memiliki gagasan tentang keadaan sebenarnya dari proyek tersebut.

Di masa lalu dengan aplikasi desktop setelah 'harian membangun' seorang penguji atau manajer proyek dapat segera menjalankan aplikasi sehingga tidak ada langkah penyebaran yang harus disebutkan.

Sarel Botha
sumber