Apa gunanya "Membangun Server"? [Tutup]

101

Saya belum pernah bekerja untuk organisasi yang sangat besar dan saya tidak pernah bekerja untuk perusahaan yang memiliki "Build Server".

Apa tujuan mereka? Mengapa para pengembang tidak membangun proyek di mesin lokal mereka, atau apakah mereka? Apakah beberapa proyek begitu besar sehingga dibutuhkan mesin yang lebih bertenaga untuk membuatnya dalam waktu yang wajar?

Satu-satunya tempat saya melihat Build Server berguna adalah untuk integrasi berkelanjutan dengan server build yang terus-menerus membangun apa yang dikomit ke repositori. Apakah saya baru saja tidak mengerjakan proyek yang cukup besar?

Seseorang, tolong beri tahu saya: Apa tujuan dari membangun server?

KingNestor
sumber

Jawaban:

94

Alasan yang diberikan sebenarnya manfaat yang sangat besar. Build yang masuk ke QA seharusnya hanya berasal dari sistem yang dibangun hanya dari repositori. Dengan cara ini, paket build dapat direproduksi dan dilacak. Pengembang secara manual membuat kode untuk apa pun kecuali pengujian mereka sendiri yang berbahaya. Terlalu banyak risiko barang tidak diperiksa, ketinggalan zaman dengan perubahan orang lain, dll.

Joel Spolsky tentang masalah ini.

mkb
sumber
7
Hal-hal menjadi sangat sulit ketika pengembang membangun dengan perpustakaan mutakhir, tidak menyadarinya dan kemudian mendapatkan kesalahan "NoClassDefFound" di mana-mana selama pengujian dan semua orang bertanya-tanya apa yang salah. (Ini bermasalah dalam pekerjaan saya yang berbasis Java sampai saya menyiapkan Hudson dan kami memindahkan QA build ke sana)
MattC
1
Sebenarnya ini hanya alasan untuk membangun dari checkout bersih, bukan untuk membangun dari agen-build khusus pada server-build khusus. Menjalankan skrip build otomatis dalam pembayaran bersih repositori pada mesin developer lokal sudah memberikan sebagian besar keuntungan dari server build khusus.
Kaiserludi
Salah satu manfaat utama, IMHO, adalah memaksa Anda untuk menggunakan sistem build yang akan berjalan 100% otomatis dan sangat mendorong Anda untuk tidak memiliki tombol apa pun untuk memulainya. Anda tidak hanya memiliki satu sumber untuk rilis dan pengujian build, tetapi juga tentang memastikan bahwa orang tidak mengacaukan sistem build Anda.
jelas
48

Membangun server penting karena beberapa alasan.

  • Mereka mengisolasi lingkungan Pengembang Code Monkey lokal mengatakan "Ini mengkompilasi di mesin saya " ketika tidak dapat dikompilasi di komputer Anda. Ini bisa berarti check-in tidak sinkron atau bisa juga berarti perpustakaan dependen tidak ada. Guci neraka tidak seburuk neraka .dll; Bagaimanapun, menggunakan server build adalah jaminan murah bahwa build Anda tidak akan gagal secara misterius atau mengemas perpustakaan yang salah secara tidak sengaja.

  • Mereka memfokuskan tugas yang terkait dengan build. Ini termasuk memperbarui tag build, membuat pengemasan distribusi apa pun, menjalankan pengujian otomatis, membuat dan mendistribusikan laporan build. Otomatisasi adalah kuncinya.

  • Mereka mengoordinasikan (didistribusikan) pembangunan. Kasus standar adalah saat banyak pengembang mengerjakan basis kode yang sama. Sistem kontrol versi adalah jantung dari pengembangan terdistribusi semacam ini tetapi tergantung pada alatnya, pengembang mungkin tidak banyak berinteraksi dengan kode satu sama lain. Daripada memaksa developer mengambil risiko build yang buruk atau khawatir tentang penggabungan kode yang terlalu agresif, rancang proses build di mana build otomatis dapat melihat kode yang sesuai dan memproses artefak build dengan cara yang dapat diprediksi. Dengan begitu, saat pengembang melakukan sesuatu dengan masalah, seperti tidak memeriksa ketergantungan file baru, mereka dapat diberi tahu dengan cepat. Melakukan ini di area bertahap memungkinkan Anda menandai kode yang telah dibangun sehingga pengembang tidak menarik kode yang akan merusak build lokal mereka. PVCS melakukan ini dengan cukup baik menggunakan ide kelompok promosi. Clearcase dapat melakukannya juga dengan menggunakan label tetapi akan membutuhkan lebih banyak proses administrasi daripada yang disediakan oleh banyak toko.

