Showing posts with label hudson. Show all posts
Showing posts with label hudson. Show all posts

Friday, March 07, 2008

Hudson artık Türkçe


Eveet, uzun zamandır yapmayı planladığım projeyi hayata geçirdim. Bundan yaklaşık 30 sürüm önce Kohsuke'nin duyurduğu olayı yani Hudson'ın lokalizasyonunu, nihayetinde vakit ayırıp gerçekleştirebildim.

Onlarca property dosyası, bir o kadar html dosyası nihayetinde Hudson'ın Türkçe lokalizasyonunu başlatmanın inanılmaz hazzı, büyük yüzdesini de bitirmek de cabası. Resmi olarak changelog'da yayınlandığı için ben de burada anons edebiliyorum. Her ne kadar changelog içerisinde Jesse Glick'in bahsettiği Türkçe lanetine yakalandı isem de, Fransızca, Japonca, Almanca ve Rusça'dan sonra Hudson'ın bir dili de artık Türkçe... Artık Hudson'ı 1.190 versiyonundan sonra, eğer lokaliniz Türkçe ise, Türkçe kullanabileceksiniz..

Hudson'ı Türkçe kullanmak isteyenler, deneyin ve çeviriler ile ilgili yorumlarınızı bana gönderin. Tek yapmanız gereken, Hudson'ın bu versiyonu ve sonrasını indirip, deploy edip ardından lokalinizi Türkçe'ye çekmek.. Ben bir çevirmen değilim, sadece bir açık kaynak gönüllüsüyüm... Dolayısıyla, daha iyiye tabiiki hep beraber götüreceğimizin farkındayım. Bu nedenle yorumlarınızı bekliyorum...

(Düzeltme : Sadece yorumlarınızı değil, aynı zamanda katılımlarınızı da bekliyorum)

Monday, December 10, 2007

Hudson ve pluginleri

Sürekli Entegrasyon, gerçekten hafife alınmaması gereken bir kavram, tabi bu tür işleri yaparken hangi araç ya da araçları kullandığınız da önemli...
Geçen gün okuduğum Continuous Integration anti-patterns isimli bir makalede yazılan yapılmaması gerekenler, ya da bizi yanlışlara sürükleyen ortak hatalar listesi, kullandığım CI Server aracını yeniden takdir etmemi sağladı... Tabi ki Hudson'dan bahsediyorum. Bir CI Server'ın yapması gereken herşeyi yapmaya çalışıyor, en azından bunun için uğraşı veriliyor. Ve özellikle kendini, pluginleri ile ön plana çıkarıyor... Üzerinde düşünüldükten sonra bazı pluginler Hudson'ın içerisine konuluyor, diğerleri ise plugin olarak entegrasyonu size bırakılıyor... Peki Hudson'ı bu kadar ön plana çıkaran pluginler nelerdir?


Source Code Management Plugin'leri

CVS ve SVN Hudson'ın içerisinde geliyor. Bunun dışında pluginler ile getirdikleri Accurev [Tutorial sayfası], ClearCase [Tutorial sayfası], Mercurial [Tutorial sayfası], Perforce [Tutorial sayfası], StarTeam [Tutorial sayfası]

Repository Browser Pluginleri

FishEye ve Sventon Hudson'ın içerisinde geliyor. Bunun dışında Polarion [Tutorial Sayfası] plugini mevcut.

Job Tipleri

Halihazırda Ant, Maven, Maven 2, free-style jobları ile gelen Hudson, bunların yanında Batch Task [Tutorial Sayfası], Gant [Tutorial Sayfası], MSBuild [Tutorial Sayfası] ve NAnt [Tutorial Sayfası] pluginleri ile yapabileceği iş türlerini artırıyor.

Code Coverage Pluginleri

Clover [Tutorial Sayfası], Cobertura [Tutorial Sayfası] ve Emma [Tutorial Sayfası] pluginleri ile code coverage konusunda çeşitlilik sağlıyor.

Code Convention Pluginleri

FindBugs [Tutorial Sayfası], Task Scanner [Tutorial Sayfası] ve Violations [Tutorial Sayfası] pluginleri code convention ile ilgili tool'ları kullanıp, raporlamaları yayınlamanızda oldukça yardımcı oluyor, özellikle Violations plugini PMD ve CheckStyle gibi araçların raporlarını harmanlayıp güzel bir arayüz sağlıyor..

Notification Pluginleri

İçerisinde gelen mail notification olayını ve RSS desteğini saymazsak Google Calendar [Tutorial Sayfası], IRC Plugin [Tutorial Sayfası] ve Jabber [Tutorial Sayfası] pluginleri bilgilendirme için kullanılabiliyor

