Sürekli Entegrasyon Sisteminize Bebek Bakmak


22

Benim takımım benim rollerden biri inşa kişi . Derleme komut dosyalarımızı korumaktan / güncellemekten ve sürekli entegrasyon sunucusunda 'sorunsuz bir şekilde oluşturduğumuzdan' eminim. Genellikle bu işi umursamıyorum, ancak çoğu zaman CI sunucusuna sürekli bakmakta gibi hissediyorum.

Bu iş zaman zaman sinir bozucu olabiliyor çünkü yapı bozulursa hikayeyi bırakmak zorunda kalıyorum ve üzerinde çalışıyorum ve yapı bozulmasını araştırıyorum. Derleme hataları her gün ekibimizde gerçekleşmektedir. Bazen geliştiriciler, yalnızca CI sunucusunda testlerin başarısız olması için taahhütte bulunmadan önce yerel olarak kurulmazlar. Bu durumda hızlı bir şekilde 'kötü niyetli' davranan kişiye ulaşmayı seviyorum, böylece yapı çok uzun süre bozulmaz. Bazen (çok daha az sıklıkta) CI sunucusunda hata ayıklanması gereken garip bir durum vardır.

Birçok olgun ekibin Sürekli Entegrasyon kullandığını biliyorum ama orada iyi uygulamalar hakkında pek fazla materyal yok.

Sorunlarım sürekli entegrasyonumuzun çok olgun olmadığını veya bu işin sadece bir parçası olduğunu mu gösteriyor?

İzlenecek bazı iyi uygulamalar nelerdir? Olgun sürekli entegrasyonun özellikleri nelerdir ?

Güncelleştirme

Bazı yorumları yanıtlamak yerine bunun yerine bir güncelleme yapacağım. Uygulamayı oluştururken derleme sunucusunun tam olarak ne yapacağını yapan basit ve basit bir komutumuz var. Tüm birim / entegrasyon ve bazı hızlı UI tabanlı testleri derleyecek, çalıştıracak.

Herkesin cevaplarını okumak, iki büyük problemimiz olabileceğini düşünüyor.

  1. Bir yapı başarısız olduğunda CI Sunucusu yeterince yüksek sesle şikayet etmiyor.
  2. Geliştiriciler, taahhütlerinin başarılı şekilde yerine getirildiğinden emin olmak için herkesin sorumluluğunu hissetmezler.

Ekibimde işleri zorlaştıran şey, büyük bir ekibimizin (10+ geliştirici) olması ve işte olmadığımız zamanlarda görev yapan birkaç denizaşırı ekip üyemiz olması. Takım büyük olduğundan ve sık sık küçük taahhütlerin tercih edildiğini belirlediğimiz için, bazen bir günde gerçekten çok fazla aktivite yapıyoruz.


16
Vay be, ben değil geliştiricilerin duydum test taahhütte bulunmadan önce kendi yerel makinede kod değil bina o? Bu pratik olarak suçlu .
Aaron,

2
@Alison: Bana "yapı kırma" her ne kadar gelmez kod işlemekle demektir Belki, bu yüzden o inşa . Başarısız bir test çok daha az kritik bir konudur; bu genellikle diğer geliştiricilerin işlerini yapmalarını engellemez.
Aaron,

1
@Aaronaught şahsen ben bunu otomatik olarak test etmekte başarısız olan ve bu nedenle "yapıyı kırmak" için başarısız bir kod olarak karşılıyordum.
Armand

2
Martin Fowler'tan bir soundbite alıntı yapmak
15’de