Kelly S. Prancis
sumber
12
+1 Membuat pemrogram mendokumentasikan perubahan pada lingkungan bangunan mereka seperti menggiring kucing. Mereka tidak dapat mengingat pada tahap apa mereka memperbarui lib .Net atau Boost mereka, jika mereka menyadari bahwa mereka melakukannya sama sekali. Memiliki server pusat yang melakukan pembangunan harian akan membuat mereka beraksi di malam hari setelah mereka memeriksa kode- dan tidak ada yang lebih memotivasi seperti diberi tahu, "Anda merusak pembentukan tim, apa yang Anda lupa?"
kmarsh
28

Apa tujuan mereka?
Ambil beban mesin pengembang, sediakan lingkungan yang stabil dan dapat direproduksi untuk build.

Mengapa para pengembang tidak membangun proyek di mesin lokal mereka, atau apakah mereka?
Karena dengan perangkat lunak yang kompleks, luar biasa banyak hal yang bisa salah ketika hanya "menyusun". masalah yang sebenarnya saya temui:

  • berbagai jenis pemeriksaan dependensi yang tidak lengkap, mengakibatkan biner tidak diperbarui.
  • Publikasikan perintah gagal secara diam-diam, pesan kesalahan di log diabaikan.
  • Build termasuk sumber lokal yang belum berkomitmen untuk kontrol sumber (untungnya, belum ada kotak pesan "pelanggan sialan" ..).
  • Saat mencoba menghindari masalah di atas dengan membangun dari folder lain, beberapa file diambil dari folder yang salah.
  • Folder target tempat biner dikumpulkan berisi file pengembang usang tambahan yang seharusnya tidak disertakan dalam rilis

Kami mendapatkan peningkatan stabilitas yang luar biasa karena semua rilis publik dimulai dengan mendapatkan dari kontrol sumber ke folder kosong. Sebelumnya, ada banyak "masalah lucu" yang "hilang ketika Joe memberi saya DLL baru".

Apakah beberapa proyek begitu besar sehingga dibutuhkan mesin yang lebih bertenaga untuk membuatnya dalam waktu yang wajar?

Apa yang "masuk akal"? Jika saya menjalankan batch build di mesin lokal saya, ada banyak hal yang tidak dapat saya lakukan. Daripada membayar developer untuk menyelesaikan build, bayar IT untuk membeli mesin build yang sebenarnya.

Apakah saya baru saja tidak mengerjakan proyek yang cukup besar?

Ukuran memang salah satu faktor, tapi bukan satu-satunya.

peterchen
sumber
8

Server build adalah konsep yang berbeda dengan server Integrasi Berkelanjutan. Server CI ada untuk membangun proyek Anda ketika ada perubahan. Sebaliknya, server Build ada untuk membangun proyek (biasanya rilis, terhadap revisi yang diberi tag) di lingkungan yang bersih. Ini memastikan bahwa tidak ada developer hacks, tweak, versi config / artefak yang tidak disetujui atau kode yang tidak mengikat yang membuatnya menjadi kode yang dirilis.

Penjual Kaya
sumber
jawaban yang bagus. memberi suara positif untuk nama tersebut juga.
Philip Schiff
6

Server build digunakan untuk membuat kode semua orang ketika di-check-in. Kode Anda mungkin dikompilasi secara lokal, tetapi kemungkinan besar Anda tidak akan memiliki semua perubahan yang dibuat oleh orang lain sepanjang waktu.

