Çok bileşenli bir projeyi sürümlendirmenin en iyi yolu nedir?


10

5 ana bileşenden oluşan bir programım var. Standart sürüm numaralandırmasını çok sınırlayıcı buluyorum çünkü her bir bileşenin hangi sürümde olduğunu görmek istiyorum.

Herkes bunu ayrı ayrı listelemek dışında bunu yapmanın kolay bir yolunu buldu mu?


1
Tüm bileşenler aynı anda mı üretildi? Aynı anda "serbest bırakılıyorlar mı?"
Adam Lear

1
@Anna Lear: hayır, bileşenler farklı zamanlarda üretilir ve serbest bırakılır.
John Smith

Bağımsız olarak serbest bırakılırlarsa, her birine kendi 'geliştirme' sürüm numarasına sahip ayrı ürünler olarak davranırdım. Kombinasyon ayrıca 'ticari' bir versiyona sahip olabilecek tek bir ürün olarak satılırsa / piyasaya sürülürse.
Kwebble

Sürüm oluştururken hedefiniz nedir? Bu sürüm bilgileri ne için kullanılır ? Hata bildirme? yükseltme uyumluluğunu kontrol ediyor musunuz? lisans? Bu soruları cevaplamak kök sorunuza cevap verebilir.
Alex Feinman

Yanıtlar:


7

Ürünümüzle aynı sorunu yaşıyoruz ve her bileşen için ayrı sürüm numaraları yapmaya karar verdik ve ürün sürümü yalnızca belirli bir revizyondaki çeşitli bileşenlerden oluşan bir pazarlama sürümüdür.


2
Sürüm kontrol sisteminizde bu nasıl görünür? Büyük bir sürüm yaptığınızda tüm alt projeleri "sabitlersiniz" mi?
Robert Harvey

Büyük bir sürüm hazırlarken, tüm bileşenler gözden geçirilir ve değişiklikleri varsa o zaman güncellenmiş bir sürüm alırlar. Sürüm Fırın etiketlendi.
Dave Nay

3

Belirli bir bileşen yapılandırmasını açıklayan standart bir sürüm numarası olan bir "sistem sürümü sürümümüz" var, daha sonra ayrı bir dosya söz konusu sistem sürümü için ayrı bileşen sürümlerini listeler. Müşteriler 5.2.1 diyorlar, ancak gerekirse bireysel yapıyı arayabiliriz. Genellikle büyük bir sürüm için tüm ayrı sürümleri senkronize ederiz, böylece her şey tekrar aynı şube numarasından oluşturulur.


1
Ben böyle düşünüyordum, ama bunu bir CI / CD ortamında nasıl yönetiyorsunuz? Bu belgelerin tutulması gerçek bir PITA gibi görünüyor
Sinaesthetic

1

Sürüm oluşturma, bileşen tabanlı uygulama geliştirmeden ayrı bir sorundur. Ya her bir bileşeni sürümlendirmek ya da tüm uygulamayı sürümlendirmek istiyorsunuz.

Sürüm oluşturma için iyi bilinen bir model Microsoft'tan :

major version.minor version.build number.revision

Örneğin, .NET platformundaki DLL dosyalarının 2.0.3600.1 veya bunun gibi bir sürümleri olduğunu görebilirsiniz.

Bu nedenle, önce tüm sistemi veya bileşenlerini sürümlendirmek isteyip istemediğinizi belirlemenizi öneririz. Tüm sistemi sürümlendirmek istiyorsanız, her entegrasyondan sonra projenin tamamını derleyin ve derleme numarası bölümünü artırın . Değilse, her bileşeni derlemede sürümlendirin.


Yapı numarası stratejinize katılmıyorum. Yapı numarası genellikle her zaman değiştirir inşa o işe gitmiyor bu yüzden, belirli bir bileşen için proje.
Robert Harvey

@ Robert, evet, yapı numarası yakında çok sayıda olacak. Bu yüzden diğer bazı sistemler onu içermez. Gitmekte özgürsün. Ancak, büyük sürüm ve küçük sürüm neredeyse her sürüm sisteminden çıkar.
Saeed Neamati

Bu tür bir sürüm uyumluluk içindir ve soruna gerçekten cevap vermez.
Sinaesthetic

1

Sürüm oluşturma konusunda dikkatli olun, sizi öldürebilir :-) İşleri çok karmaşık hale getirmeye çalışmayın.

Aşağıdaki yaklaşımın size yardımcı olabileceğini düşünüyorum:

İstediğiniz sürüm şemasıyla her bileşeni ayrı ayrı sürümleyin. Yorumlarınızdan, yerinde bir VCS'niz olduğunu anlıyorum. Ayrıca her bileşenin, sürümünün tutulduğu bir dosyaya sahip olduğunu varsayıyorum (doğru?). Günde / haftada bir kez (ekibiniz için hangisi daha iyi çalışıyorsa), VCS'deki en son revizyonlardan birine bu revizyonu en son resmi revizyon olarak işaretleyen (ve isteğe bağlı olarak bir süper revizyon numarasını arttıran) bir etiket ekleyin. Şimdi VCS'yi bu etiketle yapılan düzeltmeler için sorgulayabilir ve ardından bu resmi derlemedeki bileşenlerin sürümünü arayabilirsiniz.

Yalnızca yerel olarak istiyorsanız, kodda depolanan yerden her bileşenin sürümünü toplayacak küçük bir komut dosyası yazın.

Daha da zengin hale getirmek istiyorsanız, etiketlemeyi yaptıktan sonra, belirli bir bileşene ait dosyaları tanımlayabileceğinizi göz önünde bulundurarak, her bileşene ait dosyalara bakabilirsiniz. Herhangi bir değişiklik olursa, söz konusu bileşenin sürümünü artırın. Alternatif, bunu manuel olarak yapmaktır. Başka bir alternatif, dallanma ve birleştirmenin sürüm izleme ile birleşimidir.


1

Çoğu sürüm numarası, pazarlama tarafından yönlendirilen büyük ve küçük bir düzeltme kullanır, bu nedenle bunları ayrı bileşen sürümlerini izlemek için kullanamazsınız. Kısacası, sürümün ayrı bileşenlerin sürümlerini izlemek için kullanabileceğiniz başka bir bölümünü bulmanız ve tüm paketi izlemek için büyük ve küçük sürüm numaralarını ayırmanız gerekir.

Microsoft modeline benzer bir şey izliyorsanız:

major-version.minor-version.build-number.revision

Her bir bileşenin sürümünü izlemek için .revision öğesini kullanabilir ve her zamanki gibi tam bir ürün değişikliğini izlemek için küçük ve büyük revizyon numaralarını kullanabilirsiniz.

Buna benzer bir desen izliyorsanız:

Major-Version.Minor-Version.Build-Number

Tek tek bileşen sürümlerini izlemek için derleme numarasını kullanmanız gerekir.


0

Versiyon yazılımı hakkında bütün kitaplar yazılmıştır.

İşte benim kullandığım bir yaklaşım.

Her bölümün bir sürümü vardır:

major.minor.developmental

Bunların her biri 0'dan başlayan bir sayıdır.

Resmi bir sürüm için (yani müşteriler için), gelişimsel kısım, politika olarak daima 0 olmalıdır.

Binbaşı pazarlama kararı ile artırılır.

Küçük, piyasaya sürülen özellik kümeleri tarafından artırılır.

