Şube kalite düzeyinde herhangi bir gerilemeyi garanti etmeyen bir CI aracı var mı?


10

Geleneksel olarak CI sistemleri , bir entegrasyon dalındaki kalite seviyelerinin izlenmesini , değişikliklerin zaten yapıldığı kod tabanında QA doğrulamaları gerçekleştirerek, gerilemeleri izleyerek ve insan müdahalesi için bildirim göndererek gerçekleştirir.

Ancak bu gerilemeler tespit edildiğinde, şube en azından ilgili KG doğrulaması başladığından beri belada olmuştur ve tüm suçlular belirlenene kadar bu durumda kalır (hatta daha da kötüleşir!), Onarımlar yapılır ve yeni bir KG doğrulaması şube kalite düzeyinin geri yüklendiğini onaylar. Şube, tüm bu süre boyunca normal gelişim için bloke edilmiş kabul edilebilir.

Bu tür gerilemelerin gerçekleşmesini gerçekten önleyebilen , yalnızca ön taahhütlü KG doğrulamaları gerçekleştirebilecek ve yalnızca ilgili taahhütlerle güncellenen kod tabanı da ön taahhütlü KG doğrulamaları geçecekse işlemlere izin verecek bir CI aracı var mı , böylece minimum garanti şube kalite seviyesi?

Güncelleme: varsayım, ilgili regresyonları tespit edebilmek için uygun kapsama sahip uygun otomatik KG doğrulamalarının, CI araçları tarafından çağrılması için mevcut olduğudur.


Bu soruyu anlamanın doğru yolunu (ve kendi cevabınızda kendi tavsiyenizi) merak ediyorum. Eğer "izleme" yi "gerçeklerden sonra" ve "önleme" ile "olmasını engellemiş" olsaydım, bu aşağı yukarı aynı soru olur mu? Ayrıca, farkı açıklamak için belki bazı örnek senaryolar ekleyebilirsiniz?
Pierre.Vriens

@ Pierre.Vriens Bu daha iyi mi?
Dan Cornilescu

Yanıtlar:


6

Anlayabildiğim kadarıyla, yapıyı bozan taahhütleri reddedecek bir araç arıyorsunuz - bir CI aracı muhtemelen kodunuzu gerçekten düzelterek regresyonları önleyemez, ancak kötü kod eklemenizi durdurabilir depoya.

Atlassian'ın Git kancalarının birkaç ilginç uygulaması var :

Sunucu tarafı ön alma kancaları, sürekli entegrasyon için özellikle güçlü bir iltifattır, çünkü kod, elit ninja koruyucuları gibi kötü koşullardan koruyan belirli koşulları karşılamadığı sürece geliştiricilerin kodu master'a itmesini önleyebilirler.

Git'i kullanıyorsanız, kancalar çok güçlüdür (ve SVN , Mercurial ve diğer sürüm kontrol sistemleri için benzer kancalar vardır ) ve bunları ön işleme kontrolleri yapmak için kullanmanın yararlı olduğunu düşünebilirsiniz.

Git belgelerinde , bu kullanım senaryosuna kolayca uyarlanabilecek belirli kriterleri karşılamayan itmeleri reddetmek için bir kanca oluşturma sayfası vardır .

Bununla birlikte, birçok insan taahhütlerin reddedilmesinin bir dalda kötü bir fikir olduğunu iddia edecektir - featureyapı bir nedenle herhangi bir nedenle bozulduğunda, hatayı düzeltmek yerine CI sisteminize karşı savaşmak için zaman harcayacaksınız.

On masterbunu hep oluşturur sağlamak istiyoruz çünkü dalı, bu kırık birleştirmeleri reddetmek mantıklı olabilir. Bir İçin featuredalı, sen olacaktır kaçınılmaz şeyleri kırmak ve kod üretime gitmiyor çünkü artık , aslında senin tamamen taahhüt reddetmek daha Sadece seni uyarmak daha mantıklı.


Peki, oluşturulan bir sw görüntüsü ne işe yarar, ancak DOA testlerden ileri geliyor? Devs, kod değişikliklerini oluştursalar bile test edemez, bu yüzden tıpkı bloke olurlar. Bu nedenle, genel olarak, 2 çelişkili gereksinimi dengeleyerek seçilen minimum KG kontrolünden geçmeyen herhangi bir şeye bağlılık reddini uzatırım: engellemeden korunan geliştiricilerin sayısını en üst düzeye çıkarmak için mümkün olduğunca yüksek ve KG doğrulama gecikmelerinin mümkün olmadığı kadar düşük süreci çok yavaşlatmayın.
Dan Cornilescu

