9 Nisan 2014 Çarşamba

Jenkins mi Hudson mı?

Perde Arkası
Aslında bu konu biraz sonra yazacaklarımdan anlaşılacağı üzere mazide kalmış ve cevabı az çok belli olan bir konu. Yazmamın tek sebebi Hudson aracının (Resimde görüleceği üzere Eclipse i arkasına da almış amcamız) hala farklı bir şekilde hortlatılmaya çalışılmasından kaynaklanmakta. Hikayeyi John Ferguson Smart'a ait "Jenkins: The Definitive Guide" adlı kitabından tercüme ederek biraz da ekstra bilgi katarak yazalım: (Sayfa 3 Bölüm 1.4)
"Koshuke Kawaguchi SUN'da çalışırken 2004 sonlarında tamamen hobi amacıyla Hudson adlı bir projeye başlar. Tabii proje geliştikçe gelişir ve artık SUN kendi iç projelerinde bu aracı kullanmaya başlar. Bu aracın değerini anlayan SUN 2008 başlarında Koshuke'den sadece Hudson projesine yoğunlaşmasını ister ve projeyi hobi olmaktan çıkartıp, kendisine profesyonel bir şekilde katkı ve destek sağlar. 2010 yılında artık Hudson pazarın %70'ine hakim olan lider sürekli entegrasyon aracı haline gelir.

2009 yılında Oracle SUN'ı satın alır. 2010'un sonlarına doğru Hudson geliştirici topluluğu ile Oracle arasında bazı gerginlikler baş gösterir. Bu gerginliklerin temel nedenleri olarak Java.net infrastructure'daki bazı problemler ve Oracle'ın Hudson'ı markalaştırma istekleri gösterilir. Bu gerginlikler tabii Oracle yönetimindeki projenin işleyişini de bayağı bir etkiler. Şöyle ki; Oracle release takviminin yavaş olduğu çok sıkı kontroller altında geliştirilen bir geliştirme süreci öngörürken, Koshuke liderliğindeki geliştirici ekip eskiden Hudson'da başarıyla uyguladıkları gibi açık kaynak kodlu, esnek, hızla yapılan, community odaklı bir geliştirmeden yanadır. Kasım 2010'da Oracle ürün yöneticisi Susan Duncan tam bu ayrım noktasında iken insanları Oracle arkasında durmaya devam eder bu durumu da bu forum sayfasında belirtir. Hadi herkes bizim projeye dediği günün üzerinden fazla geçmeden Bu sitede Oracle artık bu işi yürütemeyeceğini anlar ve sayfanın forum sitesinde kullanıcıları başka bir mecraya doğru sürüklediğini belirtir.
Ocak 2011'de Hudson geliştiricileri son derece kararlı bir şekilde projenin adını Jenkins olarak belirler ve Hudson kodlarını yeni bir GitHub projesine alarak çalışmalarına buradan devam ederler. Çekirdeği ve eklentileri yazan çoğu geliştirici Koshuke'yi takip edip Jenkins topluluğunu böylece oluştururlar. Koshuke aldığı bu kararı kendi blog sitesinin bu sayfasında yayınlar ve kendi adını koyduğu ve büyüttüğü projesine güle güle Hudson demek zorunda kalır ya da bırakılır diyelim.
Bu çatallanmadan (Project Fork, versiyon 1.395 den sonra ) sonra kullnıcıların da bayağı bir kısmı Jenkins tarafına geçer. Kitabın yazım tarihinde (2011) kullanıcıların %75'i projelerini Jenkins'e taşımış, %13 Hudson'da kalmış, % 12 ise her ikisini de kullanır halde Jenkins'e geçmeyi planlamaktaymışlar.
Ama gelin görün ki hal böyleyken Oracle ve Sonatype (Maven ve Nexus'un arkasındaki firma) Hudson üzerinde çalışmalarına Github üzerine de taşıyarak halen devam ederler. Ama odaklarını altta yatan infrastructure, Maven entegrasyonu, dependency injection framework ve eklenti mimarisi gibi farklı konulara kaydırmış durumdadırlar." 
Olayı kaldığı yerden ben devam ettireyim. Oracle her ne kadar projeyi devam ettirmeye çalışsa da yürüttüğü projeleri hep atıl kalır.  Kitabın basım tarihinden çok sonra, 24 Ocak 2012 günü Oracle Hudson projesini tamamen Eclipse vakfına devreder ve projenin adı Eclipse Hudson adıyla halen devam ettirilmektedir. Koshuke'nin ve topluluğun Jenkins hamlesinin ve Oracle'a karşı olan davranışının ne kadar doğru olduğu da böylece bir nebze anlaşılmış olur.

Hangisini Seçmeliyim?
Eveet, Smart'a bu bilgileri sağladığı için çok teşekkür ederek biz neyi seçelim sorusuna cevap arayalım. Efendim; Hudson bir CI sisteminiz varsa, güncellemek ve yeni versiyonlara geçmek istemiyorsanız, yeni özellikler benim neyime diyorsanız, eğer çalışıyorsa tamir etme mantığı (If it works Don't fix it !) ile hareket ediyorsanız, Sonatype'ın ileride getireceği standart eklenti geliştirme yöntemi ile kendi eklentimi kendim daha kolay yazarım diyorsanız, Hudson ile mutlu mesut yola devam etmelisiniz, sizin için yapılabilecek pek bir şey yok. Hudson'un geleceği için ise, Eclipse projesi olması dolayısı ile IDE entegrasyonu, diğer Eclipse eklentileri ile entegrasyon vs gibi konulara kapı aralanmış durumda, göreceğiz bakalım ama ortada henüz net bir şey yok bu konuda.

