Bazı VCS sistemlerinde bir depo tarafından tutulan bir ürünün kod tabanının, kod tabanının muhtemelen birkaç ürün içerdiği düşünülebilecek bir noktaya dönüştüğü yaygın bir senaryodur . Kod tabanının, her biri tek bir ürüne ayrılan birkaç VCS havuzuna bölünmesi birkaç avantajdan yararlanabilir (bkz . Aşağıdaki şişirme veri havuzu modeli üzerinde VCS veri havuzu başına bir ürüne sahip olmanın avantajları ). Teknik açıdan, çoğu VCS bu işlemi desteklediğinden kod tabanını bölmek oldukça kolay bir adımdır. Bölünmüş ancak otomatik test, sürekli teslimat, hizmet entegrasyonu veya izleme ile ilgili mühendislik konuları yükselebilir (bkz Sorunlar bölünmüş tarafından gündemeBu nedenle böyle bir bölünme yapmayı planlayan kuruluşların, bu geçişin mümkün olduğunca sorunsuz bir şekilde nasıl gerçekleştirileceğini, yani dağıtım ve izleme boru hattını kesintiye uğratmadan nasıl bilmesi gerektiğini bilmesi gerekir. Bunun ilk adımı, muhtemelen proje kavramını ve monolitik bir kod tabanındaki bölünmenin nasıl tanımlanacağını daha iyi anlamaktır .
Bu soruların cevaplarında şunu görmek istiyorum:
Mevcut bir kod tabanındaki ürünleri gerçekten tanımlamak için pratik kriterler veren, ürünün ne olduğunun çalışma tanımını verme girişimi.
Bu çalışma tanımına göre, gerçekten bölünmeyi gerçekleştiren bir plan hazırlayın. Kod tabanının, sürekli entegrasyon ve sürekli dağıtım uygulayan tam otomatik bir sdlc tarafından işlendiği basitleştirici varsayımı yapabiliriz . Diğer bir deyişle, her dal, geçerli kod tabanına uygulanan otomatik bir testsuite tarafından doğrulanır ve her bir "sihirli" dalla birleştirildiğinde , test edilen ve dağıtılan ürün artefaktları oluşturulur . ( Ürün artefaktları , örneğin kaynak tarballs, dokümantasyon, ikili yazılım paketleri, Docker görüntüleri, AMI'ler, unikernellerdir.)
Böyle bir plan,
Bölünme ile ortaya çıkan sorunlar
Otomatik test prosedürleri önceden var olan monolitik depo ve bölünmüş depolarla nasıl ilişkilidir?
Otomatik dağıtım prosedürleri önceden var olan yekpare depo ve bölünmüş depolarla nasıl ilişkilidir?
Otomatik dağıtım yordamlarının kodları nerede saklanır?
Depolanmış altyapı , izleme ve yüksek kullanılabilirlik stratejileri nerede?
Bir geliştiricinin bir kerede yalnızca bir kod tabanına ihtiyaç duyması nasıl sağlanır (ancak olası diğer kod tabanlarındaki eserleri kullanır).
Git-Bisect gibi bir araç nasıl
Marjinal not: VCS veri havuzu başına şişkin depo modeli üzerinde bir ürün bulundurmanın faydaları
Belirli bir ürün için kod tabanını tutan birkaç küçük depoya sahip olmak, “şişirmeli depo” yaklaşımına göre aşağıdaki avantajlara sahiptir:
Bir şişkinlik deposuyla, bir ürün kararsız olduğunda bir sürümü geri almak zordur, çünkü geçmiş diğer ürün geçmişiyle karıştırılır.
Bir şişkinlik deposuyla, proje geçmişini veya çekimleri gözden geçirmek zordur, küçük depolarla bu bilgileri okuma olasılığımız daha yüksektir. (Bu, git gibi VCS'ye özgü olabilir, svn'den farklı olarak, alt ağaçlara ödeme yapamayız!)
Bir şişkinlik deposu ile geliştiğimizde çok daha fazla şube dansı yapmak zorundayız. N depomuz varsa, N dalında paralel olarak çalışabiliriz, sadece 1 depomuz varsa, yalnızca bir dalda çalışabiliriz veya işlenmesi zor olan bir sürü çalışan kopyaya sahip olabiliriz.
Birkaç küçük depoda, kütükler projenin ısı haritasını verir. Geliştirme ekibinde bilgi yayılımının bir vekili olarak bile kullanılabilirler: 3 aydan beri repo X'te taahhütte bulunmazsam, gelişmelerden haberdar olmak için beni repo X üzerinde çalışan bir ekibe atamak iyi olabilir. bu bileşende.
Küçük depolarla, bir bileşene net bir genel bakış elde etmek daha kolaydır. Her şey tek bir büyük depoya girerse, her bir bileşeni tanımlayan somut bir eser yoktur ve kod tabanı kolayca büyük çamur topuna doğru kayabilir .
Küçük depolar bizi bileşenler arasındaki arabirimler üzerinde çalışmaya zorlar. Ancak iyi bir kapsülleme yapmak istediğimiz için, bu zaten yapmamız gereken bir iş, bu yüzden bunu küçük depolar için bir avantaj olarak sayacağım.
Birkaç küçük depo ile birkaç ürün sahibine sahip olmak daha kolaydır.
Birkaç küçük depoda, tam bir depo ile ilgili olan ve otomatik olarak doğrulanabilen basit kod standartlarına sahip olmak daha kolaydır.