2013-06-30 11 views
9

Çok Scott Chacon tarafından açıklanan "github akış" iş akışını gibi: github Vincent Driessen (http://nvie.com/posts/a-successful-git-branching-model/) tarafından açıklanan git akış iş akışını kullanmaz ve biz bunu kullanmayın sebebi o açıklar http://scottchacon.com/2011/08/31/github-flow.htmlGit iş akışları: Sürekli dağıtım olmadan özellik dallarının nasıl entegre edilip test edileceği?

en önemli nedenlerin, çekme talepleri ile iyi çalışmadığı ve “yazılım ürününün resmi olarak yayınlanmış sürümleri” bulunmayan, ancak web sitesini sürekli geliştiren web sitesi gelişimine iyi gelmediği aynı nedenlerdir.

Kötü bir test kapsamı ile çok eski bir eski kod (küçük kod 10 yaşından büyük) içeren küçük bir ekipte büyük bir çevrimiçi topluluk geliştiriyoruz. Github ile benzer bir iş akışı kullanıyoruz; şu anda geliştirme için özellik dallarını kullanıyoruz ve bunları ana şubeye entegre etmek, eş incelemeler yapmak, geri bildirim istemek vb. Çekmek için çekme talepleri kullanıyoruz. Bu özellik başkaları tarafından bittiğinde ve onaylandığında usta birleşti. Haftada birkaç kez master'ı test kullanıcılarımız ve beta kullanıcıları tarafından kullanılan evreleme ortamına yönlendiriyoruz. Ana şubeyi iki haftada bir halka açıklamaya çalışıyoruz, bu nedenle birleştirilen her bir özellik şubesi yeterince iyi test edilmeli ve son birkaç gün içinde kamuya açıklanana kadar "daha riskli özellik dalları" birleştirilmiyor.

Bu, mükemmel bir iş akışı değildir; çünkü "riskli özelliklerin" bir kez daha ana yeniden başlatılmasıyla birleştirildiğinde, artık düzeltmeleri kamuya dağıtmak için ana bilgisayarı kullanamıyoruz.

Github, dağıtım için sürekli teslimatı kullanır; bu bizim için bir seçenek değildir, bir özelliği test etmemiz gerekir.

Çekme isteği yalnızca bir dalda birleştirilebilir. Yani, usta olan sadece bir uzun koşu dalı ile github'da basit bir iş akışı. Belki de iki haftada bir serbest bırakmamalıyız, ancak master'a birleştirildiklerinde çekme taleplerini serbest bırakmalı mıyız? Ancak bu şekilde test edilmesi zor, özellik dalında sahip olduğumuz birim testlerini birleştirilmeden önce çalıştırabiliriz ve biz de beta test kullanıcıları için aşamayı dağıtabiliriz, ancak bu her zaman bu kadar kolay değil, bazen veritabanı el ile değiştirir (biz bunu otomatik olarak yapamazız, çünkü beta test cihazları için evreleme sunucumuz üretim veritabanını kullanır çünkü çok riskli), bu yüzden yöneticiler tarafından yapılıncaya kadar beklemelisiniz. Ve daha büyük sorun şu ki, yalnızca beta kullanıcılarına özellik dallarını serbest bırakırsanız, bunlar entegre olmazlar, yeni özellikler görecekler ve özellikler belki de günde birkaç kez kaldırılıyor. Entegrasyon testlerini çalıştıramazsınız demezsiniz, ya da bir özellik dalı sadece master için birleştirildikten hemen sonra çok geç çalıştırırsınız ...

Diğer yandan, eğer 2 uzun koşu kolunu kullanırsak Git-akışında açıklandığı gibi geliştirin ve ustalaşın, düzeltme problemini çözebiliriz, özellik dallarını geliştirmek için çekme-isteklerini kullanabiliriz, son değişiklikleri ustaya birleştirmek için bir serbest bırakma dalı için bir çekme talebi kullanabiliriz, ama biz Çekme isteği iş akışı kullanılarak geliştirilecek değişiklikleri birleştirme.

Github akış makalesinde (# 6 - gözden geçirildikten hemen sonra dağıt) görebileceğiniz gibi, github mühendisleri yalnızca üretime değil, aynı zamanda bir hazırlama ortamına da yerleştirebilirler. Ve sadece mühendisler bunu yapamaz, aynı zamanda destek ve tasarımcılar da yapabilir. Ama sadece bir entegrasyon şubesi ile nasıl çalışır? Son çekme talebinin birkaç saat ya da dakika içinde üretime geçmesi durumunda bir hazırlama ortamına ihtiyacınız yoktur. Bazen, özellik dallarını sahneye yerleştirmek gibi görünüyorlar, bu da mantıklı, ama bunlar entegre değil, bu yüzden yukarıda anlattığım şey, bir özelliği dağıtmadan önce master'dan değişiklikleri bir araya getirse bile evreleme ortamınıza gelen ve giden özellikleri görüyorsunuz. - evlenmeye uzan (bu iyi bir fikir olur mu?). Ya da her özellik dalı için birden çok evreleme ortamına sahip olmak mantıklı mıdır? Ama yine bu şekilde sürekli entegrasyonun avantajlarını kaybedersiniz. Ve dediğim gibi, bunu bir beta test ortamında yapabileceğinizi sanmıyorum.

Her iki iş akışında, git akışında ve github akışında sorunlar görüyorum, github akışını daha iyi seviyorum, ancak iyi bir test kapsamına sahip değilseniz ve daha fazla sınama gerektiriyorsa zor görünüyor.

Peki, özellik dallarını, insanlar tarafından daha fazla sınamaya ihtiyaç duyduklarında (qa ve beta test kullanıcıları) nasıl entegre edebilir ve test edebilirim?

+0

Ben konu dışı burada, belki uygun Programcılar için olduğunu düşünüyorum, belki de çok geniş ve görüş bile orada –

+0

Önerilerde arıyorum tabanlı Programcılar, eski kodlar ve yüksek yük altında bir web sitesi geliştirmenin doğası nedeniyle benzer bir soruya cevap veren daha büyük web siteleri geliştiriyorlar. Şu ana kadar bulabildiğim çoğu tavsiyede ya geleneksel yazılım ürünleri geliştirmeye ya da sürekli dağıtım yapmaya odaklanıyoruz. İnsanların koşullar hakkında ve şimdiye kadarki konu hakkındaki düşüncelerim hakkında iyi bir resim elde etmeleri için yeterince detay vermeye çalıştım. Ne düşünüyorsun, burada olmasalar gibi nerede soru sormalıyım? Teşekkürler! – ak2

+10

Daha kısa, daha açık ve daha okunabilir olmasını sağlamak için sorunuzu (çok) yeniden yazmanızı ve basitleştirmenizi öneririm. Gereksiz cümleleri ve kelimeleri kaldırın; Daha kısa paragraflar ve Markdown biçimlendirme kullanın. Bu, daha fazla kişinin onu okumasına ve iyi bir çözüm bulmanıza yardımcı olacak. – Leif

cevap

1

tek bir ortak entegrasyon şube boyunca çalıştırmak birkaç dal kafaları sahip olabilir:

----A---B---C---D---E---F---G---H---I 
       \   \   \ 
       goodToGo testing  toBeTested 
+0

Daha uzun koşu dalları hakkında konuşuyorsunuz, değil mi? Ama iş akışı nasıl görünürdü? Yeni özellik şubemi entegrasyon dalına birleştirirsem, örneğin test-dalına nasıl ulaşırım? Belki de bir başkası bir özelliği bütünleştirme-dalında birleştirdi, bu yüzden entegrasyon-dalını test-dalına birleştiremem. Bu nedenle, özellik bölümümü yalnızca test-dalına dahil edebilirim ve üretim aşamasına gelene kadar silmeyebilirim, değil mi? Bu yüzden, eğer testte hata bulursam, özellik-branşımı değiştiririm, özelliği entegrasyona birleştiririm ve bundan sonra tekrar test etmek için tekrar test edersiniz? – ak2

İlgili konular