Geliştiriciler GitFlow kullanarak başka bir şubeden kodun birleştirilmesini bekleyerek engellendi


17

Ekibimiz FogBugz & Fırın / Mercurial'dan Jira & Stash / Git'e geçti. Git Flow modelini dallanma için kullanıyoruz, özellik dallarından alt görev dalları ekliyoruz (Jira özelliklerinin Jira alt görevleri ile ilgili). Üst şubeye geri birleştirmek için bir çekme isteği oluşturduğumuzda (genellikle geliştirir, ancak özellik dalına geri giden alt görevler için) bir gözden geçiren atamak için Stash'ı kullanırız.

Bulduğumuz sorun, özellik durumlarının en iyi planlanması ve dökümü ile bile, birden fazla geliştirici aynı özellik üzerinde birlikte çalışırken, ön uçta ve arka uçta, bağımsız bir kod üzerinde çalışıyorlarsa, ayrı dallarda bir geliştirici diğerini bloke eder.

Biz geliştikçe birbirimizin dalları arasında çekmeyi denedik. Ayrıca, her geliştiricinin, geliştirilirken entegrasyonu test etmek için birden çok daldan alabileceği yerel entegrasyon dalları oluşturmayı denedik. Son olarak ve bu şimdiye kadar bizim için muhtemelen en iyi şekilde çalışıyor gibi görünüyor, ancak biraz daha fazla yük ile, özellik dalından hemen yarasadan bir entegrasyon dalı oluşturmayı denedik. Bir alt görev dalı (özellik dalının dışında) çekme isteği ve kod incelemesi için hazır olduğunda, bu değişiklik kümelerini el ile bu özellik entegrasyon dalında birleştiririz. Daha sonra, ilgilenen tüm geliştiriciler bu entegrasyon dalından diğer bağımlı alt görev dallarına çekebilirler. Bu, herkesin bağımlı olduğu herhangi bir şubeyi kod incelemesini geçmesini beklemesini önler.

Bunun mutlaka bir Git sorunu olmadığını biliyorum - kendi iş sürecimiz ve kültürümüzle karışık, birden çok dalda birbirine bağlı kod üzerinde çalışmakla ilgili. Geliştirmek için katı kod inceleme politikamız yoksa (gerçek entegrasyon dalı) geliştirici 1, geliştirici 2'nin geliştirmesi için geliştirmek üzere birleştirilebilir. Diğer bir komplikasyon da, özelliği QA'ya teslim etmeden önce kod inceleme sürecinin bir parçası olarak bazı ön testler yapmamız gerektiğidir. Bu, ön uç geliştirici 1, doğrudan arka uç geliştirici 2'nin kolundan git, eğer arka uç geliştirici 2 biterse ve çekme isteği bir hafta boyunca kod incelemesinde oturuyorsa, ön uç geliştirici 2 teknik olarak çekme isteğini / kod incelemesini oluşturamaz çünkü kod inceleyicisi test çünkü arka uç geliştirici 2 '

Sonuç olarak, bu durumda hangi rotaya gittiğimize bağlı olarak kendimizi paralel bir yaklaşımdan çok daha seri bir şekilde buluyoruz ve bundan kaçınmak için kullanılacak bir süreç bulmak istiyoruz.

Bahsettiğim son şey, kodu incelenmemiş ve sonlandırılmamış dallar arasında kod paylaşarak gerçekleştirmemizdir, ancak özünde başkalarının beta kodunu kullanıyoruz. Bir dereceye kadar bundan kaçınabileceğimizi sanmıyorum ve bunu bir dereceye kadar kabul etmeye hazırız.


Sadece doğrulama - kod inceleme özelliği birleştirme görev üzerinde yapılıyor? ve geliştirmek için özellik birleştirme üzerinde herhangi bir kod incelemesi var mı?

Değişir. Doğrudan kodu kontrol ettiğimiz bir şubeye karşılık gelen ve hiyerarşi anlamında bir "şemsiye" davası gibi davranmayan hiçbir Jira vakasının 2 günden fazla sürmediğini belirten bir kuralımız var. Dolayısıyla, bir özellik durumu <= 2 gün sürüyorsa, geliştirilecek özelliği birleştirmek için bir kod incelemesi olacaktır. Alt görevler varsa, hepsi özellik biletlerine birleştirildikten sonra, tüm alt görevler zaten bu işlemden geçtiği için, birisi bu özellik dalını geliştirmekle aynı kod incelemesi düzeyini birleştirmek için çekme isteğini göz küresi yapar.
sis kurdu

Yanıtlar:


11

Sorun, arka uç ve ön uç geliştirme arasında çok katı bir görev ayrımında da olabilir.

