"Sürekli" yayınlama için ipuçları


14

Bir ekip, yazılımı sık sık (haftada bir kez) yayınlamakta zorluk çekiyor. Aşağıdaki tipik bir sürüm zaman çizelgesidir:

Yineleme sırasında:

  • Geliştiriciler, kısa ömürlü (bu coşkulu bir şekilde uygulanmaktadır) ana dallara dayanan özellik dallarında birikmiş işler hakkında hikayeler üzerinde çalışırlar.
  • Geliştiriciler sık ​​sık özellik dallarını sürekli olarak inşa edilen ve test edilen (test kapsamı devam ettiği sürece) entegrasyon dalına çekerler.
  • Test kullanıcıları, entegrasyonu bir hazırlama ortamına otomatik olarak dağıtabilir ve bu durum haftada birkaç kez gerçekleşir ve test paketlerinin sürekli çalışmasını sağlar.

Her pazartesi:

  • hangi hikayelerin "iyi bilinen" (testçilerin çalışmalarına dayanarak) olduğunu belirlemek için bir sürüm planlama toplantısı vardır ve bu nedenle sürümde yer alacaktır. Bir hikayeyle ilgili bilinen bir sorun varsa, kaynak şube entegrasyondan çekilir.
  • hiçbir yeni kod (yalnızca test ediciler tarafından talep edilen hata düzeltmeleri), testçilerin bir sürümü kesmek için sabit bir kod tabanına sahip olmasını sağlamak için bu Pazartesi günü entegrasyona alınamaz.

Her salı:

  • Test ediciler, entegrasyon dalını mümkün olan zamanı verebildikleri kadar test etmişlerdir ve bilinen bir hata yoktur, böylece bir salım kesilir ve üretim düğümlerine yavaşça itilir.

Bu pratikte iyi görünüyor, ancak başarmanın inanılmaz derecede zor olduğunu gördük. Takım aşağıdaki belirtileri görür

  • üretim ortamında hazırlama ortamında tanımlanmayan "ince" hatalar bulunur.
  • son dakika düzeltmeleri Salı günü devam ediyor.
  • üretim ortamındaki sorunlar, başarılı bir canlı dağıtım elde edilinceye ve ana dal güncellenebilinceye (ve dolayısıyla dallanmaya) kadar devam eden gelişimi engelleyen geri dönüşler gerektirir.

Bence test kapsamı, kod kalitesi, regresyon testini hızlı bir şekilde yapabilme yeteneği, son dakika değişiklikleri ve çevresel farklılıklar burada rol oynuyor. Herkes "sürekli" teslimatı en iyi şekilde nasıl yapacağınıza dair herhangi bir tavsiye verebilir mi?


1
@ Emddudley'nin Sürekli Teslimat kitabı hakkındaki cevabına ek olarak, infoq.com/presentations/Continuous-Deployment-50-Times-a-Günde gerçek zamanlı olarak günde birden çok kez konuşlandırma hakkında gerçekten ilginç bir sunum izlemenizi öneririm. üretim.
sdg

Yanıtlar:


6
  • Evreleme ortamında tanımlanmayan üretimde "ince" hatalar bulunur - bu tür sorunlara sahip projelerden birinde bunun çift konular olarak adlandırdığım taktik tarafından oldukça başarılı bir şekilde ele alındığını gördüm. Yani bu tür hatalar için, çocuklar sorun izleyicide iki bilet oluşturdular : biri kodu düzeltmek için geliştiricilere, diğeri ise test ediciyi regresyon testi veya gelecekte tekrarlamayı önleyecek evreleme ortamını tasarlamak ve değiştirmek için atandı. Bu, sahnelemeyi üretecek kadar yakın tutmaya yardımcı oldu.

  • üretim ortamındaki sorunlar geri alma gerektirir - bunlar sıksa , haftalık sürümleriniz gerçekten sahtedir - frekansı gerçekten işe yarayacak seviyeye ayarlamayı düşünün. By sahte Yani iki haftalık bültenleri söyledikleriyle bir rulo geri kullanıcıların iki haftada bir yeni (çalışma) salınımını karşıya anlamına geliyorsa - bütün bu sayımları, dağıtmak kez değil numarası olan.

  • heyecanla zorlanan özellik dalları - bu, daha önce bir süre önce, tek dal üzerinde çalışmayı denediğiniz ve daha düşük bulduğunuz anlamına mı geliyor? Evet ise, geri kalanını atlayın. Aksi takdirde, tek dal üzerinde çalışmayı deneyin (gerekirse, ayrıntılar için dallanma stratejisi "geliştirme dalı" veya dallanma stratejisi "kararsız gövde" için google ). Veya, Performce kullanıyorsanız, dallanma ve birleştirme ile ilgili Microsoft yönergelerini arayın. Bunu denedim mi? üzgünüm uygun kelime test edilmelidir : Yani, 1) tek bir dalın şu anda sahip olduğunuzdan daha iyi olup olmadığını nasıl ve nasıl ölçeceğinizi planlayın ve 2) bu durumda ne zaman ve nasıl özellik dallarına geri döneceğinizi planlayın test başarısız .