1
Bir konferans sırasında biri (doğru hatırlıyorsam, Ward Cunningham'dı) bana ekibinin pratiğini anlattı: yapıyı yıkayan kişi, üzerinde “yapıyı kırdım” kelimeleriyle gün boyunca bir tişört giymek zorunda kaldı. . Ayrıca tişörtün asla yıkanmamasından da bahsetti.
Doc Brown,

Yanıtlar:


29

Birincisi ve en önemlisi: Yapım sürecinden her kişi sorumludur . Takımınızdaki üyeler olgun değil gibi görünüyor ... Hiç kimse kod yazıp, çalışacağını umarak CI sunucusuna göndermeyerek kurtulmuyor. Kod vermeden önce, yerel makinelerinde test edilmelidir. Kontrol ettiğiniz kodun yapıyı bozmayacağından emin olmalısınız . Tabii ki, istemeden derleme kopması durumunda durumlar vardır (örneğin, eğer bir yapılandırma dosyası değiştirilmişse veya özensizce istenmeden yapılmışsa).

Çoğu CI sunucusu (yalnızca Hudson kullandım), yapının bozulmasına neden olan taahhütleri detaylandıran otomatik bir e-posta gönderir. Rolünüzün tek parçası, şüpheli neye uğradıklarını çözene kadar sert görünmelerini sağlamak.


3
Günün geç saatlerinde işten ayrılırlarsa ne olur? Başarılı bir yapı oluşturulduğundan emin olmadıkça, taahhüt edemeyeceğiniz bir kural olmalı mı?
c_maker

4
Tehdidin, tercih edilen küçük odaklılar yerine büyük kapsamlı taahhütleri teşvik edeceğinden korkuyorum.
c_maker

3
@c_maker: Küçük, odaklanmış komisyonların yapıyı bozması daha az olası olmaz mıydı ? Bana bir disiplin sorunu gibi geliyor, bir süreç sorunu değil.
Aaron,

6
İnşaatı kıranlar, ekibin herkes için tercih ettiği şekeri ne olursa olsun kahve / kek almaktır. Ya da gün boyu herkes için kahve alın ya da ... İnsanları göndermekten kaçınmaya zorlayacak kadar tehdit oluşturmazken, yapının istenmeyen bir şekilde kırılmasına neden olabilecek birçok önlem var. İkincisi, herkesin en azından haftada bir kez değişikliklerini yapmasını istemekle de biraz ele alınabilir. (Günde bir kez daha önemli bir şey üzerinde çalışırken çok sık
görülür

5
Yapıyı KİMDİR, sürece DOLANDIRAN kimin umurunda?

21

Ekibinde bir sorun var:

Yapı sorumlu olmak sunucunun sorumlusu olarak aynı değildir yapı .

“İş” yapmak için kodunu kontrol eden kişinin sorumluluğundadır (işin bir değeri için). Bir derleme sunucusuna sahip olmanın tek nedeni bu süreçte gözetimleri yakalamaktır. Tuzuna değecek herhangi bir yapı sunucusu, son derlemeden bu yana kodunu kontrol eden kişilere (ve ilgilenen herkese) aşağıdaki bilgileri bildirir:

  • İnşa bozuldu!
  • İnşa ederken ne yanlış gitti!
  • Son derlemeden bu yana neler değişti!

Bu çok sık e-posta ile olur. Her check-in işleminden sonra bunun hızlı bir şekilde gerçekleşmesi önemlidir.

Kişi daha sonra neyin yanlış gittiğini görebilir ve düzeltir ve derleme sunucusu daha sonra derlemenin normale döndüğünü merak eden herkese bildirir. Bu, başkalarının müdahalesi olmadan, check-in suçluları olmadan başlı başına gerçekleşmelidir.

Yani soruyu cevaplamak için: Olgun CI ortamı yok DEĞİL normal operasyonda bir kapıcı katılımını gerektirir.

Ayrıca, "garip koşullar varsa" çok sık gerçekleşirse, bunun nedenini bulun ve sistemi daha sağlam hale getirin.


9

Süreci değiştir. Bir taahhüt yapıyı bozarsa, bunu yapan ve bunu yapan geliştiriciye bildiren otomatik olarak geri alma. Bir takım üyesinin bir hatanın takımın geri kalanını yavaşlatmasına izin vermesi aptalca. Veya entegrasyon kurulumlarını otomatik olarak yapmak yerine, geliştiricilerin entegrasyon makinesini kontrol etmelerini sağlayın ve eğer inşaat başarılı olursa, bunu yapabilir. Sürekli entegrasyon, "ne tür bir çöpü istediğinizi kontrol edin ve birisi sizin için düzeltir" anlamına gelmez.

Altın dal için bir kapı bekçisi olmadıkça "altın dal" stratejisi işe yaramaz.

Git gibi bir DVCS yardımcı olabilir; taahhüt etmek yerine, geliştirici yalnızca CI sunucusuna entegrasyon için bir değişiklik kümesi gönderebilir ve sunucu değişiklik grubunu entegre etmeye çalışabilir. Entegrasyon başarılı olursa, değişiklik kümesi birleştirilir ve reddedilmezse.


8

Sık sık gördüğüm bir sorun, geliştiricilerin CI derlemesiyle tamamen aynı adımları olan yerel bir derleme yapamamasıdır. Yani, CI sunucusu yerel olarak gerçekleştirilemeyen birim / entegrasyon testleri, kapsam vb. Gibi ekstra adımlar içerecek şekilde yapılandırılmıştır. Kaçınılmaz olarak, geliştiriciler yerel olarak gerçekleştiremedikleri adımlardan biri tarafından ısırılacak ve check-in işleminden önce neden yerel olarak bir sürüm oluşturmak için rahatsız olduklarını sormaya başlayacaklar.

Yapımın tamamını bağımsız tutuyorum ve CI sunucusunun, herhangi bir dış yapılandırma / adım tanımlanmamış bir sürüm oluşturma işlemini başlatmasını sağlıyorum. Geliştiriciler, CI tarafından gerçekleştirilecek olan tüm adımları içeren ve check-in sırasında hiçbir şeyin kırılmayacağından emin olduklarından , check-in işleminden önce yerel olarak bir sürüm oluşturma çalıştırması yapabilir .

Bu yaklaşımın ek avantajları şunlardır:

  • CI sunucuları arasında geçiş yapmak kolaydır çünkü fazladan adımları yapılandırmak için çok fazla zaman harcamadınız
  • tüm derleme zamanı takım kaynakları kaynak kontrolü altındadır; bu, tüm geliştiricilerin, sisteminizi oluşturmak için aynı takımı kullandığı anlamına gelir
  • Yukarıdaki noktaya ek olarak, inşaat takımını kontrollü bir şekilde değiştirmek kolaydır.

PS. bütün çocuk bakıcısı konsepti saçma ama diğerleri bunu ele aldılar.


Amin. bir şey sırf edebilirsiniz yapılması, her zaman gelmez gerektiğini yapılabilir.
gbjbaanb

7

Öncelikle, geliştiriciler düzenli olarak inşaatları bozmamalı - CI şubesine bağlı olmadan önce testleri yerel olarak kurmalı ve çalıştırmalıdırlar. Yapıyı kırmak bir utanç işareti olmalı ve bunu zorlamak önemlidir. İstatistikleri göndererek yaptım ve diğer ekiplerin yapıyı her kırdığınızda bir dolar harcayabileceğiniz bir "yapı çantası" olduğunu gördüm. Projenin sonunda bu para bira doğru gidiyor.

Utanç / kişisel gurur işe yaramazsa, daha ağır şeylere gitmeniz gerekebilir (örneğin tehdit sonlandırma). Günü terk etmeden önce yapıyı kırmak büyük bir suç olmalıdır. Ve her geliştiricinin masaüstünde bir yapı durumu bildirimi olması gerekir. Tüm bunların en iyi yanı, yine de tercih edilen daha küçük işleri teşvik etmesidir.

Bununla birlikte, derleme bazen bozulacak (örneğin CI yapılandırma nedenleri). Ve bazen insanlar batırıp yapı bozulacak gün için ayrılırlar. Bu yüzden bilinen iyi versiyonlara hızlı ve kolay geri dönüş sağlayan bir işlemi hedeflemelisiniz. Her zaman son iyi yapıya geri dönebilirseniz (ve geri alınmış sürümün gerekli tüm yerlere dağıtılmasını sağlarsanız), suçluların akşama kadar bıraktığı kırık bir yapının en kötü senaryosunda, yuvarlayabilirsiniz. son iyi sürüme dönün ve sabahleyin ona bağırın.

Sürekli Teslimat kitabını yeterince öneriyorum . CI sürecinizi nasıl olgunlaştıracağınıza dair bir rehber arıyorsanız, deneyin.


2
Ayrılmadan önce yapıyı kırma konusunda anlaştılar. Bir değişiklik yaparsınız, yapının bitmesini beklersiniz, böylece çalıştığını bilirsiniz. İşe yaramadı mı? Gitmeden önce değişikliklerinizi geri alın veya düzeltin. Bunu yapmak istemiyor musun? Gündeki son şeyi değişiklik yapmayın.
Carson63000

1
"gerekir" güzeldir, ancak herhangi bir insan faktörü sıfır olmayan bir olma şansıdır. Derleme çok önemliyse, bir veya daha fazla hazırlama derleme sunucusuna sahip olun.

3

Bakıcıyı takımın etrafında hareket ettirmek için Microsoft'un (belki de?) Yaptığı bir şey duydum. Bunu yapma şekli, birisi yapıyı bozduğunda (ki muhtemelen testlerinde başarısız olan bir şeyi kontrol etmeyi de içermeli) rolü üstlenmesidir. Bu, insanları eylemlerinin sonuçlarından çok doğrudan bir şekilde sorumlu kılar. Yapması biraz can sıkıcı bir iş olduğu için, binayı tekrar kırmamalarını teşvik ediyor.

Yapıdan şu anda sorumlu olan kişinin özel bir şapkası olabilir. Devretmek için bir tören olabilir.

Thorbjørn'un dediği gibi, derlemeden sorumlu olmanın derleme sunucusundan sorumlu olmayla aynı olmadığını unutmayın. Sunucunun sorumluluğu, yapı için sorumluluk taşınırken ekibin bir veya daha fazla altyapıya meyilli üyelerine kalıcı olarak dayanabilir.

Şimdi, sürecin ayrıntılarını bir kenara bırakıp, geliştiricilerde bir test yapmadan ve test etmeden check-in yapan insanların korosuna katılacağım. Kabul edilemez!

Yapıyı bozması daha muhtemel bazı takım üyeleriniz varsa (ve kendi tecrübelerime dayanarak, çoğunlukla başka bir ülkedeki üyeleri düşünüyorum) ve Mercurial gibi güzel bir modern kaynak kontrolü kullanıyorsanız veya Git’e, takımın geri kalanından farklı bir şubeye giriş yapmalarını, ayrı bir CI işlemi yapmalarını ve başarılı bir yapı oluşturduktan sonra bu şubeden bagaja değişiklikleri otomatik olarak birleştirmelerini sağlayabilirsiniz. İkinci bir yapı çalıştırın ve birleşmeyi kontrol etmeden önce birleştirme işleminden sonra test edin!). Otomatik birleştirme her zaman başarılı olmadığından, sonuçta şubenin elle dikkat gerektiren, ancak gerçek bir acı olabilir. Yine de, ekibin geri kalanı için kodun kontrol edilmesinden daha az acı verici olabilir.


2

Jonathan Khoo'nun dediği gibi, derleme sunucusundan ve derleme betiğinden hepiniz sorumlu olmalısınız. Üç sebep var:

  1. Şu anda bir "Otobüs 1" durumu var. Bu, bir otobüs tarafından geçtiğinizde derleme sunucusunun ve derleme komut dosyalarının tüm bilgilerinin kaybolduğu anlamına gelir.
  2. Sizin tarafınızdan yazılan komutlar (doğru veya yanlış) sadece girişinizi yapmıştır. Tıpkı herhangi bir kod gibi, dahil olan daha fazla insan, kendisine uygulanabilecek bilgi tabanını genişletir.
  3. Sonunda bir şeyler ters gittiğinde sadece acıyı hissedersin. Ağrı iyi bir şeydir ancak izole edildiğinde değil. Şu anda acı ile uğraşıyorsunuz ama eğer herkes acı çekiyorsa, o zaman sonuçta taahhüt etmeden önce test kodunda daha katı olacağını göreceksiniz.

Ben kendim CI ile çok ilgiliyim ve senaryoları koruyan kişi olmanın tuzağına düştüm, ancak burada bunu hafifletmek için yapabileceğiniz birkaç şey var.

  1. Derleme komut dosyaları yalnızca CI sunucularında değil, yerel geliştirme makinelerinde de çalıştırılmalıdır. Aynı çıktıları üretmeleri, aynı testleri yapmaları ve aynı nedenlerle başarısız olmaları gerekir. Bu, geliştiricilerin kodlarını taahhüt etmeden önce komut dosyasını çalıştırmalarına izin verir.
  2. Herhangi biri yapıyı bozarsa, görev tepsisi açılır pencereleri, e-postalar, yanıp sönen ışıklar, gürültü vb. yardım.
  3. Bir süre için yapıyı tamir etmekten kaçının. Yapacak başka birini bul. Başka hiç kimse atlamazsa, kötü şeylerin olmasını bekleyin ve CI sunucusunun neden önemli olduğunu anlamak için tüm ekip için bir öğrenme noktası olarak kullanın.
  4. Kurulum sunucunuzu ve geliştirme makinelerinizi, kurulu üçüncü taraf bileşenlerinden mümkün olduğunca yoksun bırakmaya çalışın, özellikle GAC'yi temiz tutun. Proje kütüphanesi klasöründe bulunan üçüncü taraf bileşenlerine güvenin. Bu, eksik bileşenlerin daha hızlı tanımlanmasına yardımcı olur.

Ben kimseyi utandırmaya kesinlikle katılmıyorum. Bir sözdizimi hatası olduğunda derleyicinizin alarm vermesini ister misiniz?

@ Thorbjørn Bu bir CI sunucusu değil, yerel gelişim kutunuz. Mesele şu ki, takım yapıyı bozan kodun kontrol edilmesini önlemek için elinden gelen her şeyi yapmalıdır. Umarım insanlar eğlenceli ve dostça bir ortamda çalışırlar ve bahsettiğim utanç ruhlu demek değildir, ancak insanların bir dahaki işlerinden önce düşünmelerini sağlar. Ancak, derleme sunucusu bozulduğunda çalan komik bir sese sahibiz.
Bronumski

Hala aynı fikirde değilim. Bir bina sunucusu sadece bir bina sunucusu ve herkes hata yapabilir. Sadece suçluya haber verin ve düzeltmesine izin verin. Düzeltmezse, başkasının bilmesi gerekip gerekmediğini düşünerek başlayabiliriz.

@ Thorbjørn Mükemmel bir şekilde katılmıyorum ve bir dereceye kadar uyuşmazlık hakkı, farklı fikirleri tartışmamıza izin verdiği için iyidir. Sizinle tekrar aynı fikirde
olmamayı

1

Görünürlük size yardımcı olacaktır. Tüm ekip üyeleri, düzeltmeleri gereken aktif bir sorun olduğunu bilmelidir. E-posta bildirimleri kullanışlıdır, ancak bir geliştirici meşgulse ve hemen yanıt vermezse, büyük olasılıkla unutacak ve e-posta çok büyük bir bildirim yığınıyla sonuçlanacaktır.

Catlight veya BuildNotify gibi araçlar kullanmayı deneyebilirsiniz . Tepsi alanındaki önemli yapıların mevcut durumunu gösterir. Her zaman geliştirici saate baktığında, düzeltilmesi gereken kırılmış bir yapı olduğunu görecektir.

Tepside Catlight yapı uyarısı durumu

Catlight ayrıca, tüm ekip ard arda her inşaat arızasında göreceğinden, bu kişiye sosyal baskı uygulayarak yapıyı ilk kimin kırdığını gösterecektir.

görüntü tanımını buraya girin


0

Bir strateji, çok sayıda küçük proje için çok sayıda küçük dal kullanmaktır. Sonra birisi yapıyı kırdığında, yapıyı kendileri için kırıyorlar. Bu yüzden derleme sunucusundan rahatsız olmuş e-postaları alırlar ve endişelenmeleri onlara kalmıştır.

Bir diğeri ise insanların sorumluluk seviyesini arttırmak. Örneğin, Rietveld gibi bir şey kullanırsanız, insanlar akran değerlendirmesini geçmeden taahhütte bulunamazlar. (Uygulamadaki işlem düşündüğünüzden çok daha hafiftir. Ancak insanları aynı anda "boru hattı" yapmaya ve aynı anda birden fazla şey üzerinde çalışmaya zorlar.) Yapıyı korumak hem üreticinin hem de hakemlerin sorumluluğundadır. Herhangi biri düzenli olarak yapıyı bozuyorsa ya da yapıyı bozan şeyleri onaylıyorsa, taahhütler için nihai onay vermelerine izin vermeyin. Herkesin herhangi bir değişikliği kolayca geri alabileceği bir işlemle bir araya getirin ve yapı sık sık bozulmaz ve değişiklik yapıldıktan sonra bozulmaz.


'Çok sayıda küçük dal', herkesin katkıda bulunduğu büyük bir uygulamanız olduğunda iyi çalışmaz.
c_maker

2
hayır, iyi çalışıyor. Ancak, acıyı gelişme zamanından birleştirme zamanına kaydırırsınız. Küçük iş paketlerini düzenli olarak birleştirirseniz, bu çok fazla acı vermez.
gbjbaanb

@gbjbaanb: Doğru, bu yüzden küçük dalları ve küçük projeleri belirledim. Bir başka bonus olarak, ana yapı bir saat boyunca bozulursa, olasılıklar diğer insanların çalışmaya devam edebilmeleri muhtemeldir çünkü inşaatları kırılmamıştır.
btilly

@c_maker: Her strateji bir dizi takasla gelir ve hiçbiri tüm durumlar için doğru değildir. Ancak şu anda size verdiğim her şey, şu anda çok sayıda kuruluşta önemli bir başarı ile kullanılıyor.
btilly

0

Buradaki korodan kopacağım ve asıl işin yapıldığını gösterdiği gibi yapıyı zaman zaman bozmak o kadar da kötü bir şey değil diyeceğim. Evet, geliştiriciler taahhütte bulunmadan önce test etmeli ve test etmelidir, ancak testin ana yükü, sürekli entegrasyon sunucusu da dahil olmak üzere geliştirme otomasyon araçları tarafından karşılanmalıdır. Aletler kullanılmak üzere orada ve yapı tekrar tekrar kırılmıyorsa, elinizden geldiğince zorladığınız belli değil. Bununla birlikte, binanın hiçbir zaman önemli bir süre boyunca hiçbir zaman kırılmaması gerektiğini ve eğer merkezi, otomatik test tesislerinden gelen hızlı geri bildirimin ikiz hedeflerini desteklemeye yardımcı olması durumunda otomatik geri dönüşleri veya çok aşamalı bir işlem sürecini destekleyeceğini düşünüyorum. artı bir "yeşil" gövde.


0

Akılda tutulması gereken şeyler çiftler:

  1. Takımınızın takip etmesi için bir takım standartlara ihtiyacı var
  2. Temiz kod fikrine sahip bir yönetim almanız ve gelişmiş kod uygulamaları için çaba göstermeniz gerekir.
  3. Test testi testi! Giriş yapmadan önce daima test edin.
  4. Her ne kadar inşaatı bozmanın uygun olduğu konusunda hemfikir olmama rağmen, bu ender görülen bir durumdur ve kabul edilebilecek son derece nadir bir durum demek istiyorum. Bu günlükse, kapıyı arardım veya patronumla standartlar hakkında konuşurdum.

Genel olarak, uygulamalarınızı bireysel olarak değil, en iyi uygulamalara dayalı standartlar koymanız, standartlar yazmanız gerekir (açıkçası bunlar çalışmaz). Herkes standartları kabul ettiğinde, kod inceleme sürecine başlayın ve standartları uygulayın. Neredeyse yönetim tatile gitti ve asla geri gelmedi gibi geliyor. Bunlar dürüst olmak gerekirse, her dükkan için oldukça basit olan şeyler. İyi kodun temeli, ekip kodunu ve nasıl yazıldığını belirlemek için iyi standartlarla başlar. Sadece düşüncelerim. Geçenlerde yeni işimde benzer bir duruma girdim ve patronumla konuştum. Ona, ABC'yi etkilediği için tamamlanacak XYZ'e ihtiyacımız olduğunu açıkladı. İki hafta sonra takip etmek ve sunmak için bir kod standartları listesi yazdım. İş arkadaşlarımın ardından oraya girdi verdiler ve yaklaşık 2 ay sonra tonlarca sorunu çözen standartlarımız vardı.

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.