• Sepet

Merkezi Versiyon Yönetim Sistemlerinde Sürüm Almak İçin İş Akışı Nasıl Şekillendirilir?

Bir önceki yazımda versiyon ve sürüm numaralarının nasıl oluşturulması gerektiği konusuna değinmiştim. Bu yazımda sürüm oluşturma sürecinde iş akışının Subversion, CVS ve ClearCase gibi merkezi versiyon kontrol sistemleri idaresindeki kaynak kodları üzerinde nasıl gerçekleştiğini ve sürüm ve versiyon numaralarının nasıl yönetilmesi gerektiğine değinmek istiyorum.

Subversion ve CSV gibi merkezi versiyon yönetim sistemlerinde programcılar tarafından yapılan değişiklikler main/trunk/head/master olarak bilinen ana kod dalına (branch) eklenir (commit). Sürüm bu daldan oluşturulur. Sürümün oluşturulabilmesi için sürüm yönetici tarafından codefreeze (ana kod dalında yapılan degişikliklerin durdurulması) ilan edilmesi gerekmektedir. Codefreeze ile programcılar belli bir zaman dilimi için üzerinde çalıştıkları uygulama özelliklerini (feature) commit edemezler. Böylece sürüm öncesi ana kod dalı mevcut hatalar giderilerek (bugfix), sürüm alınabilecek olgunluğa getirilir.

Sürüm yöneticisinin sürüm oluşturmak için sırayla yapması gereken işlemleri şu şekilde sıralayabiliriz:

  • İterasyon sonuna gelindiğinde sürüm yöneticisi codefreeze ilan eder. Programcılar ne zaman codefreeze ilan edileceğini bilirler ve çalışmalarını bu yönde şekillendirirler. Codefreeze sürecinde programcılar yaptıkları kodsal değişiklikleri ana kod dalına eklemezler. Tespit edilen hataların giderilmesine izin verilir.
  • Sürüm yöneticisi sürekli entegrasyon sunucusunda (örnegin Jenkins) projeyi yapılandırır (build). Yapılandırma esnasında birim ve diğer testler koşturulur. Oluşan hatalar programcılar tarafından giderilir.
  • Ana kod dalı sürüm oluşturmak için hazır hale gelmiştir. Sürüm ana kod dalından alınmaz. Bu amaçla bir sürüm dalı (release branch) oluşturulması gerekmektedir. Sürüm yöneticisi ana kod dalını baz alarak yeni bir sürüm dalı oluşturur. Oluşturulan sürüm dalı ilerde sürümde tespit edilen hataları gidermek için de kullanılır.
  • Sürüm dalının oluşturulmasıyla birlikte codefreeze sonlandırılır. Bu şekilde programcılar ana kod dalı üzerinde çalışmalarına devam edebilirler. Programcıların bloke olmalarını engellemek amacıyla codefreeze aralığının kısa tutulması gerekmektedir.
  • Sürüm yöneticisi sahip oldugu sürüm oluşturma araçları yardımı ile sürüm dalını baz alarak sürümü (release) oluşturur. Oluşan sürüm bir jar, war, ear, gz, tar, zip ya da so dosyasıdır. Oluşturulan sürümün başka bir proje bünyesinde kullanılmasını mümkün kılmak için sürüm Nexus gibi bir sürüm deposuna (release repository) eklenir.
  • Sürüm dalı üzerinde yapılan tüm değişikliklerin tekrar ana kod dalına dönmesi gerekmektedir. Bu amaçla sürüm yöneticisi ya da bir programcı tarafından iki dalın birleştirildikleri merge işlemi gerçekleştirilir.

Şimdi klasik iş akışının nasıl uygulandığını somut örnekler üzerinde inceleyelim:

Küçük Değişiklikler (Minor Changes)

Bu senaryoda programcılar küçük versiyon numarasının değiştirilmesine sebep olan değişiklikleri ana kod dalına (master branch) eklemektedirler.

0.1.0 Numaralı Sürümü Oluşturmak İçin Yapılması Gerekenler