PS.

Muhtemelen web'de yazılım projeleri risk yönetimi gibi bir şey arayarak bunun gibi daha fazla numara bulabilirsiniz.


Güncelleme

<yorumlardan kopyala>

Sık sık düzeltmeleri kırık bir test hattının belirtisi olarak algılarım - durum böyle değil mi? Her iki durumda da, ops ekibi için daha fazla iş yapmak için düzeltmeleri almak için tekrarlanan sürümlere ihtiyaç duyarlar. Ek olarak, sıcak düzeltmeler genellikle aşırı zaman baskısı altında kodlanır, yani normal çalışmadan daha düşük kalitede olacaktır.

</ yorumlardan kopyala>

  • son dakika hot-fixes - yukarıdaki endişeler benim için yanı sıra kırık test boru hattı referans için makul görünüyor. Bu güncelleme ile, yeni kod entegrasyonu Pazartesi günü engellendiğini sizin önceden not kırık biri daha semptomu gibi geliyor (Ben daha hassas kelime olacağını düşünüyorum iddia boru hattı). Çekişme ile şunu kastediyorum: aynı anda iki amaca hizmet etmek için tek dal kullanıyorsunuz: entegrasyon ve serbest bırakma. Serbest bırakma yaklaşımları söz konusu olduğunda, bu iki amaç birbiriyle çatışmaya başlar ve çelişkili gereksinimler için iter: entegrasyon amacı en iyi şekilde sürekli açık dalla ( Erken ve Sık Birleştir ) hizmet edilirken, serbest bırakma kararlılığı dalın mühürlenmesinden yararlanır(izole edilmiş). A-ha bulmaca parçaları eşleşmeye başlıyor gibi görünüyor ...

Bakın, Pazartesi günkü donma, şimdi çelişkili amaçlara hizmet etmek için yapılan bir uzlaşma gibi görünüyor: geliştiriciler yeni kod entegrasyon bloğundan muzdaripken, testçiler bu bloğun çok kısa olmasına maruz kalıyor, herkes biraz mutsuz ama her iki amaca da az ya da çok hizmet ediliyor.

Biliyorsunuz, yukarıda verilen en iyi bahsinizin özel şubeden (entegrasyon hariç) serbest bırakmayı denemek olduğunu düşünüyorum . Bu dal uzun süre entegrasyon gibi mi, yoksa kısa özellik unsurlarınız gibi mi ("özellik" olmakla, iyi, serbest bırakma) - tamamen size bağlı, sadece ayrı olmak zorundadır.

Sadece düşün. Şu anda bir gün, serbest bırakmayı uygun şekilde stabilize etmek için yeterli değil, değil mi? yeni dallanma stratejisi ile, serbest bırakmadan 2 gün önce bir sorun yerine çatal yapabilirsiniz. İki günün bile yeterli olmadığını fark ederseniz, 3 gün önce çatallanmayı deneyin. Şey, serbest bırakma dalını istediğiniz kadar erken ayırabilirsiniz, çünkü bu artık entegrasyon dalına yeni kodun birleştirilmesini engellemez. Bu modelde, entegrasyon şubesini dondurmanıza gerek yoktur - geliştiricileriniz , Pazartesi, Salı, Cuma günleri ne olursa olsun sürekli olarak kullanabilir.

Bu mutluluk için ödediğiniz fiyat, düzeltmelerin komplikasyonudur. Bunlar bir yerine iki dalda birleştirilmelidir (yayınlama + entegrasyon). Yeni modeli test ederken odaklanmanız gereken şey budur. İlişkili olan her şeyi takip edin - ikinci şubeyle birleşmek için harcadığınız ekstra çaba, ikinci şubeyle birleşmeyi unutabilme riskiyle ilgili çabalar - ilgili her şey.

