Sürekli entegrasyon servisi için “temiz kayrak sistemi” sağlamanın etkili yolu


10

Projemiz için sürekli bir entegrasyon (CI) hizmeti kurmak istiyoruz. Bu CI hizmeti, dağıtım da dahil olmak üzere proje hayatının tüm yönlerini kontrol etmelidir.

Yani, her yinelemede bir CI aracısının temiz bir sistem (özellikle Ubuntu Sunucusu) almasını, projemizi oraya dağıtmasını ve testler yapmasını istiyoruz.

Ekosistemimiz oldukça sıra dışı olduğu için muhtemelen CI hizmetini kendimiz sıfırdan yazardık. Soru şudur: Her bir CI yinelemesi için nasıl etkili bir arduvaz sistemi nasıl sağlanır?

Proje dağıtımı birkaç Debian paketi kurar, birkaç nginx sitesi yapılandırır ve ayrıca sistem genelinde uygulama diline özgü paket yöneticisine (LuaRocks) bazı paketler yükler. Bundan daha müdahaleci bir şey yok (inanıyorum). Bu nedenle, mutlak izolasyon ve temizlik sağlamaktan daha hızlı (modern donanımda bir dakika içinde daha hızlı - daha iyi) temiz bir sayfa oluşturmak daha önemlidir.

İhtiyacımız olan şeyi yapmanın iki yolunu görüyorum:

  • Ya bir tür hapishane kur (lxc gibi, belki).
  • Veya anlık görüntü çekebilen bir sanal makine kurun ve kullanın.

Fakat bu noktada karar verecek kadar bilgim yok.

Ne önerirsiniz? Başka seçenekler var mı? Belirli araç adları var mı?

Not: CI hizmeti, Citrix XenServer misafirinin içinde çalıştırılır. Ücretli çözümler fiyatlar makul ise sorun yok. (Genellikle bu alanda makul değildirler.) Uzak CI çözümleri iyi değil.

Yanıtlar:


5

Şef / Vagrant'a bir göz atın . Yeterince hızlı olup olmayacağından emin değilim, ama bakmak için bir şey.

Chef'e aşina değilseniz, sunucuların basit kod tabanlı provizyonuna izin vermek için tasarlanmış bir sunucudur. Web yayınlarından birine göz atmanızı tavsiye ederim. Django Chef Web Yayını

Vagrant, veewee, chef-solo & knife-solo şeyler Bu bir yapmak istediğiniz çoğu kapsar.

Vagrant Blog yazısı Vagrant kullanarak bir sunucunun hızlı kurulumunu gösteren bir blog yazısı.


Teşekkür ederim. Cevabınızda daha fazla ayrıntı sağlamayı düşünüyor musunuz?
Alexander Gladysh

Bunu kendim için kullanmadım, yapabileceğim tek şey yardımcı olacağını düşündüğüm birkaç bağlantı yayınlamak.
Philip Tinney

13

Jenkins'e bir bak . VMWare veya VirtualBox veya Amazon / a Okaliptüs bulutundaki sanal makinelerde derlemeler çalıştırmanıza izin veren eklentilere sahiptir . Bulutta çalışan sanal makineler için, paketleri yüklemek gibi adımlar atabileceğiniz bir init betiği belirtebilirsiniz.


Teşekkürler, ancak Jenkins bir CI sunucusudur ve kendimizi oluşturmak için araçlar bilmek istiyorum.
Alexander Gladysh

2
@AlexanderGladysh Neden tekerleği yeniden icat etmek istiyorsun? Jenkins derlemeleri, make dosyalarından düz kabuk betiklerine kadar her şeyi çalıştırabilir, ayrıca sağlam bir arayüze, mükemmel desteğe ve birçok eklentiye sahiptir.
Yapınız

Jenkins'i kullanmak istemeseniz bile, bulut tabanlı bir şeyin sizin için gitmenin yolu olacağını düşünüyorum. Bir makine görüntüsünü istediğiniz yazılımı sağlayacak şekilde özelleştirebilir ve yalnızca başlangıç ​​zamanını azaltmak için örneği başlatırken sınamak üzere yapılandırma ve kod ekleyebilirsiniz.
Lars Kotthoff

Her neyse, Jenkins veya Jenkins yok, temiz kayrak OS anlık görüntülerini hızlı bir şekilde almak için ne kullanmalı? (Lütfen, üçüncü taraf bulutlarından bahsetmeyi bırakın - bu kendi sunucularımızda çalıştırılmalıdır.)
Alexander Gladysh