Yok ben yeni Hudson'ı kullanacağım derseniz, topluluğun gücünü arkama alacağım derseniz, bir hatayı hep benden önce bulup çoktan raporlamış ve yeni sürüme çözüm olarak ekletmiş bir toplulukta yaşayacağım derseniz, hem hızlı geliştirilen (haftalık) hem de uzun dönemli (3 haftalık) daha stabil versiyonları olan bir CI sunucu programım olsun derseniz, olursa son model olsun derseniz, buyurun size taze taze mis gibi Jenkins verelim :)

Karar Vermeye Yardımcı Olalım
Yazıyı yazıyor olduğum şu ana (15.04.2014) ait, güncel GitHub istatistiği vererek seçiminize yardımcı olalım: 
Jenkins : 569 üye, 1191 depo.
Hudson:   32 üye, 17 depo.

Hudson forumlarında dolaşırsanız "bazı eklentilerin hala neden güncellemediğini ama Jenkins'inki niye güncel :( " gibi yazılara denk gelebilirsiniz :) Bunun yanında bunu yazanların "yanlış anlamayın ben Hudson kullanıyorum ileride de kullanmak istiyorum, güvenlik, stabilizasyon vs benim için önemli" dediklerini de görebilirsiniz.

Ayrıca burada CI server ile ilgili bir oylama bir şeyler ifade etmesi açısından önemli. Hiç bir şey kullanmayanlara mı yanalım ne yapalım bilemedim :(

Koshuke de kendi web sitesinde Jenkins ve Hudson üzerindeki commit sayılarını 2012'de yayınlamış işte link. Sayfanın başında dış bir link ile 2012-2013 arası istatistik de var.

Bu da Koshuke ile Oğuz Dağ arasında geçen söyleşi. Tabii Koshuke'nin o zamanki düşünceleri biraz farklı imiş Hudson ile ilgili, henüz ayrılık olmamış. Ama arkadaştaki motivasyona, hem de open source bir projede, 
hayran olmamak elde değil.

Bu linkte InfoQ firmasının yapmış olduğu bir anketi görebilirsiniz. İnsanlara hangi CI sunucuyu kullandıklarını soruyorlar. Jenkins burada da açık ara önde gidiyor. Ben de sağ tarafta devamlı açık bir anket tutmaya başlamıştım. Benim de anket listeme koyduklarım isabet olmuş, InfoQ sıralamasında neredeyse en çok kullanılanları tutturmuş ve listeye yazmışım :) "Vote Now" açıkken oyunuzu vereceğiniz aracı sürükleyip grafikte uygun yere bırakın sonra "Submit Vote" deyin sonra sonuca bakın. Direk sonuç için "Average" butonunu kullanabilirsiniz. Jenkins yaklaşık %75 oy almıştı ben bakarken, yorum sizlerin...