Testin sonunda, izlediğinizi bir araya getirin ve bu ekstra çabanın miktarının kabul edilebilir olup olmadığını öğrenin. Kabul edilebilir ise, işiniz bitti. Aksi takdirde, mevcut modelinize geri dönün, neyin yanlış gittiğini analiz edin ve başka nasıl geliştirebileceğinizi düşünmeye başlayın.


Update2

<yorumlardan kopyala>

Amacım, hikayeleri bir yineleme içinde test edilmiş ve teslim edilebilir hale getirmektir (bir yapılandırma duvarının arkasında veya önünde), bu sadece testçilerin yinelemede yapılan işi test ediyorlarsa (ve önceki yinelemedeki kodu stabilize etmiyorsa) elde edilebilir.

</ yorumlardan kopyala>

Anlıyorum. Bu şekilde doğrudan deneyimim yok, ancak bizimkiyle ilgili bir projede yinelemeli tür testlerinin başarıyla yapıldığını gördüm . Projemiz tam tersi bir yol izlediğinden, bu karşıt yaklaşımlar için yüz yüze karşılaştırma lüksüm oldu.

Benim açımdan, yineleme dışı test yaklaşımı bu yarışta daha üstün görünüyordu. Evet, projeleri iyi gitti ve testçileri hataları bizimkinden daha hızlı tespit ettiler, ancak bir şekilde bu yardımcı olmadı. Projemiz de iyi gitti ve bir şekilde onlardan daha kısa iterasyonlar yapabiliriz ve onlardan daha az (çok daha az) kaymış serbest bıraktık ve yanımızda geliştiriciler ve testçiler arasında daha az gerilim vardı.

Btw onların yanında daha hızlı saptanmasına karşın, biz (ömür giriş arasındaki zamanı aynı ortalama hata ömrünün hakkında sahip başardı düzeltme değil tanıtımı ve algılama arasındaki). Muhtemelen burada bile küçük bir avantajımız vardı, çünkü daha kısa tekrarlamalar ve daha az kayma sürümleri ile, düzeltmelerimizin ortalama olarak kullanıcılara onlardan daha hızlı ulaştığını iddia edebiliriz.

Özetlemek gerekirse, yayın kodunun izole edilmesinin ekip verimliliğinizi artırmak için daha iyi şansı olduğuna inanıyorum.


başka bir düşüncede ...

  • sürüm kodlamasının izolasyonu daha iyi şansa sahiptir - yeniden okuma üzerine bunun tekrarlama testini denemekten vazgeçirdiğim izlenimini yaratabileceğini hissediyorum . Yapmadığımı mükemmel bir şekilde ortaya koymak istiyorum.

Sizin durumunuzda yineleme testi yaklaşımı denemek güvenli görünüyor (er ... test ) çünkü bunu nasıl başaracağınızı (pürüzsüz test boru hattı ) ve önemli engelleri açık olarak biliyorsunuz . Ve sonuçta, bu boru hattını doğru yapmak için çok zor bulursanız, her zaman alternatif yaklaşıma geri dönme seçeneğiniz vardır.

BTW engellerle ilgili, bu durumda izlemeye değer ek olanlar , test tarafındaki düzeltmeyi doğrulamak için hatayı geliştirmede ve geç bulmak için geç / geç / geç gibi sorunlar olacaktır . Bunlar , artık düzeltmelerle olduğu gibi boru hattınızı da sıkıştırabilir .


