Search:

Geçmişte Hudson, Günümüzde Jenkins

Jenkins Nedir, Geçmişten Günümüze Özellikleri Nelerdir - kloia Blog

Bu yazımızda size Jenkins’in geçmişten günümüze nasıl evrildiğini ve 2016 Nisan ayında major release olan Jenkins 2.0’dan bahsedeceğim.

Hikayemiz 2005 yılında Sun MicroSystems’de çalışan Kohsuke Kawaguchi’nin Hudson isimli bir CI (Continous Integration) yazmasıyla başlıyor. Proje Sun MicroSystem’in bir alt projesi olarak hayata geçiyor. Ve proje geliştirildikçe popülerliği iyice artıyor. 2008 yılında JavaOne’da ayrıca bir ödüle layık görülüyor.

Oracle 2009 yılında Sun MicroSystems’i satın aldıktan sonra, projenin yönetimi de Oracle’a geçmiş oluyor. Projenin yönetimi Oracle’a geçtikten sonra, Oracle ile projeye sürekli katkıda bulunan developerlar arasında anlaşmazlıklar çıkıyor. Oracle “Hudson” projesini ticari bir marka haline getirmek istiyor ve bunu uygulama koyuyor. Bu sırada tartışmalar iyice alevleniyor, açık kaynak kodlu bir projenin ve buna gönüllü olarak destek veren yazılımcılar projenin bu şekile devam etmesini istemiyorlar.

11 Ocak 2011’de, Hudson’ın geliştiricileri, Hudson’ın bir kopyasını (fork) alarak, Jenkins adı altında projeyi geliştirmeye başlıyorlar. Oracle bu sırada, Jenkins’in Hudson’dan daha yavaş ilerleyeceğini açıklıyor.  Ancak Jenkinsin geliştiricileri bu konuda tam tersi şekilde düşünüyorlar. Ve zaman içinde ortalama gün başına commit sayısı Jenkins’te çok daha fazla olmaya başlıyor. Aynı şekilde, popülerlik olarakta Jenkins Hudson’ı geçiyor.

Şu an 410 contributoru bulunan Jenkins, aktif olarak geliştirilmeye devam ediyor. Ve Hudson ile başlayan bu hikayemiz 10 yıl aradan sonra ilk major releaseini yaptı. Bir çok yenilik gördüğümüz 2.x versiyonundan bahsedelim kısaca.

Jenkins 2.0 Yenilikleri:

  • Pipeline Özelliği

Jenkins 2.0 ile projeniz ile ilgili test,build etme, deploy gibi işlemleri bir pipeline olarak tanımlayabilirsiniz. Böylece projenizin tüm süreçlerini baştan sonra Jenkins üzerinden takip edebilirsiniz.

 

null

 

Resimde gördüğümüz gibi istediğimiz branchler için pipeline özelliğini aktif ediyoruz. Ve commit yaptıktan sonra projemizin hangi aşamalardan geçtiğini, bu aşamaların sonuçlarının başarılı/başarısız olduğunu gözlemleyebiliyoruz. Burada şöyle bir soru gelebilir aklımıza, bu pipeline’i nasıl yazacağız? Jenkins bunun için kendine özel bir DSL dili geliştirmiş, projenizin özelliklerine ve ihtiyaçlarınıza göre kendi Jenkins File’nizi yazıyorsunuz.

 

null

 

  • Daha Kullanışlı Bir Jenkins 2.0

Jenkins’in temelden beri en önemli özelliği plugin (eklenti) desteği sağlaması. Jenkins kullanıcıların plugin yazmalarını sağlayan bir api sunuyor. Böylece dışarıdaki yazılımcılar, ihtiyaçlarına göre veya genel ihtiyaca göre pluginler yazabiliyor. Örneğin, her buildden sonra log dosyalarınızı Amazon S3’e atmak istiyorsunuz, bunun ihtiyaç için illa birileri plugin yazmış oluyor ve sizde kendi Jenkins’inizde bunu kullanabiliyorsunuz.

Piyasada, iyi-kötü binlerce plugin bulunmakta. Ve probleminizi çözen bir çok plugin olabiliyor, ve hangi pluginin daha iyi olduğu konusunda kararsız kalabiliyorsunuz. İşte Jenkins 2.0 ile, Jenkins en çok kullanılan, sevilen ve kullanışlı pluginleri size öneriyor.

 

null

 

  • Multi-Configuration Projects

        Bu özellik benimde Jenkins 1.6’da çokca yaşadığım bir problemdi ve 2.0’da çözülmesine çok sevindim diyebilirim. Problemi şöyle açıklayabiliriz, projemi birden fazla environmentta test etmek istiyorum, örneğin Java 6-7-8’de ve farklı Java dağıtımlarında ( IBM,Oracle, OpenJDK) da build etmek istiyorum. Aslında baktığınız zaman bu buildlerin hepsinin konfigurasyonu aynı sadece JDK versiyonu ve dağıtımı farklı. Böyle olduğu zaman Jenkins 1.6’da her bir kombinasyon için farklı bir build oluşturmanız gerekiyordu. Ancak 2.0 ile, tek bir build oluşturup, build içerisinde bir konfigurasyon matrisi oluşturabiliyorsunuz. Böylece, Jenkins ekranında yüzlerce build yerine, kategoriler halinde buildler gözüküyor.

  • Diğer Jenkins Özellikleri

Jenkins 1.x de olan her özelliği 2.0’da kullanabiliyorsunuz. Bundan dolayı 2.0’a geçmek çok sancılı olmayacak gibi duruyor. Peki Jenkins’te neler yapabilirim bunlardan bahsetmek gerekirse:

  • Projelerinizi istediğiniz Docker imajları içerisinde build edebilirsiniz ( Docker Plugin)
  • Jenkins’e kendi sunucularınızı slave olarak tanıtıp, buildlerinizi o makinelerde yapabilirsiniz. ( windows makine tanıtmak mümkün)
  • Buildleriniz fail ettiği zaman, kendinize mail gelmesini sağlayabilir, Slack’e bildirim gitmesini ayarlayabilirsiniz.
  • Aws pluginleri ile, AWS servislerini kolayca kullanabilirsiniz.
  • Pull Request builder ile, BitBucket yada Github kullanıyorsanız, pull request geldiği zaman otomatik build edebilirsiniz.
  • Projenizde her commit geldiği zaman otomatik buildi ayarlayabilirsiniz.

Ve daha aklıma gelmeyen yüzlerce plugin ve özellik…

Bilal Yaşar

Devops & Kubernetes Addict

Want to work with us?

A wonderful serenity has taken possession of my entire soul, like these sweet mornings of spring which I enjoy with my whole heart. I am alone, and feel the charm of existence in this spot.

Contact us