Her iki araç da en azından şu an için görüntü olarak birbirine çok yakın durumdalar. Birine aşina iseniz diğeri size aynı gibi gelecektir, bu bilgiyi de verelim ve her iki proje özelinde bir şeyler de yazarak bu konuyu kapatalım.

                                                         Jenkins
Bıyık altından Hudson'a gülüş
Biraz Java dünyasının konu ile alakasına değinelim. John Ferguson Smart, Wakeleo Consulting firmasında kurumsal Java ve Agile yöntemler hakkında danışmanlık veren ve Java yazılım çevrelerince tanınan meşhur bir kişi. Yazıları, kitapları son derece pratik ve bilgi dolu oluyor. Siz de internetten ilgilendiğiniz konularla alakalı sunumlarını, yazılarını bulabilirseniz kesinlikle okumanızı tavsiye ederim, çok faydasını görürsünüz. Bu adresten Smart'ın Jeknis ile ilgili hazırlamış olduğu elektronik bir kitabını ücretsiz indirebilirsiniz. Çok güzel bir şekilde CI mantığının Jenkins özelinde, bir organizasyona nasıl fazlar halinde entegre edileceği detaylıca anlatılmış. Bir kere olsa içindekiler listesine bakıp ilginizi çeken kısımlara göz gezdirmenizde çok fayda var.
Smart'dan laf açılmışken ayrıca Java dünyasında yaşayanlar için 912 sayfalık java power tools adlı kitabı, java proje liderleri için tam bir başucu kitabı niteliğinde. Bu kitabın ne yazık ki ücretsiz bir versiyonu yok. Sürekli entegrasyonun araçlar ile birlikte baştan sona anlatıldığı bir kitap.

Jenkins'e dönecek olursak; Jenkins haftalık sürüm çıkarması ile iştahlı kullanıcılarını mest etmeye devam ederken, kararlı sürüm seven daha durağan kullanıcıları için ise 3 haftalık periyotlar halinde "older but stable" mantığı ile long term support versiyonu çıkarmaktadır. Bu durum stabilizasyon arayan Hudson kullanıcılarının Jenkins'e geçmesine en büyük nedeni olarak gösterilebilir. Çünkü zaten kapalı bir ağda iseniz ki azımsanmayacak kadar proje bu şekilde çalışıyor gördüğüm kadarı ile, güvenlik konusu pek dert edeceğiniz bir durum olmayabilir. 

Hudson
Hudson için size sitelerini vermekten öte çok bir şey sunamayacağım zira hem kullanmıyorum hem de pek kullananı görmedim etrafımda. 

Bu site Oracle tarafından yayınlanan web sayfası. Bu da Eclipse vakfı tarafından sürdürülen site. Eclipse vakfının sayfasında yukarı menüde bulunan "About this project" linkine tıkladığınızda commit sayılarını (ve azlığını) göreceksiniz. "Who's involved" menüsünde ise projeyi ilerletmeye çalışan ekibi göreceksiniz. Daha detaylı bilgileri kurcalamayı size bırakıyorum, zira siz bakıyorken bir çok şey değişmiş olabilir bu proje ile alakalı. İnternette biraz araştırınca sizin de hemen karşınıza gelecek olan içerik eskimiş olsa da eskiye ait geçerli bilgileri bulundurduğunu düşündüğüm bu site var. Belki eski versiyona eklentilerden vs. den dolayı bağımlılığı olanlar vardır, onların işine yarar. İyice eski olan Hudson üzerinden anlatılıyor, bir kere okunmasında belki genel olarak da fayda da var. 

Bir sonraki yazımızda Apache Tomcat kullanarak, seçmiş olduğumuz Jenkins CI sunucumuzu ayağa kaldıracağız.

Konu ile ilgili başkaca linkler:
Jenkins (Community) & Hudson (Sonatype - Oracle) Hikayeleri

Hiç yorum yok :

Yorum Gönder

Bu sayfalarda iseniz sizden de tecrübelerinizi paylaşmanızı bekliyorum... Görüş, öneri veya istek fark etmez.