Issue Management Pluginleri

JIRA [Tutorial Sayfası] ve Trac [Tutorial Sayfası] pluginleri bu konuda yardımcı olabilir.

Testing Pluginleri

JUnit entegrasyonu içerisinde bulunan Hudson'ın diğer test pluginleri, JavaTest Report [Tutorial Sayfası] ve NUnit [Tutorial Sayfası]

Diğer Pluginler

Bu pluginlerin dışında sürüm işlemlerini geliştirmek, güçlendirmek ve daha rahat yönetmek adına bazı pluginler yapılmıştır ki bunlar bazen gerçekten çok kullanışlı olabiliyor. Bu pluginler ise Build-timeout [Tutorial Sayfası], Japex - [Tutorial Sayfası], java.net uploader [Tutorial Sayfası], Locks and Latches plugin [Tutorial Sayfası], Naginator [Tutorial Sayfası], Plot Plugin [Tutorial Sayfası], Port Allocator [Tutorial Sayfası], SCP [Tutorial Sayfası], Text-finder [Tutorial Sayfası], URL Change Trigger [Tutorial Sayfası], VMware [Tutorial Sayfası] ve Xvnc [Tutorial Sayfası]. Tabi bunların ne iş yaptığını anlamak için sayfaları dolaşmanız gerekiyor.

Üffff amma çok plugin varmış...

Peki bu kadar plugin ile nasıl başa çıkacağım mı diyorsunuz? Bunu da düşünmüş adamlar, Hudson'ı benim daha önce yazdığım bu yazıda veya daha güncel olan Hudson dokümanında belirtildiği şekilde kurduysanız, Manage Hudson > Manage Plugins dediğinizde önünüze açılacak ekranda pluginlerinizin bir listesini bulacaksınız. Bu listede Plugininizin adını, versiyonunu bulabilir, silebilir, veya yeni plugin ekleyebilirsiniz. Yeni plugin eklemek için ise Plugin Download sayfasından yüklemek istediğiniz plugini bulup indirdikten sonra (unutmayın uzantısının hpi olması gerekiyor), manage plugins sayfasında bulunan Upload Plugin kısmını kullanarak ekleyebilirsiniz. Pluginleri kullanmak için yukarıda yazdığım listede pluginin hemen yanında bulunan "Tutorial Sayfası" linkini kullanabilirsiniz.

Tutorial sayfası size yetmedi veya eksik, ya da bir sorun olduğunu düşünüyorsunuz, o zaman Hudson'ın forumlarına girip, bu konuda yapılan tartışmalara bakabilirsiniz. Umarım faydalı bir yazı olur..


Not : Pluginleri gruplandırırken kategori isimlerini ingilizce bırakmamın sebebi ise bir çevirmen olmamamdan dolayı anlamlarını kaybetmelerini istemememdir :))

Friday, November 09, 2007

Kötü misal emsal olmaz mı?

İş arkadaşlarımdan birisi ile yaşadığım ilginç bir diyalog, etrafımdaki insanların açık kaynak ile aralarında ne kadar ince bir iplik olduğunu ve bunun hangi durumlarda çabucak kopabileceğini bana gösterdi.

Diyaloğumuzun konusu, kullandığımız ürünlerden biri olan Jakarta Slide (linke tıklayınca görecekleriniz hoşunuza gitmeyebilir) idi. Arkadaşım, özellikle Websphere'e geçiş esnasında bize çok fazla sıkıntı yaratan bu ürün ile, aktif olarak kod geliştiriyordu ve yaşadığımız sıkıntılarla birebir muhattap oluyordu. Anlayacağınız dert yanması gereken birileri var ise yaşadığımız entegrasyon sorunlarından dolayı ben ve o'dur. Bu işi Slide ile yürütmeli miyiz sorusunu sorduğumuz sıralarda Roland Weber'den "[ANNOUNCEMENT] Jakarta Slide is retired" başlığı ile bir mail geldi ve mail içeriği ise şöyleydi;

The Apache Jakarta PMC is sorry to announce the retirement of the Jakarta Slide subproject. After it's last release in December 2004, development activity was significantly reduced and came to a total standstill this year. Without a minimum developer community that can release security fixes, we have no choice but to retire Slide. We'll keep at least one of the mailing lists open for a transition period, so users can discuss alternatives and migration away from Slide. Further use of the Slide codebase is discouraged.

One alternative to Slide is provided by the Apache Jackrabbit project. Jackrabbit has a healthy, active developer community and provides, among others things:
- a server-side content repository
- a WebDAV server component for access to the repository
- a WebDAV client component
Please visit http://jackrabbit.apache.org/ for more information.