1

  • Ana kod dalında kullanılan versiyon numarası 0.1.0-SNAPSHOT şeklindedir. Burada SNAPSHOT ibaresi sürüme doğru gidilirken kodun değişkliğe ugrayabileceği ve bu versiyon numarasının nihai olmadığı anlamına gelmektedir.
  • Sürüm yöneticisi programcılardan kod üzerinde yaptıkları değişiklikler hakkında bilgi edinir. Sürüm yöneticisi yapılan değişikliklerin sadece küçük versiyon numarasını etkileyecek türde olduğunu tespit eder. Bu sürüm numarasının 0.1.0 şeklinde olması gerektiği anlamına gelmektedir.
  • Sürüm yöneticisi release-branch-0.1.0 ismini taşıyan ve 0.1.0-SNAPSHOT ana kod dalını (master branch) baz alan yeni bir sürüm dalı oluşturur. Bunun öncesinde uygulamayı yapılandırarak, tüm testlerin çalışır durumda olduğunu kontrol eder.
  • Oluşturulan sürüm dalı release-branch-0.1.0 sürüm öncesi ve sürümde meydana gelen hataları gidermek için kullanılacak kod dalıdır.
  • Sürüm dalının oluşturulmasıyla codefreeze kaldırılır.
  • Sürüm yöneticisi ana kod dalının versiyon numarasını 0.2.0-SNAPSHOT, sürüm dalının versiyon numarasını 0.1.0 olarak değiştirir. Versiyon numaralarının adapte edilmesi kullanılan sürüm araçları tarafında da sağlanabilir.
  • Sürüm yöneticisi release-branch-0.1.0 dalına geçerek, 0.1.0 versiyon numarasını taşıyan sürümü oluşturur. Sürüm, sürüm deposuna yerleştirilir.
  • Sürüm dalı release-branch-0.1.0 üzerinde yapılan tüm değişiklikler ana kod dalı 0.2.0-SNAPSHOT ile senkronize (merge) edilir.

0.2.0 Numaralı Sürümü Oluşturmak İçin Yapılmasi Gerekenler

2

  • Ana kod dalında kullanılan versiyon numarası 0.2.0-SNAPSHOT şeklindedir.
  • Sürüm yöneticisi programcılardan kod üzerinde yaptıkları değişiklikler hakkında bilgi edinir. Sürüm yöneticisi yapılan değişikliklerin sadece küçük versiyon numarasını etkileyecek türde olduğunu tespit eder. Bu sürüm numarasının 0.2.0 şeklinde olması gerektiği anlamına gelmektedir.
  • Sürüm yöneticisi release-branch-0.2.0 ismini taşıyan ve 0.2.0-SNAPSHOT ana kod dalını (master branch) baz alan yeni bir sürüm dalı oluşturur. Bunun öncesinde uygulamayı yapılandırarak, tüm testlerin çalışır durumda olduğunu kontrol eder.
  • Oluşturulan sürüm dalı release-branch-0.2.0 sürüm öncesi ve sürümde meydana gelen hataları gidermek için kullanılacak kod dalıdır.
  • Sürüm dalının oluşturulmasıyla codefreeze kaldırılır.
  • Sürüm yöneticisi ana kod dalının versiyon numarasını 0.3.0-SNAPSHOT, sürüm dalının versiyon numarasını 0.2.0 olarak değiştirir.
  • Sürüm yöneticisi release-branch-0.2.0 dalına geçerek, 0.2.0 versiyon numarasını taşıyan sürümü oluşturur. Sürüm, sürüm deposuna yerleştirilir.
  • Sürüm dalı release-branch-0.2.0 üzerinde yapılan tüm değişiklikler ana kod dalı 0.3.0-SNAPSHOT ile senkronize (merge) edilir.

0.3.0 Numaralı Sürümü Oluşturmak İçin Yapılmasi Gerekenler

3

  • Ana kod dalında kullanılan versiyon numarası 0.3.0-SNAPSHOT şeklindedir.
  • Sürüm yöneticisi programcılardan kod üzerinde yaptıkları değişiklikler hakkında bilgi edinir. Sürüm yöneticisi yapılan değişikliklerin sadece küçük versiyon numarasını etkileyecek türde olduğunu tespit eder. Bu sürüm numarasının 0.3.0 şeklinde olması gerektiği anlamına gelmektedir.
  • Sürüm yöneticisi release-branch-0.3.0 ismini taşıyan ve 0.3.0-SNAPSHOT ana kod dalını (master branch) baz alan yeni bir sürüm dalı oluşturur. Bunun öncesinde uygulamayı yapılandırarak, tüm testlerin çalışır durumda olduğunu kontrol eder.
  • Oluşturulan sürüm dalı release-branch-0.3.0 sürüm öncesi ve sürümde meydana gelen hataları gidermek için kullanılacak kod dalıdır.
  • Sürüm dalının oluşturulmasıyla codefreeze kaldırılır.
  • Sürüm yöneticisi ana kod dalının versiyon numarasını 0.4.0-SNAPSHOT, sürüm dalının versiyon numarasını 0.3.0 olarak değiştirir.
  • Sürüm yöneticisi release-branch-0.3.0 dalına geçerek, 0.3.0 versiyon numarasını taşıyan sürümü oluşturur. Sürüm, sürüm deposuna yerleştirilir.
  • Sürüm dalı release-branch-0.3.0 üzerinde yapılan tüm değişiklikler ana kod dalı 0.4.0-SNAPSHOT ile senkronize (merge) edilir.