Bunun bir örneği, bir çekme isteğinin birleştirilip birleştirilemeyeceği konusunda bazı kısıtlamalar getirebileceğiniz çekme isteği modeli olabilir. Örneğin, (şirketim) Atlassian Bitbucket Sunucusu'nu kullanıyoruz ve bir çekme isteğinin birleştirilmesine izin verilmeden önce belirli bir dal için en az N sayıda onay ve X sayısı oluşturma derlemesi gerektiren seçenekler var. Bu kesinlikle reddetmez. Ancak testler başarısız olduğunda veya diğer gözler henüz kodu görmediğinde yanlışlıkla birleşmeyi önler.
Andy Shinn

@AndyShinn: Evet, oldukça faydalı buluyorum - GitHub ayrıca, genellikle yararlı olan çekme isteklerinde korumalı dallar ve denetimler de sunuyor .
Aurora0001

1
Özellik dallarında bozuk kodlara izin vermenin bir argümanı, geliştiricilerin henüz hazır olmasa bile repo üzerinde çalıştıkları kodu itmesine izin vermesidir. Bu, işler gitmeye hazır olmadan önce erken kod / mimari incelemeleri için başkalarıyla kod paylaşmak, hata ayıklama sorunlarına yardımcı olmak veya tatile ayrılan birinin kısmen başkalarının alabileceği işleri yapmak için yararlı olabilir. Özellik dalları için, sadece linter ve ön taahhüt kancaları gibi şeyler koyardım.
bradym

2

Hiçbir araç, hiçbir regresyonu garanti edemez - bu, testlerinize onları çalıştıran araçtan çok daha fazla bağlıdır. Ancak, yakalanacak regresyonların entegrasyon dalına girmesini önlemeye yardımcı olabilirsiniz. Bunu ön işleme kancaları ile yapabilirsiniz, ancak çekme istekleri ile genellikle daha kolaydır (ki umarım zaten eş kodu incelemesi için kullanıyorsunuzdur).