We apologize for the inconveniences.


Bu maili okuduktan sonra alternatifler üzerine daha çok düşünmeye başladık. Tam bu noktada arkadaşımın Slide'a ve dolayısıyla Açık Kaynağa olan güvenini kaybettiğini gördüm ve diyaloğumuzda da bu konuda ne kadar kararlı olduğunu hissettim. Böyle hissetmesinin sebebi her ne kadar ürünün emekli olmaya karar vermesi olsa da (destek ve yardım bulamayacağını düşünmesi), bu ürünü tercih eden ve entegrasyonunu gerçekleştiren kod geliştirme ekibinin de gerek kodlama şekli ile, gerekse verdiği destek ve çalışma şekli ile bu ürüne olan güvenin sarsılmasında büyük payı vardı.

Ben her ne kadar arkadaşımı kötü misalın emsal olmaması gerektiğine inandırmaya çalışsam da, o incecik iplik kopmuştu ve yeniden oluşturulması gerekirdi.

İşte bu noktada açık kaynağın, açık kaynak topluluğu dışındaki kod geliştiricilerin gözünde itibarını sağlaması (arkadaşımın yeniden açık kaynağa güvenmesi) ve organik yapısı itibariyle açık kaynak olabilmesi için

  1. Aktif bir topluluğun açık kaynak proje üzerinde aktif olarak (bulgu girme, testleri yapma) uğraşması
  2. Açık kaynak projenin değişik sistemlerle entegrasyonu ile ilgili dokümantasyonun olması
  3. Kod geliştirmenin devam etmesi ve sürümlerin çıkması
  4. Açık kaynak projenin mevcut sisteme entegrasyonunun layığıyla yapılması gerekir.

