Sürekli bir entegrasyon kurulumunun felsefesi ve tasarımı konusunda yardıma ihtiyacım var.
Mevcut CI kurulumumuz buildbot kullanıyor. Tasarım yapmaya başladığımda, tüm yapıyı bir kerede, bir gecede çalıştırmak için uyarlanmış ısmarlama bir CI kurucusunu miras aldım (kesinlikle, kesinlikle değil, bir yıl önce tasarımına katıldım). Bir süre sonra bunun yetersiz olduğuna karar verdik ve nihayetinde buildbot'u seçerek farklı CI çerçevelerini keşfetmeye başladık. Buildbot'a geçişteki hedeflerimden biri (tüm whiz-bang ekstralarının tadını çıkarmanın yanı sıra), ısmarlama gece üreticimizin bazı yetersizliklerinin üstesinden gelmekti.
Bir an için beni mizah et, ve miras aldığımı açıklamama izin ver. Şirketim için kod tabanı, her biri bir düzine iç kütüphaneden birine (ve 3. parti kütüphanelerine de) bağımlı olan neredeyse 150 benzersiz c ++ Windows uygulamasıdır. Bu kütüphanelerin bazıları birbirine bağımlıdır ve (birbirleriyle hiçbir ilgileri olmasa da) bu kütüphanenin aynı derlemesi ile oluşturulması gereken bağımlı uygulamalara sahiptir. Bu uygulamaların ve kitaplıkların yarısı "eski" ve taşınabilir değil olarak kabul edilir ve IBM derleyicisinin birkaç farklı yapılandırmasıyla (benzersiz alt sınıfları yazdığım Compile
) ve diğer yarısı da görsel stüdyo ile inşa edilmelidir .ShellCommand
s, çünkü VSS desteği yoktur).
Orijinal gece yapımcımız her şeyin kaynağını indirdi ve belirli bir sırayla bir şeyler yaptı. Yalnızca tek bir uygulama oluşturmanın, bir düzeltme seçmenin veya bir şeyleri gruplamanın bir yolu yoktu. Bir dizi uygulama oluşturmak için sanal makineler piyasaya sürecekti. Çok sağlam değildi, dağıtılamadı. Çok genişleyemezdi. Buildbot'taki tüm bu sınırlamaların üstesinden gelmek istedim.
Bunu ilk yapma şeklim, inşa etmek istediğimiz her bir uygulama için giriş oluşturmak (bunların 150'si kadar), daha sonra gruplar halinde çeşitli uygulamalar oluşturabilecek tetiklenmiş zamanlayıcılar oluşturmak ve daha sonra bu grupları genel bir gece oluşturma zamanlayıcısı altında toplamaktı. Bunlar özel köleler üzerinde çalışabilir (artık sanal makine chicanery yok) ve istersem yeni köleler ekleyebilirim. Şimdi, zamanlamanın dışında tam bir derleme yapmak istiyorsak, bu tek bir tıklamadır, ancak istediğimiz takdirde sadece bir uygulama da oluşturabiliriz.
Ancak bu yaklaşımın dört zayıf yönü vardır. Birincisi, kaynak ağacımızın karmaşık bağımlılık ağıdır. Yapılandırma bakımını basitleştirmek için tüm inşaatçılar büyük bir sözlükten üretilir. Bağımlılıklar, son derece sağlam olmayan bir şekilde alınır ve oluşturulur (yani, hedef hedef sözlüğümdeki bazı şeyleri kapatmak). İkincisi, her derlemede göz atmak ve web arayüzünde bakmak zor olan 15 ila 21 derleme adımı vardır ve yaklaşık 150 sütun olduğundan, yüklenmesi sonsuza kadar sürer (30 saniyeden birkaç dakikaya kadar düşünün). Üçüncüsü, artık hedef oluşturma hedefleri hakkında otomatik bir keşifimiz yok (iş arkadaşlarımdan biri bana bu konuda ne kadar fazla dokunsa da, ilk etapta bize neyin sahip olduğunu görmüyorum). En sonunda,
Şimdi, yeni gelişime geçerek, g ++ ve subversion kullanmaya başlıyoruz (eski veri havuzunu taşımıyor, sadece yeni şeyler için). Ayrıca, (bir daha gibi ... "daha" yanlış bir resim verebilir daha birim test yapmak başlıyor herhangi ) ve entegrasyonu (piton kullanarak) test. Bunları mevcut yapılandırmamın içine nasıl yerleştireceğimizi anlamakta zorlanıyorum.
Peki, burada felsefi açıdan nerede yanlış yaptım? En iyi nasıl ilerleyebilirim (buildbot ile - üzerinde çalışmam için lisansa sahip olduğum bulmacanın tek parçası), bu yüzden yapılandırmam gerçekten korunabilir mi? Tasarımımın bazı zayıf yönlerini nasıl giderebilirim? Büyük (muhtemelen aşırı) karmaşık kod tabanları için CI stratejileri açısından gerçekten işe yarayan nedir?
DÜZENLE:
Sorunumu açıkladığımı sanıyordum, ama açıkçası yeterince açık değildim. Ben am değil CI platformları değiştirme öneri aranıyor. O olduğu değil ne olacak ve öne süren cevaplar kabul almazsınız. Ne istiyorum bilmek Başkalarının CI kullanarak karmaşık codebases yönetmek nasıl. Bir düzine kare farklı ürünüm var ve rüzgara dağılmış bağımlılıklarım var ve hepsi farklı. Bununla nasıl başa çıkacağımı bilmek istiyorum.