1
Görüşleriniz için teşekkürler. Dallanma ile ilgili olarak bir hayır test ettik. (ve kariyerimde bir kaç farklı org kullandım). Üretim kodunu temsil eden temiz bir ana, tüm geliştiricilerin sık sık (ideal olarak günde birkaç kez) çektiği bir entegrasyon şubesine (master'a dayalı) karar verdik. Entegrasyon dalı, sık otomatik aşamalandırma dağıtımlarıyla sürekli olarak oluşturulur ve test edilir. Daha önce büyük bir başarı ile kirli ana hat denedim. Mevcut yaklaşımımız daha kontrollü görünüyor. Eksik, istenmeyen işlevsellik için yapılandırma duvarları kullanıyoruz.
52d6c6af

1
@maple_shaft İlk kez test paketinde izleyicide açılan hataların 2002 veya 2003'te olduğunu gördüm. Ve o zamanlar katıldığım ekipte oldukça yerleşik bir uygulama gibi görünüyordu. Prod ve sahneleme arasındaki farkları hedefleyen hatalara gelince, bunlar ilk gördüğümden beri gerçekten yeni görünüyor (ve gerçekten şaşırdım) 2 yıldan daha kısa bir süre önce
gnat

1
@gnat, sağduyu gibi görünüyor, bu yüzden neden daha önce duymadığımı merak ediyorum. Şimdi düşündüğümde bu mantıklı olsa da, şimdiye kadar birlikte çalıştığım her QA grubu böcekleri yemekten mükemmel bir şekilde mutlu görünüyordu, ancak böcekler onlara karşı getirildiğinde iki yaşındaydı.
maple_shaft

1
@maple_shaft lol bu şekilde kabul edilemez derecede nadir görünüyor. Bu arada sadece test kullanıcılarına değil, aynı zamanda doc / spec yazarlarına da hata atabileceğini biliyor muydunuz? - Dev Guide'ın 12. derlemesi, sayfa 34, 5. satırda "siyah" diyor; "beyaz" olmalıdır. - John Writer'a atandı. - Yapı 67'de düzeltildi. - Yapı 89'da Paul Tester tarafından doğrulandı.
gnat

1
Bir sohbet oturumuna dönüşmek istemediğim için son yanıtım, ancak son kuruluşumda bir spec yazara karşı bir hata yazdım ve tüm bölüm bir WTF anında geri döndü. Derhal bir "tutum sorunu" olduğunu ve bir "takım oyuncusu" değildi ve tekrar yapmak değil söylendi.
maple_shaft

8

Kullanıcı hikayelerinin doğasını ve bunların sayısını bilmeden, 1 haftalık bir yayın döngüsünün aşırı göründüğünü söylemeliyim. Açıkladığınız yukarıdaki senaryo karmaşık bir şekilde planlanmıştır ve planın karmaşıklığının ortasında tek bir hatanın geç salıverilmesine neden olabileceği bir insan sistemi yaratan bir veya daha fazla dal, birleşme noktası, teslim, ortam ve test paketi içerir. kötü kalite. Bunun sonraki sürümlerde domino etkisi olabilir.

IMHO programı çok sıkı.

Daha etkili birim testleri ve ayrıca çevreye özgü entegrasyon testleri yazarak kod kapsamını artırabilirsiniz.

Daha değerli bir zamanda tüketilmesine rağmen, çift programlama ve / veya kod incelemesi sunarak kod kalitesini artırabilirsiniz.

Kullanıcı öykü noktalarının daha iyi tahmin edilmesi, tek bir sürüme giren kullanıcı öykülerini dolaylı olarak sınırlayarak ve paydayı risk oranınız üzerinde düşürerek de yardımcı olabilir.

Genel olarak, yerinde iyi uygulamalarınız olduğu ve aşırı salım döngünüzü idare edecek iyi bir sisteminiz olduğu anlaşılıyor. Doğru yolda görünüyorsun.


Evet! Rüzgarlı entegrasyon testlerine ihtiyaç duyan derlenmiş bir dilde büyük bir ürünle bir hafta sürekli değildir, sönümleyicidir . Çok fazla tutun ve iş ölüm oranını deneyimleyeceksiniz!
ZJR

+ 1; şu anda üç haftalık tekrarlamalar yapıyoruz ve iyi çalıştığını görüyoruz.
Duncan Bayne

@ZJR, lütfen bu bağlamda kısaltarak ne demek istediğinizi genişletebilir misiniz?
52d6c6af

@Duncan, yinelemelerimiz 2 haftalık, ancak tek haftalık artışları deniyoruz . Bu mümkün olabilir veya olmayabilir / kötü bir fikir. Düşünce, bir haftalık artışın daha az yeni kod içereceği ve dolayısıyla daha az sorun içereceği düşünülmektedir.
52d6c6af

1
@ Ben Aston, Kod miktarı sorun yaratmaz, gerçekçi olmayan son teslim tarihleri, stres ve yüksek beklentiler sorun yaratır.
maple_shaft

1

Bir kesinliğin (veya zorlamanın) testlerin çalışmasına neden olduğu ve testlerin başarılı olması durumunda bir dağıtımın gerçekleşmesine neden olan gerçek sürekli konuşlandırmayı neden kullanmıyorsunuz?

Daha sonra bir değişiklikten emin değilseniz, ayrı bir dalda yaparsınız, bu da testlerin çalışmasına neden olur, ancak dağıtım yapılmaz.

Kırık bir gövdeyi / ustayı dengeye getirmeye çalışırken içinde olduğundan daha fazla stres olduğunu düşünüyorum, bilirsiniz, sadece sabit tutmak.

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.