Slide yukarıda atılan mail ile bir yeniden doğuş olmayacağını ve yazdığım maddelerden ilk üçünü artık yapamayacağını (3. madde 2004'te sona ermişti, 2. madde forumlar aracılığı ile zar-zor ilerliyordu) söylüyordu, geliştirdiğimiz projede 4 .madde de zaten sağlam olmadığı için, Slide'ı artık açık kaynak bir ürün olarak görüp, açık kaynağı bununla yargılamanın bir manası yok. Benim görüşüme göre slide sadece kodlarını bulabileceğiniz bir doküman yönetim sistemi aracıdır.

Yukarıda belirttiğim maddelerin önemini, sadece kodlarını açık kaynak hale getirerek bir başarasızlık hikayesi yaratan Xara ile ilgili bu yazıyı okuyarak anlayabilirsiniz.

Size bilmem ama bence kötü misal emsal olmaz, olmayacaktır da...

Thursday, October 18, 2007

Yazılım Zirvesi

Perşembe günü IBM'in Yazılım Zirvesi'ne gittim. Gayet güzel bir ortamda IBM'den arkadaşlarımızla hoş sohbetler yapma fırsatı bulduk.

Özellikle Oracle'ın BEA'ya yaptığı teklif ve bu teklifin kabulu durumunda oluşacak fırsatlar ve eğer teklif kabul edilirse ve Oracle bu satın almayı gerçekleştirirse oluşacak rekabet ortamından bahsettik. Tabi IBM'in bu konuya bakışı üzerine de konuşma fırsatımız oldu.

Daha çok ürün tanıtımı şeklinde geçen zirvede, Erkan'ın AppScan, Deniz'in Websphere Ailesi, Arden'in Webshere XD ve Nail'in BuildForge sunumlarına katılma şansım oldu. Özel ilgim olduğu için olsa gerek bunlardan özellikle BuildForge sunumuna katılmak için uğraştım. BuildForge ürününü içeren Rational ailesi ile ilgili şahsi düşüncem piyasada yazılım geliştirme yaşam döngüsünü ürün ailesi olarak çözmeye çalışan önemli bir ürün olduğu yönünde. Fakat bu tür bir çözüm eğer herhangi bir sisteminiz yok, bu işe yeni başlıyorsanız uygulanması büyük fayda getirecek bir çözüm. Hmm, bir de ITIL standardlarına uygunluğu var. Bunun dışında eğer zaten bu tür bir sistem kullanıyorsanız, kullandığınız ürünü değiştirmenin avantajlarını/dezavantajlarını iyice ortaya koymanız gerekiyor. Şahsi görüşüm, Hudson'ın geliştirilme hızını da işin içine koyarsam BuildForge'un Hudson'dan daha üstün olmadığı yönünde. En azından bizim yürüttüğümüz sürüm sistemi ve ortamları için...

Monday, August 20, 2007

Hudson ve JBoss

Hudson kullanım kolaylığı, göze hoş görünebilmesi ve bir çok diğer nedenden dolayı (Hudson ile Sürekli Entegrasyon) açık kaynak topluluğu içerisinde sık kullanılır oldu. Uzun süredir Hudson kullanan JBoss, hudson sayfasında sürümlerini herkesin göreceği hale getirdi. Bu da bir anlamda Hudson'a yapılmış bir jest. Ne de olsa JBoss açık kaynak topluluğu içerisinde gayet iyi bir şöhrete sahip. Bu linke tıklayarak JBoss'un hudson sayfasını görebilirsiniz.

Hudson ile ilgili gelişmeleri Kohsuke Kawaguchi'nin blog'larından bulabilirsiniz.

Sunday, August 12, 2007

Hudson ile Sürekli Entegrasyon

Sürekli Entegrasyon (Continuous Integration) konusu herkesin dikkatlice üzerinde durması gereken hayati bir konudur. Geliştirdiğiniz proje eğer Agile Development tarzında bir proje ise sürekli entegrasyon daha bir önemli hale gelir. Çünkü bulunduğu yer, developer ile client arasında, proje için olmazsa olmaz bir pozisyon olacaktır.

Sürekli entegrasyonu sağlamak adına en çok kullanılan araç CruiseControl'dür... Biz de açıkçası projemizde yaklaşık 3 yıldır CruiseControl kullanıyoruz. Ama bu yazıda size birçok açıdan daha avantajlı, kullanımı kolay başka bir araç olan Hudson'dan bahsedeceğim.

Hudson'ın en göze çarpan ve beni bu yazıyı yazmaya iten özelliği kurulumunun ve hayata geçirilmesinin çok kolay olması. Yani sadece bir web server üzerine deploy etmeniz çalışmaya başlamanız için yeterli. Bu yazıda basitçe hudson'ı Tomcat üzerinde nasıl hayata geçireceğimizi ve yapılabilecek bazı ayarları anlatmaya çalışacağım.

Kurulum

Çalışan bir Tomcat'e (5.0 ve üstü) sahip olduğunuza emin olduktan sonra, hudson'ı bu linke tıklayarak indirmeniz gerekiyor. Aynı Tomcat üzerine birden fazla hudson çalıştırmak isteyebilirsiniz, farklı iş türlerini gruplamak için olabilir, her ne kadar hudson'ın tab sistemi buna benzer bir yapıya sahip olsa da, gruplamanın dışında CI Server'ı restart, redeploy etmeniz gerekebilir. Bu durumda yapmanız gereken iki iş var

  • hudson.war dosyasının ismini değiştirmeniz,
  • Değiştirdiğiniz war dosyasının web.xml'ini açıp HUDSON_HOME değişkenine bir değer atamanız gerekiyor.
Bu şekilde birden fazla hudson'ı aynı Tomcat üzerinde çalıştırabilirsiniz.

Konfigürasyon ve Püf Noktaları

Eğer hudson'ı kapsamlı bir projede kullanacaksanız, Tomcat üzerine hudson'dan başka bir uygulama deploy etmeyin, böylece Tomcat'in JVM ayarlarını hudson için özel olarak ayarlayabilirsiniz.

Güvenlik : Hudson ile ilgili yapabileceğiniz önemli konfigürasyon ayarlarından bir tanesi de güvenlik ile ilgili olan ayardır. Her ne kadar çok gelişmiş bir güvenlik sistemi olmasa da, hudson'a yapacağınız birkaç ayar ile developer'ların job'ları (Hudson içerisinde iş için kullanılan kavram) sadece görebilme ya da konfigüre edebilme yetkisine sahip olabilmesini sağlayabilirsiniz. Bunun için sırasıyla

  • Tomcat üzerinde hudson'ı yönetebilmesini istediğiniz kullanıcıları tanımlayın ve bunları "admin" rolü ile bağlayın
  • Son olarak hudson'ın web sayfasını kullanarak Manage Hudson >> System Configuration linkini kullanın ve Enable Security kısmını tikleyin.
Hudson default olarak güvenlik opsiyonu açık bir şekilde gelir (herkes herşeyi yapabilir), yukarıdaki ayarları yaptığınızda sadece sizin hudson rolüne uygun görüp tanımladığınız kullanıcılar job'ları çalıştırabilir/konfigüre edebilir veya hudson'ı konfigüre edebilir, diğerleri sadece job'ların ne durumda olduğunu görebilir. Daha çok bilgi için buraya tıklayın.

Yedekleme : Hudson'ı yedeklemek istiyorsanız yapmanız gereken sadece web.xml içerisinde HUDSON_HOME klasörü için belirlediğiniz klasörü yedeklemektir. HUDSON_HOME>jobs klasörü altında bulunan tüm klasörler birer job'dır, bu job'ları kopyala/yapıştır ile başka hudson'lara aktarabilirsiniz.

Haydi işe koyulalım...

Konfigürasyon ayarlarını kurcaladıktan sonra sıra geldi birşeyler üretmeye. Daha önce de belirttiğim gibi hudson kurulumu ve yönetimi kolay bir sürekli entegrasyon aracı. Bunun en iyi örneğini job tanımlama ve yönetme esnasında görebilirsiniz. Hudson ana sayfasında New Job linkine tıkladığınızda 4 değişik job türü yapabilme ve bir tane de varolan bir job'ı kopyalayabilme opsiyonunu göreceksiniz. Bu job türleri kısaca

Maven2 : Maven2 ile geliştirdiğiniz projelerinizi kolayca entegre edebilirsiniz.
Matrix Build : Aynı sürümü birden fazla ortamda birden fazla parametre ile denemek isterseniz.
External Job Monitoring : Sistemde çalışan cron job'ları da takip edebileceğiniz kullanışlı bir job
Free-Style Software : Ayarlarını istediğiniz gibi değiştirebileceğiniz job tipi, benim üzerinde duracağım job da bu.

Free-Style Software'i seçtiğinizde karşınıza bir sürü ayar çıkacak, bunlardan birkaç tanesini anlatmaya çalışacağım, diğerlerini yanlarında bulunan soru işareti ikonuna tıklayarak siz bulabilirsiniz. Build kısmında shell, windows bat, ant build veya maven build'leri çalıştırabilirsiniz. Ant scriptlerini çalıştırmak için Build kısmında invoke top-level Ant targets'ı seçmeniz ve Targets kısmına ant'a girdiğiniz parametreleri yazmanız gerekiyor (mesela ant -f build_deneme.xml için targets kısmına -f build_deneme.xml yazmanız gerekir) Bunu yaptığınız zaman job'ınız bu scriptinizi çalıştıracak durumda beklemeye başlar. Bundan sonra job'lar kısmında bu projenizi göreceksiniz. Yanında "Schedule a build" ikonu ile birlikte.

Sürekli Sürüm (Gecelik, Saatlik)

Ama asıl önemli olan bunu nasıl zamanlanmış iş olarak ayarlayıp, gecelik sürüm, saatlik sürüm haline getirebileceğinizdir. Hudson burada da işimizi çok kolaylaştırıyor. Build Triggers kısmında Build Periodically kısmına tıkladığımızda önümüze free text bir alan açılıyor (Schedule). Buraya yazacağınız syntax ile birlikte bu job'ı zamanlanmış hale getirebilirsiniz. Yan yana yazılan 5 alan bize zamanlama yapma olanağı verir.

MINUTE(Dakika) HOUR(Saat) DOM(Gün) MONTH(Ay) DOW(Haftanın Günü)


Bu alanlar sırasıyla

Dakika : 0-59
Saat : 0-23
Gün : 1-31
Ay : 1-12
Haftanın Günü : 1-7


Mesela her gece saat 21:00'de çalıştır diyebilirsiniz,

0 21 * * *

veya hem gece saat 21:00'de hem de pazartesi-çarşamba öğleden sonra çalıştır diyebilirsiniz,

0 21 * * *
30 12 * * 1,3


Ya da sadece pazartesi akşam 18:00'de çalıştır diyebilirsiniz.

0 18 * * 1

Bahsettiğim ayarları yaptığınızda artık sürekli sürüm sistemine sahip olmuş oluyorsunuz. Bunun yanında isterseniz sürümü manuel de başlatabilirsiniz.

Bunların yanında hudson'ın bize sunduğu daha bir dolu özellik var. Bunlardan biri de plugin ekleyebilme özelliği. Şu anda JIRA, FindBugs gibi önemli olabilecek pluginlerin yanında irili ufaklı bir sürü plugin var ve geliştiriliyor. Pluginleri bu linkte bulabilirsiniz. Bu pluginlerle birlikte sürüm ve entegrasyon sisteminizi daha güçlü ve daha efektif hale getirebilirsiniz.

Ölçek farketmeksizin; eğer sürüm sisteminizi, bir issue tracking tool'u ve file versioning system ile entegre ederseniz , hatırı sayılır bir sisteme sahip olursunuz.