Büyük ve Küçük Değişiklikler (Major, Minor Changes)

Bu senaryoda programcılar hem küçük hem de büyük versiyon numarasının değiştirilmesine sebep olan değişiklikleri ana kod dalına (master branch) eklemektedirler.

4

0.1.0 Numaralı Sürümü Oluşturmak İçin Yapılmasi Gerekenler

  • Ana kod dalında kullanılan versiyon numarası 0.1.0-SNAPSHOT şeklindedir.
  • Sürüm yöneticisi programcılardan kod üzerinde yaptıkları değişiklikler hakkında bilgi edinir. Sürüm yöneticisi yapılan değişikliklerin sadece küçük versiyon numarasını etkileyecek türde olduğunu tespit eder. Bu sürüm numarasının 0.1.0 şeklinde olması gerektiği anlamına gelmektedir.
  • Sürüm yöneticisi release-branch-0.1.0 ismini taşıyan ve 0.1.0-SNAPSHOT ana kod dalını (master branch) baz alan yeni bir sürüm dalı oluşturur. Bunun öncesinde uygulamayı yapılandırarak, tüm testlerin çalışır durumda olduğunu kontrol eder.
  • Oluşturulan sürüm dalı release-branch-0.1.0 sürüm öncesi ve sürümde meydana gelen hataları gidermek için kullanılacak kod dalıdır.
  • Sürüm dalının oluşturulmasıyla codefreeze kaldırılır.
  • Sürüm yöneticisi ana kod dalının versiyon numarasını 0.2.0-SNAPSHOT, sürüm dalının versiyon numarasını 0.1.0 olarak değiştirir.
  • Sürüm yöneticisi release-branch-0.1.0 dalına geçerek, 0.1.0 versiyon numarasını taşıyan sürümü oluşturur. Sürüm, sürüm deposuna yerleştirilir.
  • Sürüm dalı release-branch-0.1.0 üzerinde yapılan tüm değişiklikler ana kod dalı 0.2.0-SNAPSHOT ile senkronize (merge) edilir.

1.0.0 Numaralı Sürümü Oluşturmak İçin Yapılmasi Gerekenler

  • Ana kod dalında kullanılan versiyon numarası 0.2.0-SNAPSHOT şeklindedir.
  • Sürüm yöneticisi programcılardan kod üzerinde yaptıkları değişiklikler hakkında bilgi edinir. Sürüm yöneticisi yapılan değişikliklerin büyük versiyon numarasını etkileyecek türde olduğunu tespit eder. Bu sürüm numarasının 1.0.0 şeklinde olması gerektiği anlamına gelmektedir.
  • Sürüm yöneticisi release-branch-1.0.0 ismini taşıyan ve 0.2.0-SNAPSHOT ana kod dalını (master branch) baz alan yeni bir sürüm dalı oluşturur. Bunun öncesinde uygulamayı yapılandırarak, tüm testlerin çalışır durumda olduğunu kontrol eder.
  • Oluşturulan sürüm dalı release-branch-1.0.0 sürüm öncesi ve sürümde meydana gelen hataları gidermek için kullanılacak kod dalıdır.
  • Sürüm dalının oluşturulmasıyla codefreeze kaldırılır.
  • Sürüm yöneticisi ana kod dalının versiyon numarasını 1.1.0-SNAPSHOT, sürüm dalının versiyon numarasını 1.0.0 olarak değiştirir.
  • Sürüm yöneticisi release-branch-1.0.0 dalına geçerek, 1.0.0 versiyon numarasını taşıyan sürümü oluşturur. Sürüm, sürüm deposuna yerleştirilir.
  • Sürüm dalı release-branch-1.0.0 üzerinde yapılan tüm değişiklikler ana kod dalı 1.1.0-SNAPSHOT ile senkronize (merge) edilir.