kemiller2002
sumber
5

Untuk menambahkan apa yang telah dikatakan:

Seorang mantan kolega bekerja di tim Microsoft Office dan memberi tahu saya bahwa pembuatan lengkap terkadang membutuhkan waktu 9 jam. Itu akan menyebalkan untuk melakukannya di mesin ANDA , bukan?

Andrei Rînea
sumber
4

Anda perlu memiliki lingkungan "bersih" yang bebas dari artefak versi sebelumnya (dan perubahan konfigurasi) untuk memastikan bahwa build dan pengujian berfungsi dan tidak bergantung pada artefak. Cara efektif untuk mengisolasi adalah dengan membuat server build terpisah.

paulwhit
sumber
4

Sejauh ini saya setuju dengan jawaban dalam hal stabilitas, keterlacakan, dan kemampuan untuk direproduksi. (Banyak 'itu, kan?). HANYA pernah bekerja untuk perusahaan besar (Perawatan Kesehatan, Keuangan) dengan server build BANYAK, saya ingin menambahkan bahwa ini juga tentang keamanan. Pernah nonton film Office Space? Jika pengembang yang tidak puas membangun aplikasi perbankan di mesin lokalnya dan tidak ada orang lain yang melihatnya atau mengujinya ... BOOM. Superman III.

Greg
sumber
benar-benar @Greg! Semua orang di sini sepertinya melewatkan bagian itu. Saat ini saya sedang mengerjakan proses kontrol perubahan untuk kepatuhan yang memerlukan penerapan departemen sekunder untuk produksi. Kecuali Anda ingin mengajari TI cara menggunakan Visual Studio dan menerapkan yada yada yada ... ini memberi Anda cara untuk melakukan ini dengan klik cepat. Tidak yakin bagaimana ini dianggap "tidak berguna" seperti yang dikatakan beberapa orang.
gcoleman0828
3

Mesin ini digunakan untuk beberapa alasan, semuanya berusaha membantu Anda menyediakan produk yang unggul.

Salah satu kegunaannya adalah untuk mensimulasikan konfigurasi pengguna akhir yang khas. Produk tersebut mungkin berfungsi di komputer Anda, dengan semua alat pengembangan dan pustaka yang disiapkan, tetapi pengguna akhir kemungkinan besar tidak akan memiliki konfigurasi yang sama seperti Anda. Dalam hal ini, pengembang lain juga tidak akan memiliki pengaturan yang sama persis dengan Anda. Jika Anda memiliki jalur hardcode di suatu tempat dalam kode Anda, itu mungkin akan berfungsi pada mesin Anda, tetapi ketika Dev El O'per mencoba membuat kode yang sama, itu tidak akan berfungsi.

Juga dapat digunakan untuk memantau siapa yang terakhir kali merusak produk, dengan pembaruan apa, dan di mana produk mengalami kemunduran. Setiap kali kode baru dicentang, server build akan membangunnya, dan jika gagal, jelas bahwa ada sesuatu yang salah dan pengguna yang melakukan terakhir adalah kesalahannya.

samoz
sumber
2

Untuk kualitas yang konsisten dan agar build 'dari mesin Anda' menemukan kesalahan lingkungan dan agar file apa pun yang Anda lupa check in ke kontrol sumber juga muncul sebagai kesalahan build.

Saya juga menggunakannya untuk membuat penginstal karena ini membutuhkan banyak waktu untuk dilakukan di desktop dengan penandatanganan kode, dll.

Ryan O'Neill
sumber
1

Kami menggunakan satu sehingga kami tahu bahwa kotak produksi / pengujian memiliki pustaka yang sama dan versi pustaka yang terinstal seperti yang tersedia di server build.

RC.
sumber
1

Ini tentang manajemen dan pengujian untuk kami. Dengan server build, kami selalu tahu bahwa kami dapat membangun baris "trunk" utama kami dari kontrol versi. Kita bisa membuat master install dengan satu klik dan mempublikasikannya ke web. Kami dapat menjalankan semua pengujian unit kami setiap kali kode diperiksa untuk memastikannya berfungsi. Dengan mengumpulkan semua tugas ini ke dalam satu mesin, akan lebih mudah untuk melakukannya dengan benar berulang kali.

Paul Alexander
sumber
1

Anda benar bahwa pengembang dapat membuat mesin mereka sendiri.

Tetapi ini adalah beberapa hal yang dibeli oleh server build kami, dan kami bukanlah pembuat build yang canggih:

  • Masalah kontrol versi (beberapa telah disebutkan dalam tanggapan sebelumnya)
  • Efisiensi. Pengembang tidak perlu berhenti untuk membuat build secara lokal. Mereka dapat memulainya di server dan melanjutkan ke tugas berikutnya. Jika build besar, maka mesin dev tidak akan digunakan lagi. Bagi mereka yang melakukan integrasi berkelanjutan dan pengujian otomatis, bahkan lebih baik.
  • Sentralisasi. Mesin build kami memiliki skrip yang membuat build, mendistribusikannya ke lingkungan UAT, dan bahkan ke tahap produksi. Menyimpannya di satu tempat mengurangi kerumitan untuk menyinkronkannya.
  • Keamanan. Kami tidak melakukan banyak hal khusus di sini, tetapi saya yakin sysadmin dapat membuatnya sedemikian rupa sehingga alat migrasi produksi hanya dapat diakses di server build oleh entitas resmi tertentu.
Bernard Dy
sumber
1

Mungkin aku satu-satunya ...

Saya pikir semua orang setuju bahwa seseorang harus melakukannya

  • menggunakan repositori file
  • lakukan pembangunan dari repositori (dan dalam lingkungan yang bersih)
  • menggunakan server pengujian berkelanjutan (misalnya cruise control) untuk melihat apakah ada yang rusak setelah "perbaikan" Anda

Tetapi tidak ada yang peduli tentang versi yang dibuat secara otomatis. Ketika ada sesuatu yang rusak dalam pembuatan otomatis, tetapi sekarang tidak lagi - siapa yang peduli? Ini sedang dalam proses. Seseorang memperbaikinya.

Saat Anda ingin membuat versi rilis, Anda menjalankan build dari repositori. Dan aku cukup yakin Anda ingin tag versi dalam repositori pada yang waktu dan tidak setiap enam jam ketika server tidak bekerja itu.

Jadi, mungkin "server build" hanyalah istilah yang salah dan sebenarnya "server pengujian berkelanjutan". Kalau tidak, itu terdengar sangat tidak berguna.

Stroboskop
sumber
0

Server build memberi Anda semacam opini kedua tentang kode Anda. Saat Anda check in, kode tersebut akan diperiksa. Jika berhasil, kodenya memiliki kualitas minimum.

Burkhard
sumber
0

Selain itu, ingatlah bahwa bahasa tingkat rendah membutuhkan waktu lebih lama untuk dikompilasi daripada bahasa tingkat tinggi. Sangat mudah untuk berpikir, "Baiklah, proyek .Net saya terkompilasi dalam beberapa detik! Apa masalahnya?" Beberapa waktu yang lalu saya harus mengotak-atik beberapa kode C dan saya lupa berapa lama lagi untuk mengkompilasi.

Spencer Ruport
sumber
IMHO, itu bukan tentang bahasa tingkat rendah vs. bahasa tingkat tinggi, melainkan tentang sistem modul C yang rusak / tidak ada (yaitu menyertakan file) vs. bahasa dengan sistem modul yang berfungsi.
Elmar Zander
0

Server build digunakan untuk menjadwalkan tugas kompilasi (misalnya build nightly) dari project besar yang biasanya terletak di repositori yang terkadang memerlukan waktu lebih dari beberapa jam.

citn
sumber
0

Server build juga memberi Anda dasar untuk escrow, yang dapat menangkap semua bagian yang diperlukan untuk mereproduksi build jika orang lain mungkin memiliki hak untuk mengambil kepemilikan.

Greg Domjan
sumber