Kendi sunucularınızda bir Okaliptüs / OpenStack / ... bulutu mu çalıştırıyorsunuz?
Lars Kotthoff

2

VM altyapısını kullanıyor ve bir temel şablon oluşturuyor veya bulutu @LarsKotthoff'un önerdiği gibi kullanıyorum. Onları hızlı bir şekilde döndürmek kolaydır ve nereden başladığınızdan emin olabilirsiniz.

Ancak, sonuçta neler olduğunu düzenlemek için VM'nin dışında bir şeye ihtiyacınız olacak (makineyi kurun ve makinede istediğiniz işlemi başlatın). Jenkins'e daha sonra incelenmek üzere senaryo çıktılarını yakalama yeteneği için bakardım.

Jenkins bir CI sunucusu olarak başlasa da, birlikte çalıştığım birçok kuruluş bunu bundan çok daha fazlası için kullanıyor, gerçekten şeyleri başlatmak (manuel veya planlanmış) ve sonuçları yakalamak ve olanları beklendiği gibi doğrulamak için bir araçtır. Ve çok esnektir.


Teşekkürler, ancak işleri Xen VM örneğinin içine kurmak istiyorum, dışarıda değil - bu benim özel durumumda düzenlemek çok daha kolay. Jenkins'e bakacağım, ama hala daha dar bir çözüm arıyorum.
Alexander Gladysh

Ayrıca, lütfen "VM altyapısını kullanın ve bir temel şablon oluşturun" ile ilgili ayrıntılar hazırlayın.
Alexander Gladysh

2

Projemiz için sürekli bir entegrasyon (CI) hizmeti kurmak istiyoruz. Bu CI hizmeti, dağıtım da dahil olmak üzere proje hayatının tüm yönlerini kontrol etmelidir.

Jenkins bunlardan birkaçı tarafından bahsedildi. Senaryolarla temel oluşturabilirsiniz, ancak Jenkins size aynı esnekliği sunarak daha az ek yükü bir araya getirir.

Yani, her yinelemede bir CI aracısının temiz bir sistem (özellikle Ubuntu Sunucusu) almasını, projemizi oraya dağıtmasını ve testler yapmasını istiyoruz.

Proje dağıtımı birkaç Debian paketi kurar, birkaç nginx sitesi yapılandırır ve ayrıca sistem genelinde uygulama diline özgü paket yöneticisine (LuaRocks) bazı paketler yükler. Bundan daha müdahaleci bir şey yok (inanıyorum). Bu nedenle, mutlak izolasyon ve temizlik sağlamaktan daha hızlı (modern donanımda bir dakika içinde daha hızlı - daha iyi) temiz bir sayfa oluşturmak daha önemlidir.

Sanal makine görüntüleri işte burada devreye giriyor. Temiz görüntünüzü ayarlayabilir ve her makinenin bir çatalını başlatmasını sağlayabilirsiniz. Orijinal görüntü asla değiştirilmez, ancak testiniz farkı bilmez. Kesinlikle bir dakika içinde çalışan bir bootstrap görüntüsü elde edebilmelisiniz.

Ücretli çözümler fiyatlar makul ise sorun yok. (Genellikle bu alanda makul değildirler.) Uzak CI çözümleri iyi değil.

Aynı anda birden fazla makine çalıştırmak istiyorsanız, Nimbula'ya bakın ( utanıyorum ; onlar için çalışıyorum). Daha küçük dağıtımlar için ücretsizdir ve test etmek için kendi özel bulutunuzu ... veya başka bir şeyi bir araya getirmenize izin verir. Jenkins ve bir düzenleme dosyası arasında, ana makine sunucularını, test istemcilerini ve diğer her şeyi, herhangi bir etkileşim olmadan test kodunun tam gammut'unu otomatik olarak çalıştırmak için döndürebilirsiniz.


Ugh. Belki bugün yavaşım, ama Nimbula sitesini araştırmaya çalıştım, ancak pazarlamanın arkasındaki nedeni göremiyorum. İhtiyacım olan şeyin nasıl yapılacağını açıklayan aklı başında bir metne işaret etmek ister misiniz? (Yani bir konuk makine şablonu oluşturduk ve senaryodan her CI oturumu için
Alexander Gladysh

@AlexanderGladysh / Çok sayıda CI çalışması için çok sayıda makine kullanıyorsanız kullanışlıdır. En az 3 makineden oluşan bir kümeyi garanti etmek için yeterli iş yükünüz yoksa işe yaramaz.
Jeff Ferland
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.