Misal:

  • Yeni bir bileşen üzerinde geliştirmeye başladım, bu yüzden sürüm numaram 0.0.1 olacak. Örneğin, dahili testler için masamı meslektaşlarıma bıraktığımda, geliştirme numarası 0.0.2, 0.0.3'e kadar yükselir.

  • Bu yeni şeyi piyasaya sürdüğüm 1.0.0 sürümüyle piyasaya sürdüm, burada geliştirme sonundan serbest bırakılmasına izin verilen tek değişiklik sürüm numarasını değiştirmekti (örn.

  • Bazı yeni özellikler eklenecektir. Bu özellikleri ekleyerek 1.0.0 taban çizgisi üzerinde çalışmaya başladım, böylece meslektaşlarıma test etmek için serbest bıraktığım sürümler 1.0.1, 1.0.2, vb.

  • Bir sonraki özellikler 1.1.0 olarak piyasaya sürüldü.

  • Pazarlama, bir sonraki büyük şeyin gerçekten büyük olacağına karar verdi, bu yüzden 2.0.0 olarak çıkacak. 1.1.1 üzerinde çalışmaya başlıyorum, 1.1.x'e geçiyorum ve 2.0.0 olarak çıkıyorum.

Ve böylece döngü tekrar eder.

Bu yaklaşım, her bileşen için, ataların izlenebilirliğini sağlar.

Kaynak (ve nesne) revizyon yönetim sisteminizin içinde, gelişimi yönetmek için şubeleri ve etiketleri (günün terminolojiniz ne olursa olsun) kullanın.

Revizyon kontrolünüz daha sonra her bir bileşeni, her biri için geliştirme dalları ve etiketler / etiketlerle tamamen ayrı olarak yönetebilir. Veya hepsini bir araya toplayabilirsiniz, bu durumda iş paketine göre dallanmak isteyebilirsiniz - ancak her bir bileşenin serbest bırakılmasıyla etiketlediğinizden / etiketlediğinizden emin olun (ve bunu yaptığınızda, her şeyin etiketlemesini / etiketlemesini unutmayın. Bu şekilde, o anda her şeyin durumunun bir anlık görüntüsüne sahip olursunuz.)

Serbest bırakma süreciniz dikkatli bir düşünce gerektirecektir. Bu yaklaşımı kullanmak bazı manuel adımlar içerir ve bu istenmeyen bir durum olabilir - bu, tüm sürüm sisteminizin sürüm numaralarını son nesneye nasıl aktardığına bağlıdır. Sürüm numaralarının sadece sayılar olarak adlandırıldığı çok gömülü kod için (örneğin, C kodunda #defined), bunu yine de elle yapmaktan başka bir seçeneğiniz yoktur. Güzel GUI'lere sahip masaüstü platformları genellikle bunu daha kolay hale getirir.


Yani, tek tek bileşenleri sürümlemek için üçüncü sayıyı artırdığınızı ve tüm sistemi sürümlemek için her bileşen için birinci veya ikinci sayıyı artırdığınızı mı söylüyorsunuz?
Robert Harvey

Her bir bileşeni ayrı ayrı geliştirme sürümü numaraları olarak yapın. Büyük veya küçük kısmı ilgili tam ürün sürümleriyle toplayın. Bu gömülü firmware için oldukça iyi çalışır NOT - Ben bir sürü DLL gemi olabilir PC tabanlı s / w için başka bir şey vs bu bir sürü düşünce vermek istiyorum. Bu yaklaşımda, bir hizmet paketini tanımlamak ve göndermek isteyebileceğiniz PC-s / w gibi şeyler için bazı kırışıklıklar da vardır.
quickly_now

Tokmağın, sorunun ne olduğunu söylemeden veya daha iyi bir şey önermeden bunu nasıl düşürdüğü ilginç.
hızlı bir şekilde

0

özet

Benim için sürüm yazılımını kullanmanın tek güvenilir yolu sürüm kontrol sisteminizden karma veya changeet tanımlayıcısını kullanmaktır .

Genel bir derleme sürüm numarası yararlı olabilir, ancak yalnızca bir derleme sunucunuz varsa ve / veya her sürümü imzalarsanız benzersiz olması garanti edilir. Birçoğumuz için bu geçerli değil.

Projeniz birden çok sürüm kontrol havuzuna bölünmüşse, kullanıcı arayüzünüzün her bağımlı havuzu sorgulayabileceği ve karma değerini kullanıcıya geri bildirebileceği bir mekanizma oluşturmanız gerekecektir.

Kişisel deneyimlerden örnek

Önceki bir işverendeki, (dahili) müşteri değiştirme yazılımımızla sorunları yeniden derlediğimiz ve derlediğimiz bir projede, cıva karmaları her bir uygulama ve kütüphaneye derlendi. Yazılım her başlatıldığında, tüm yazılım bileşenleri sorgulanarak bir revizyon dizesi oluşturuldu.

Bu düzeltme dizesi, yaklaşık sayfaya gittiğinizde görüntülenir ve uygulama her başlatıldığında günlük dosyasına yazılır. Şu şekildeydi:

Application name     (6a72e7c61f54)
    Library1         (b672a13a41e1)
        Library2     (9cc35769b23a)
    Library2         (9cc35769b23a)
    Library3         (4e9f56a0186a+)
        Library2     (9cc35769b23a)
    Library4         (2e3b08c4ac76)
        Library1     (b672a13a41e1)
            Library2 (9cc35769b23a)

Bundan kolayca Library3'ü değiştirdiklerini ve depoda bu değişiklikleri yapmadıklarını görebiliyordum, bu yüzden kontrol edilmeyen bir kod kullanıyorlar. Ayrıca karmaları mevcut test sistemimle karşılaştırabilirim, böylece Library1'i daha eski bir sürüme geri döndürdüklerini belirleyebilirim.

Bu, bir hata bildirdiklerinde, sorunun oluştuğu sırada kullanılan kodu tam olarak yeniden oluşturabileceğim veya en azından kurulumu yeniden üretemediğimden emin olabileceğim anlamına geliyordu.

Kullandığım derleme sistemi, bunu nasıl başardığım, yaşadığım sorunlar ve insanların bunlardan kaçınmak için önerdikleri şeyler hakkında daha fazla bilgi için Stack Overflow sorumuna bir göz atın .

Not: Bu sistem, yalnızca belirli bir karmanın, belirli bir çalışma dizini bir dosya karışımı içerebiliyorsa, çalışma dizininizde aynı dosya kümesiyle (örneğin git ve mercurial) sonuçlanacağı garanti edilen bir revizyon kontrol sistemi kullanırsanız gerçekten geçerlidir. ve birkaç revizyondan (örn. svn) gelen dizinler, çalışma dizininin durumu ile ilgili tüm bahisler kapalıdır ve bu yöntem hiç çalışmaz.

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.