Bir ön uç geliştiricinin yeni bir API'ya ihtiyacı varsa, düzenini doğrulamak için arka ucunda sahte bir API oluşturmasına (örneğin her zaman aynı değeri döndürerek) izin vermesi mümkün değil mi? Sonra bu kısmi uygulamayı bir saplama ile taahhüt edin ve ikinci kez bir arka uç geliştirici gerçek özelliği uygulayacaktır.

Bağımlılığı kırarak, daha iyi bir akış elde edersiniz ve darboğaz görevi gören tek bir görevi bekleyen her şeyi durdurmazsınız.


Bunu düşündüm, ama şu anki geliştirme sürecimizin bir parçası değil ve ek yük. Sorunun tamamen ön uç geliştiricinin geliştirme sırasında test etmek için arka uç geliştiricinin koduna erişemediğini düşünmüyorum. Daha önce biz QA için göndermeden önce tüm entegrasyon (alaycı veya stubbed) duman testi yapmak kod yorumcular hakkında daha fazla.
sis kurdu

6
Bu, geliştirme sürecinizin bir parçası olmasa da, bu iki geliştiricinin üç gün boyunca parmaklarını çevirmesini sağlamaktan başka birinin ek bir kodunu beklemesinden daha fazla yükü var mı? Başparmak döndürücü başına 8 saatlik boşa harcanan geliştirici zamanınız var. Bunu arka uç bağımlılıklarını saptamak için gereken zamanla karşılaştırın.
Greg Burghardt

5

Sorununuz: Geliştirici Master'dan bir şube, Master'dan geliştirici B dalları, hem yakından ilgili özellikler üzerinde hem de Master dalda birleşmelerin zor olması kaçınılmaz bir gerçek.

Bu öngörülebilirse, A ve B önce ortak bir dal oluşturabilir, daha sonra her dal bu ortak daldan ayrı çalışmaları için, ayrı çalışmalarının her birini ortak dalda birleştirebilir ve şimdi çok fazla çatışmasız bir dalınız var. entegrasyonu daha kolay.


0

Geliştirici 1, A özelliği üzerinde çalışıyorsa ve geliştirici 2, A özelliğine bağlı B özelliği üzerinde çalışmayı bitirdiyse, bunun etrafında bir yol yoktur - B özelliği birleştirme beklemede. A özelliği olmadan test edemezsiniz ve henüz gözden geçirmenin bir anlamı yoktur, çünkü A özelliğindeki daha fazla ilerleme B özelliğinde değişikliklere yol açabilir.

Ancak bu, geliştirici 2'nin beklemede olduğu anlamına gelmez! Geliştirici 2, özellik C üzerinde çalışmaya başlayabilir ve özellik A tamamlandığında özellik B'nin inceleme-düzeltme döngüsüne dönebilir. Bağlam değiştirmenin en uygun olmadığını biliyorum, ancak A özelliğini tamamlamak için gereken zaman muhtemelen gün olarak ölçüldüğünden o kadar da kötü değil (15 dakikalık bir yan görev için onları "Bölge" den çıkarmıyorsunuz)


Tabii, ama sorun bu değil. Tek bir özellik için, işlem olması gerekenden biraz daha seri hale gelir. X tarihinde bir özellik yayınlamamız planlanıyorsa ve biletler paralel olarak gözden geçirilemezse, tahminlerimiz kapanır ve potansiyel olarak sürümü dışarı çıkarır.
sis kurdu

0

Bu duruma yardımcı olmak için yapabileceğiniz bir şey, geliştirme döngüsünü kısaltmanın yollarına iyi bir göz atmaktır.

Bir geliştiricinin başka bir geliştiriciden bir özelliği beklemesi durumunda, ilk geliştiricilerin çalışmasının bir kısmının, bloğu serbest bırakmak için tüm özellikten önce inceleme ve entegrasyondan geçmesinin bir yolu var mı?

Entegrasyon döngüsünün devam etmesini sağlamak için özellikleri daha küçük iş birimlerine bölmenin yolları var mı?

Ayrıca, entegrasyon ne kadar sürer? Bir derleme veya entegrasyonda uzun bir dönüş varsa, bu tüm kuyruğu yavaşlatabilir. Oluşturma süresini hızlandırmak için yapabileceğiniz herhangi bir şey olup olmadığına bakın, böylece kuyruklar daha hızlı boşaltılır.


Ana umutlarım bu. Sorunu ortadan kaldırabileceğimizi düşünmüyorum, ancak yeni iş akışıyla daha rahat hale gelerek, sorunu en aza indirmek için bu yeni sistemde işimizi işbirliği içinde planlamayı ve parçalamayı daha iyi hale getireceğimizi umuyorum. Yine de, herhangi birinin benzer bir şeyle karşılaşıp karşılaşmadığını ve kullandığımız dallanma modeliyle ilgili herhangi bir şeyin olup olmadığını kontrol etmek için yardımcı oluyordu. Teşekkürler.
sis kurdu
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.