Bir şube, yukarı akışıyla (PR'nin birleştiği yerde) güncelse ve testleri geçerse, birleştirme işleminden sonra yine de geçer; birleştirme işleminden sonra hedef dalın durumu birleştirme işleminden önce kaynak dalın durumuyla eşleşir.

Hem bir PR'daki kaynak dalın hedefle güncel olup olmadığını ve hem de geçen bir CI yapısına sahip olup olmadığını belirtmek genellikle (zor kullanılan araçlara bağlı olarak) zor değildir. Bunu, çekme isteğini birleştirmek için bir gereklilik olarak (ilke olarak ve / veya yazılımda zorunlu olarak) kullanabilirsiniz.


"Bir şube, yukarı yönlü (PR'nin birleştiği yer) ile güncelse ve testleri geçerse, birleştirme işleminden sonra yine de geçer" - Neden? Birleşme bir süreksizliktir, bilinmeyenleri getirir. Çatışmalar gibi - kod çözülene kadar kod oluşturmayabilir. Sen lüzum herhangi şube birleştirme için geçmesini testleri ve Onayla çalıştırmak için. Hızlı oynamak için bile söyleyebilirim, eğer güvenli oynamak istiyorsanız. Bkz. Apartsw.com/insights/2016/11/16/…
Dan Cornilescu

Ee, evet, böyle bir garanti mümkün, cevabımı kontrol et. Belki de açıklığa kavuşturmalıyım: regresyon ile, şube taban çizgisi sonuçlarının (ve yanlış pozitiflerin olasılığını göz ardı ederek, bunların taban çizgisini eğebilecekleri, her şeyi raydan çıkarabilecekleri ve insan müdahalesi gerektirebilecekleri gibi ele alınması) daha kötü sonuçlar demek istiyorum. Aralıklı yanlış negatifler sadece bir sıkıntıdır, şeyleri yavaşlatır, ancak halledilebilir.
Dan Cornilescu

Hiçbir regresyonu garanti edemezsiniz, sadece tespit edilen regresyonu garanti edemezsiniz. Bir değişiklik, bir testin yakalamadığı bir gerilemeye neden olursa, bu bir CI aracının herhangi bir garanti veremeyeceği bir gerilemedir. İki değişiklik kümesini birleştirmek bilinmeyenler getirirken, diğer yönü birleştirmeden önce bunu özellik dalında (yukarı akışı birleştirerek) yapmayı seçebilirsiniz. Kaynak hedefle güncelse, bu basit bir birleştirme (hızlı ileri alma) ve daha sonra hedef durum birleştirme işleminden önce kaynak durumla aynı olacaktır, dolayısıyla testler daha önce geçtiyse, geçeceklerdir.
Adrian

Ayrılan saçlar. CI aracı, hangi regresyonu önemsediğinizi tespit etmek ve böylece korumak için bir test ile yapılandırılabilir.
Birleşmeler

Demek istediğim, testleri yazarak bu korumayı sunan CI aracı değil, sensin. CI aracı, sağladığınız testlerin ötesinde herhangi bir garanti veremez.
Adrian

1

Reitveld ve Zuul gibi gerçek sürekli entegrasyon araçları (sadece sürekli testlerin aksine) yardımcı olabilir, ancak bunlar sadece yazdığınız testler ve yaptığınız kod incelemeleri kadar iyidir.


Ancak Reitveld, bir CI aracı değil, ortak bir kod inceleme aracı gibi görünüyor, bir şey mi kaçırıyorum? Şuna
Dan Cornilescu

Zuul gerçekten ilgili gibi gözüküyor, daha yakından inceleyeceğim.
Dan Cornilescu

Test yapmaz, ancak birleştirme engelleyici sistem olarak görev yapan şube yönetiminin bazı yönlerini ele alır, bu da birleştirme işlemini engelleyerek kötü kodun girmesini önlemek için en iyi seçimdir.
coderanger

Ne demek istediğini anlıyorum. Genel kod kalitesine yardımcı olabilir, ancak tek başına herhangi bir garanti vermez. Tüm KG doğrulamalarını bağımsız olarak geçen iki mükemmel iyi değişiklik, şubede toplandıklarında hala kırılmaya neden olabilir.
Dan Cornilescu

1

GitLAB'ı kullanın, yalnızca boru hattı başarılı olduğunda bir birleştirmeye izin vermek için proje ayarlarında ayarlayabilirsiniz, böylece gerçekten Sürekli Entegrasyona sahip olabilir, birleştirme onayları listesine KG'nizi ekleyerek ve Dinamik Ortamlar ile kalite güvenceniz olabilir. efendiyle birleşmeden önce.


Bu ancak bir önceki birleştirmenin tamamlanmasından önce 2. birleştirme işleminin KG denetimlerini başlatmasına izin vermezseniz çalışır, aksi takdirde 2. birleştirme birincisini görmez ve regresyonlara yer bırakır. Başka bir deyişle, birleştirmeler (KG kontrolleri dahil) tamamen serileştirilmeli, bu da büyük takımlar için ölçeklendirilmemelidir.
Dan Cornilescu

0

ApartCI , regresyonları tam olarak önlemek için tasarlanmış bir CI sistemidir, böylece düz veya artan şube kalitesi seviyesini garanti eder. Hala beta sürümündedir.

Merkezi taahhüt öncesi doğrulamalarını, bir değişikliğin ancak en son şube kalite seviyesini karşılamak veya aşmak için, ondan önce yapılan tüm diğer değişikliklerle birlikte doğrulandıktan sonra yapılmasını sağlayacak şekilde düzenler.

Bu, genellikle paralel olarak yapılan geleneksel geliştirici güdümlü ön taahhüt doğrulamalarına kıyasla temel farktır ve bu da hiçbir zaman birlikte test edilmeyen müdahale değişikliklerinin neden olduğu gerilemelere yer açar.

Araç aynı zamanda kolayca ölçeklenecek şekilde tasarlanmıştır - gelen aday değişikliklerinin çok yüksek oranlarını sürdürebilir ve aynı entegrasyon dalında çalışan 100/1000 geliştiricileri destekleyebilir.

Feragatname: Aracın yazarı ve onu sunan şirketin kurucusu değilim. Reklam için özür dileriz.


Feragatnameyi eklemeniz iyi, ancak şahsen kendi şirketinizi veya ürünlerinizi bir spam formu olmaya teşvik ederek bir soru sormayı ve kendinize cevap vermeyi düşünüyorum.
THelper


SnapCI bunu da yaptı. HUZUR İÇİNDE YATSIN.
paul_h

@paul_h, SnapCI ve önerilen yedek GoCD'sini bir şey eksik olmadıkça, her ikisi de taahhüt sonrası doğrulamalara dayanmaktadır (SCM'nin yoklanmasıyla tetiklenir), bu yüzden hala sadece izleniyorlar. Belki PR kontrolleri dışında, ancak bu kontroller tamamen serileştirilmedikçe, sadece regresyon oluşum oranlarını azaltabilir, ancak tamamen ortadan kaldıramazlar.
Dan Cornilescu

Dan, yoklama yok, kancalar. Ve henüz trunk / master ile birleştirilmemiş kısa ömürlü bir PR şubesine - trunkbaseddevelopment.com/game-changers/…
paul_h
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.