Cara efektif untuk memastikan "sistem batu tulis bersih" untuk layanan integrasi berkelanjutan

10

Kami ingin menyiapkan layanan integrasi berkelanjutan (CI) untuk proyek kami. Layanan CI itu harus mengendalikan semua aspek kehidupan proyek, termasuk penyebaran.

Artinya, kami ingin agen CI di setiap iterasi mengambil sistem yang bersih (khususnya Ubuntu Server), menyebarkan proyek kami di sana dan menjalankan tes.

Kami mungkin akan menulis sendiri layanan CI, dari awal, karena ekosistem kami agak tidak biasa. Pertanyaannya adalah: bagaimana cara efektif menyediakan sistem batu tulis bersih untuk setiap iterasi CI?

Penyebaran proyek menginstal beberapa paket Debian, mengkonfigurasi beberapa situs nginx, dan juga menginstal beberapa paket dalam implementasi manajer paket khusus bahasa (LuaRocks), di seluruh sistem. Tidak ada yang lebih mengganggu dari itu (saya percaya). Jadi, lebih penting untuk dapat mengatur cepat sabak bersih (dalam satu menit pada perangkat keras modern, lebih cepat - lebih baik) daripada memastikan isolasi dan kebersihan mutlak.

Saya melihat dua cara bagaimana melakukan apa yang kita butuhkan:

  • Entah mengatur semacam penjara (seperti lxc, mungkin).
  • Atau instal beberapa mesin virtual yang dapat melakukan snapshot, dan gunakan itu.

Tetapi pada titik ini saya tidak memiliki cukup informasi untuk memutuskan.

Apa yang akan Anda sarankan? Ada opsi lain? Adakah nama alat khusus?

Catatan: Layanan CI akan dijalankan di dalam tamu Citrix XenServer. Solusi berbayar OK jika harga wajar. (Biasanya mereka tidak masuk akal dalam bidang ini.) Solusi CI jarak jauh tidak OK.

Alexander Gladysh
sumber

Jawaban:

5

Lihatlah Chef / Vagrant . Tidak yakin apakah itu akan cukup cepat, tetapi sesuatu untuk dilihat.

Kalau-kalau Anda tidak terbiasa dengan Chef, itu adalah server yang dirancang untuk memungkinkan penyediaan server berbasis kode sederhana. Saya akan merekomendasikan untuk melihat salah satu webcast. Django Chef Webcast

Hal-hal yang menyenangkan, veewee, chef-solo & pisau-solo Saya pikir ini mencakup sebagian besar dari apa yang ingin Anda lakukan.

Posting Blog Vagrant Posting blog yang menunjukkan pengaturan cepat server menggunakan Vagrant.

Philip Tinney
sumber
Terima kasih. Apakah Anda ingin memberikan rincian lebih lanjut dalam jawaban Anda?
Alexander Gladysh
Saya belum menggunakannya sendiri untuk ini, yang bisa saya lakukan hanyalah memposting beberapa tautan yang saya pikir akan membantu.
Philip Tinney
13

Lihatlah Jenkins . Ini memiliki plugin yang memungkinkan Anda untuk menjalankan membangun di mesin virtual di VMWare atau VirtualBox atau di Amazon / awan Eucalyptus . Untuk mesin virtual yang berjalan di cloud, Anda dapat menentukan skrip init tempat Anda dapat mengambil langkah-langkah seperti menginstal paket.

Lars Kotthoff
sumber
Terima kasih, tapi Jenkins adalah server-CI dan saya ingin tahu tentang cara membangunnya sendiri.
Alexander Gladysh
2
@AlexanderGladysh Mengapa Anda ingin menemukan kembali roda? Jenkins build dapat menjalankan semuanya, mulai dari membuat file hingga skrip shell biasa, plus memiliki antarmuka yang kuat, dukungan hebat, dan banyak plugin. Bahkan jika build Anda sangat rumit, itu harus berupa skrip shell di mana jenkins dapat dijalankan
TheLQ
Bahkan jika Anda tidak ingin menggunakan Jenkins, saya pikir sesuatu berbasis cloud akan menjadi cara untuk Anda. Anda dapat menyesuaikan gambar mesin untuk menyediakan perangkat lunak yang Anda inginkan dan hanya menambahkan konfigurasi dan kode untuk menguji ketika memulai mesin virtual untuk mengurangi waktu mulai.
Lars Kotthoff
Ngomong-ngomong, Jenkins atau bukan Jenkins, apa yang harus digunakan untuk mendapatkan snapshot OS yang bersih dengan cepat? (Tolong, berhentilah menyebutkan awan pihak ketiga - ini harus dijalankan di server kami sendiri.)
Alexander Gladysh
Jalankan cloud Eucalyptus / OpenStack / ... di server Anda sendiri?
Lars Kotthoff
2

