Sürekli Entegrasyon ve DVCS Kalıpları


12

Şu anda Subversion ve TeamCity kullanıyoruz, Mercurial kullanmaya başlayacağız (özellikle FogBugz kullanıcısı olarak Fırın).

Açıkçası bu, geliştirme örüntülerimizde (ikimiz de!) Değişikliklerle - umarım iyileşmelerle - sonuçlanacaktır, ancak uğraştığım tek şey, şeylerin nasıl yapılandırılacağıdır, böylece sürekli entegrasyonun / CI sunucumuzun ( tartışmaları bu sorunun kapsamı dışında kalan faydalar vardır ve öyle kalacaktır .

SVN ile sınırlı sayıda merkezi veri havuzuna bağlıyız - her proje için etkili bir tane (az ya da çok bir Visual Studio Çözümü), böylece bir yapıyı tetiklemek ve tüm dosyaların işlendiğinden ve hiçbir dosyanın bulunmadığından emin olmak kolaydır. ama eğer cıvanın uygun bir şekilde tarafını alacaksak, değişikliklerin genellikle kesin bir "canlı" repoya doğru akmasını beklediğim daha fazla depo örneğine sahip olmak isteyeceğiz. Mücadele ettiğim sorun, canlı repo'nun CI'ımı tetiklemek için çok "geç" gibi görünmesi, geliştirici başına proje başına bir CI derlemesi muhtemelen aşırı (ve diğer sorunlara neden oluyor) oluşturuyor.

Biraz balık tutuyorum ama bunun nedeni, merkezi bir yıkım deposunun bir şey (bana, bizim kurulumumuzla!) Verdiği şeylerden biri, ne zaman inşa edileceği konusunda çok açıklık olması.


nb Sürekli entegrasyon ile civa kullanmanın mekaniği hakkında soru sormuyorum - kişisel bir proje için bir tedavi, desenleri ve yapıları ve başımı döndürmeye çalıştığım çalışma uygulamaları / iş akışı üzerinde çalışıyorum.


Neden merkezi / "canlı" deponun yapılarını tetiklemek için çok geç olduğunu düşünüyorsunuz?
c_maker

Henüz orada bulunmadıysanız, Fırın yığını değişim sitesine ( fırın.stackexchange.com ) gitmenizi öneririm . Bunların nasıl kurulacağı konusunda oldukça fazla içeriğe sahipler (burada bir tane: kiln.stackexchange.com/questions/29/… . Şahsen, özellik başına bir şube kullanıyoruz ve "ana" şubemize yapı sunucusunu işaret ediyoruz. )
Chris Phillips

@Chris - CI sorununu ele almayan gerçekten yok, ...
Murph

Yanıtlar:


2

Birincisi, TeamCity'de proje başına birden fazla derleme yapmak gerçekten yoludur. Platformun doğası gerçekten kolaylaştırıyor - kopyala düğmesi bir nedenden dolayı orada.

Her halükarda, SVN'deyken, tipik olarak her proje için 2 yapı yürüttük - biri ana geliştirme hattına (bizim durumumuzda gövde) ve diğeri serbest bırakma şubemize işaret etti. Bir dallanma modeli benzer aşağıdaki ederken HG bu kurulum inşa taşınır bu bir . Sadece gerçek zorluk, artık mevcut SVN revizyon numarasını kullanamayacağımız için yapı numaraları hakkında yeni bir funk schwea bulmak oldu.

İnsanları nispeten sık itmeye çalışıyoruz, özellikle de aynı anda çok fazla iş olduğunda ve daha hızlı geri bildirim döngüleri istediğimizde. Bunun bir DCVS olması, günde sadece bir kez itmeniz gerektiği anlamına gelmez.


Wyatt, zihnime göre, tamamlanmış bir iş biriminiz (ish) olduğunda zorlanmalı - DVCS'nin avantajlarından biri, yerel olarak kırılmış kod işleyebilmemizdir. Gerçekten gerçekten bir zamanlama günün çünkü onun uç üstünde bir şey yapmadan kavramını sevmiyorum. "Yedekleme" nin ayrı bir sorunu var, bu benim için - sadece yedek olmak için var olan başka bir klonun yanına - kararlı bir şekilde - itmek için bir kural oluşturmakla ilgili.
Murph

2
Trick biriminin tanımı nedir? "Bu özellik tamamlandı mı" ya da "bu tuğla başarıyla döşendi" mi? İkincisine, özellikle açıkça belirlenmiş bir geliştirme dalının bulunduğu dallanma modeline yöneliyoruz. En iyi şeyleri kırmak en iyi özelliktir. Bunların uzun süredir devam edenleri, mümkünse CI yapılarını da alabilirler. Özellikle mutfakta birden fazla aşçı varsa.
Wyatt Barnett

"İş birimi" tanımınıza katılıyorum, bu yüzden genel modelimle biraz mücadele ediyorum (hem "CI" yapılarını hem de "dağıtım" yapılarını barındırmak için proje başına birden çok yapı var). Haklısın, cevap çok sayıda derleme yapmaktır, bu yüzden sonunda asıl sorunum onayın imzalanması olacak! Referans verilen dallanma modeli de doğru görünüyor. Hala genel deseni düşünüyor (ve kilnhg özelliklerine izin vermek için daha fazla ayarlanmasına izin veriyor)
Murph

2

Fırın'ı yaklaşık bir yıldır kullanıyoruz ve birkaç farklı şey denedik. Sonunda, aşağıdaki dallanma stratejisiyle adlandırılmış dalları (dal klonlarının aksine) kullanmaktır:

  • varsayılan parçalar "tamamlandı" geliştirme
  • özellik dalları şu anda devam etmekte olan işleri izler
  • serbest bırakma şubeleri varsayılan olarak serbest bıraktığımız noktaları izler

Bu nedenle, çalışma geçerli varsayılan ipucundan bir özellik dalı oluşturarak başlar . Ne zaman özelliği dal * yapılır, şube kapalı ve geri birleştirilir varsayılan .

Bir noktada, yayınlamaya hazır olduğumuza karar veriyoruz, bu nedenle varsayılan olarak mevcut ipucundan yeni bir yayın dalı oluşturuyoruz . Bu , özellik dallarında ve varsayılanda etkin geliştirmeye izin verirken , serbest bırakma dalına bağlı kalarak şu anda üretimde olan kodda değişiklik yapmamızı sağlar .

Sürekli entegrasyon konusunda iki şey yapıyoruz:

  • Varsayılan durumu izleyen "her zaman açık" entegrasyon
  • Her bir sürüm dalı için yeni entegrasyonlar

Varsayılan - şube işi bize ana kaynak ağacı her zaman kararlı olduğunu bildirir bırakma şube işleri bize bu dallar kararlıdır ve biz üretime bir gösterimi ertelemeye gerek yapı çıkışı ile bize bildirin.

* "Tamamlandı" tanımımız, özelliğin varsayılandan birleştirme ile güncel olması ve kod incelemesinde onaylanmış olmasıdır.


1

Hg gibi bir DVCS'ye geçerseniz, sadece "dağıtılmış parçayı" elde edemezsiniz, aynı zamanda iyi dallanma ve birleştirme gücüne de sahip olursunuz.

Artık iyi bir sorun izleyiciniz ve iyi bir SCM'niz olduğunu göz önünde bulundurarak ... neden her görev için bir şube oluşturmuyorsunuz?

"Görev başına şube" modeli yeni değil (Berczuk'un kitabını kontrol edin) ama kesinlikle denemek için bir şey.

Ben detaylı anlatmıştır burada ve vs lehte ve CI eksilerini "kontrollü" Burada .


Mutlu, hevesli ve başarılı bir şekilde hem özellik hem de bakım dallanma ve yıkılma ile birleştirme yaptığım için "iyi" yerine "daha iyi" diyebilirim (-:
Murph
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.