1.1.0 Numaralı Sürümü Oluşturmak İçin Yapılmasi Gerekenler

  • Ana kod dalında kullanılan versiyon numarası 1.1.0-SNAPSHOT şeklindedir.
  • Sürüm yöneticisi programcılardan kod üzerinde yaptıkları değişiklikler hakkında bilgi edinir. Sürüm yöneticisi yapılan değişikliklerin küçük versiyon numarasını etkileyecek türde olduğunu tespit eder. Bu sürüm numarasının 1.1.0 şeklinde olması gerektiği anlamına gelmektedir.
  • Sürüm yöneticisi release-branch-1.1.0 ismini taşıyan ve 1.1.0-SNAPSHOT ana kod dalını (master branch) baz alan yeni bir sürüm dalı oluşturur. Bunun öncesinde uygulamayı yapılandırarak, tüm testlerin çalışır durumda olduğunu kontrol eder.
  • Oluşturulan sürüm dalı release-branch-1.1.0 sürüm öncesi ve sürümde meydana gelen hataları gidermek için kullanılacak kod dalıdır.
  • Sürüm dalının oluşturulmasıyla codefreeze kaldırılır.
  • Sürüm yöneticisi ana kod dalının versiyon numarasını 1.2.0-SNAPSHOT, sürüm dalının versiyon numarasını 1.1.0 olarak değiştirir.
  • Sürüm yöneticisi release-branch-1.1.0 dalına geçerek, 1.1.0 versiyon numarasını taşıyan sürümü oluşturur. Sürüm, sürüm deposuna yerleştirilir.
  • Sürüm dalı release-branch-1.1.0 üzerinde yapılan tüm değişiklikler ana kod dalı 1.2.0-SNAPSHOT ile senkronize (merge) edilir.

Eğer API değişiklikleri yapılmazsa, bir sonraki sürümde sürümün taşıyacağı versiyon numarasi 1.3.0, ana kod dalının versiyon numarasi 1.4.0-SNAPSHOT şeklinde olacaktır. API değişikleri yapılması durumunda sürüm numarasının 2.0.0 şeklinde olması gerekmektedir, çünkü yapılan değişiklikler bir önceki sürümle API seviyesinde uyumlu değildirler ve bu durumun versiyon numarası aracılığı ile ifade edilmesi gerekmektedir. 2.0.0 sürüm akabinde ana kod dalının versiyon numarasi 2.1.0-SNAPSHOT olur.

Sürüm Hatalarının Giderilmesi (Bugfix)

Bu senaryoda üçüncü sürüm ile oluşturulan ve 1.1.0 versiyon numarasına sahip sürümde meydana gelen hataların giderildikten sonra yeni bir sürümün nasıl oluşturulduğu incelenmektedir.

5
Bugfix Sürümü İçin Yapılması Gerekenler

  • Sürüm yöneticisi release-branch-1.1.0 sürüm dalını baz alarak bugfix-branch-1.1.x ismini taşıyan yeni bir kod dalı oluşturur. 1.1.0 sürümü bünyesinde yer alan hataların bugfix-branch-1.1.x kod dalında giderilmesi gerekmektedir. release-branch-1.1.0 kod dalı değiştirilemez. Değiştirilmesi durumunda 1.1.0 versiyon numarasına sahip bir sürümün tekrar oluşturulması mümkün değildir.
  • bugfix-branch-1.1.x bünyesinde hatalar giderilir.
  • bugfix-branch-1.1.x kullanılarak giderilen hataları ihtiva eden 1.1.1 1.1.2 versiyon numaralı bugfix sürümler oluşturulur.
  • bugfix-branch-1.1.x kod dalındaki diğer hatalar giderildikçe bugfix numarası bir artırılır ve yeni bugfix sürümü oluşturulur.
  • bugfix-branch-1.1.x kod dalında yapılan tüm değişiklikler ana kod dalına (master branch) geri aktarılır. Bu değişiklikler release-branch-1.1.0 kod dalına aktarılmaz.

Bir sonraki yazımda versiyon ve sürüm numaralarının Git iş akışında (gitflow workflow) nasıl yönetildiği konusuna değineceğim.


EOF (End Of Fun)
Özcan Acar

Share Button

Özcan Acar

Özcan Acar 1974 İzmir doğumludur. İlk ve orta öğrenimini İzmir’de tamamladı. Almanya'daki lise öğreniminden sonra doksanlı yılların sonunda Almanya’nın Darmstadt şehrinde bulunan FH Darmstadt üniversiteden bilgisayar mühendisi olarak mezun oldu.

KurumsalJava.com, SmartHomeProgrammer.com ve Mikrodevre.com adresleri altında blog yazıyor. Kurduğu BTSoru.com'da ona yazılımla ile ilgili sorularınızı yöneltebilirsiniz. Pratik Programcı Yayınları bünyesinde Pratik Spring, Pratik Agile ve Pratik Git ismini taşıyan kitapları bulunmaktadır. 21.12.2009 tarihinde Java Champion olarak seçildi.

Son Yazıları (hepsini göster)

    Yazıyı Oku