Saya akan menggunakan infrastruktur VM dan membuat templat dasar, atau menggunakan cloud seperti yang disarankan @LarsKotthoff. Mudah untuk memutarnya dengan cepat, dan Anda bisa yakin dari mana Anda memulainya.

Namun Anda pada akhirnya akan membutuhkan sesuatu di luar VM untuk mengatur apa yang sedang terjadi (setup mesin, dan memulai proses apa pun yang Anda inginkan pada mesin). Saya akan melihat Jenkins karena kemampuannya menangkap keluaran skrip untuk diperiksa nanti.

Meskipun Jenkins Dimulai sebagai server CI, banyak organisasi yang telah bekerja sama dengan saya sekarang menggunakannya untuk lebih dari itu, itu benar-benar adalah alat untuk memulai sesuatu (secara manual atau terjadwal) dan menangkap hasil, dan memvalidasi apa yang terjadi seperti yang diharapkan. Dan itu sangat fleksibel.

teknik ulet
sumber
Terima kasih, tapi saya ingin mengatur hal-hal tepat di dalam instance Xen VM, bukan di luar - ini jauh lebih mudah untuk diatur dalam kasus khusus saya. Saya akan mencari Jenkins, tetapi saya masih mencari solusi yang lebih sempit.
Alexander Gladysh
Juga, tolong jelaskan tentang "gunakan infrastruktur VM dan buat templat dasar".
Alexander Gladysh
2

Kami ingin menyiapkan layanan integrasi berkelanjutan (CI) untuk proyek kami. Layanan CI itu harus mengendalikan semua aspek kehidupan proyek, termasuk penyebaran.

Jenkins telah disebutkan oleh beberapa orang. Anda dapat menggunakan skrip, tetapi Jenkins akan memberi Anda semua fleksibilitas yang sama dengan biaya overhead yang lebih rendah untuk menyatukannya.

Artinya, kami ingin agen CI di setiap iterasi mengambil sistem yang bersih (khususnya Ubuntu Server), menyebarkan proyek kami di sana dan menjalankan tes.

Penyebaran proyek menginstal beberapa paket Debian, mengkonfigurasi beberapa situs nginx, dan juga menginstal beberapa paket dalam implementasi manajer paket khusus bahasa (LuaRocks), di seluruh sistem. Tidak ada yang lebih mengganggu dari itu (saya percaya). Jadi, lebih penting untuk dapat mengatur cepat sabak bersih (dalam satu menit pada perangkat keras modern, lebih cepat - lebih baik) daripada memastikan isolasi dan kebersihan mutlak.

Di sinilah gambar mesin virtual berguna. Anda dapat mengatur gambar bersih Anda dan membuat setiap mesin meluncurkan garpu itu. Gambar asli tidak pernah dimodifikasi, tetapi pengujian Anda tidak akan tahu bedanya. Anda pasti dapat menjalankan image bootstrap dalam waktu satu menit.

Solusi berbayar OK jika harga wajar. (Biasanya mereka tidak masuk akal dalam bidang ini.) Solusi CI jarak jauh tidak OK.

Jika Anda sedang mencari beberapa mesin sekaligus, periksa Nimbula (saya tidak tahu malu; saya bekerja untuk mereka). Untuk penyebaran yang lebih kecil, ini gratis dan memungkinkan Anda menggabungkan cloud pribadi Anda untuk pengujian ... atau apa pun. Antara Jenkins dan file orkestrasi, Anda dapat memutar server host, menguji klien, dan yang lainnya untuk secara otomatis menjalankan sepenuhnya kode pengujian tanpa interaksi apa pun.

Jeff Ferland
sumber
Ugh. Mungkin saya lambat hari ini, tetapi saya mencoba menggali melalui situs Nimbula, tetapi tidak dapat melihat alasan di balik pemasaran berbicara. Apakah Anda ingin menunjukkan teks waras yang menjelaskan cara melakukan apa yang saya butuhkan? (Yaitu membuat template mesin tamu dan, dari skrip, instantiate dan bunuh untuk setiap sesi CI.)
Alexander Gladysh
@AlexanderGladysh Berguna jika Anda menggunakan banyak mesin untuk membangun dari / banyak pekerjaan CI. Tidak ada gunanya jika Anda tidak memiliki cukup beban kerja untuk menjamin sekelompok minimal 3 mesin.
Jeff Ferland