Özet
Jenkins, projelerde CI/CD işlerinde kullanılan en popüler araçlardan biridir. Bu kısa kitap, Jenkins’in temel arayüzünü ve temel kavramlarını örneklerle açıklamaktadır. Kitapta yer alan bilgilerin bazıları eski kalmış olabilir. Çünkü Jenkins arayüzü sürekli olarak güncellenmektedir. Ancak bu kitapta anlatılan versiyon ile güncel versiyon arasındaki çalışma mantığı genel hatları ile aynı olduğu için, Jenkins’e ve CI/CD tarafına yeni başlamak isteyen kişiler için faydalı bir kitaptır. Kitapta her bölümün sonunda (ve bazen ortalarında) belirli bir senaryoya göre bir alıştırma yer almaktadır.
İnceleme
Bölüm 1: Installing and Setting up Jenkins (Jenkins’i Yükleme ve Ayarlama)
Bu bölümde öncelikle Continuous Delivery (Sürekli Teslim) ve onun bir yazılımın yaşam döngüsü üzerine etkileri anlatılmaktadır. Jenkins’in Continuous Delivery ile ilişkisi ve onun üzerindeki rolü açıklanmaktadır. Daha sonra Jenkins’in bir Docker Container üzerine kurulumu ve başlangıç ayarlarının yapılması anlatılmaktadır. Jenkins kontrol paneli (dashboard) genel hatları ile açıklanmakta ve bu panelde yer alan öğelere yer verilmetedir. Son olarak da Jenkins’te kullanıcıları ve onların izinlerini nasıl yöntebileceğimiz açıklanmakta ve bu konuyla ilgili bir örnek alıştırma yapılmaktadır.
Bölüm 2: Administering Jenkins (Jenkins’i Yönetme)
Bu bölümde öncelikle Jenkins’te eklentilerin (plugins) ne olduğundan ve eklentileri nasıl yönetebileceğimizden bahsedilmektedir. Eklentileri nasıl yükleyebileceğimizden, nasıl güncelleyebileceğimizden ve nasıl silebileceğimizden bahsedilmekte; bu konular ile ilgili örnek alıştırma yapılmaktadır.
Daha sonraki kısımda Jenkins’in kendisini nasıl güncelleyebileceğimizden ve bunu yapmanın faydaları ile zararlarından bahsedilmektedir. Jenkins’te çıkan sorunları nasıl izleyebileceğimiz de anlatılmaktadır. Son olarak Jenkins’i üretime hazır hale getirmek için yapmamız gerekenlerden bahsedilmektedir.
Bölüm 3: Jenkins Views and Freestyle Projects (Jenkins Görünümleri ve Serbest Stil Projeler)
Bu bölümde öncelikle Jenkins üzerinde bir serbest stil projeyi (freestyle project) nasıl oluşturabileceğimiz ve örnek bir GitHub reposunu bu projeye nasıl bağlayabileceğimiz anlatılmaktadır. Serbest stil projede repoda değişiklik sonrası nasıl Build alabileceğimiz açıklanmaktadır. Bu kısmın sonunda ise anlatılanlar ile ilgili örnek bir alıştırma yapılmaktadır.
Bölümün diğer kısmında ise Jenkins’de birden fazla projeyi rahat ve kişiselleştirilmiş bir biçimde yönetmemize yarayan görünümler (views) anlatılmaktadır. Bir görünümü nasıl oluşturabileceğimiz ve onunla ilgili ayarları nasıl yapabileceğimiz gösterilmektedir. Son olarak da yine görünümler konusu ile ilgili bir örnek alıştırma yapılmaktadır.
Bölüm 4: Parameterized and Up/Downstream Project (Parametrelendirilmiş ve Up/Downstream Projeler)
Bu bölümde öncelikle Jenkins projelerine parametre eklemenin öneminden ve faydalarından bahsedilmektedir. Daha sonra Jenkins’de oluşturulan serbest stil bir proje için nasıl çeşitli tiplerde parametreler ekleyebileceğimiz anlatılmaktadır. Jenkins’de bulunan parametre türleri (Boolean, Choice, Credentials, File vb.) tek tek açıklanmaktadır. Daha sonra bir Jenkins projesini Build ederken, eklediğimiz bu parametreleri nasıl kullanabileceğimizden bahsedilmekte ve bununla ilgili bir örnek alıştırma yapılmaktadır.
İlerleyen kısımda Jenkins’de Upstream/Downstream projelerin nasıl oluşturulabileceğinden bahsedilmektedir. Bu şekilde Jenkins projelerini birbiri ile nasıl ilişkilendirebileceğimiz anlatılmaktadır. Projeler arası Build tetikleyicilerini (Build Triggers) nasıl ayarlayabileceğimizden ve bunları nasıl kullanabileceğimizden bahsedilmektedir. Son olarak ise bu konu ile ilgili bir örnek alıştırma yapılmaktadır.
Bölüm 5: Jenkins Pipelines (Jenkins Pipeline’ları)
Bu bölümde öncelikle Continuous Integration (Sürekli Entegrasyon) iş akışından bahsedilmekte ve bu iş akışında yer alan en bilindik aşamalar (kaynak kontrolünden kodu çekme, uygulama ortamını hazırlama, test etme vb.) açıklanmaktadır. Daha sonra Git sisteminde yer alan Branch kavramına değinilmektedir. GitHub üzerinde örnek bir repo oluşturma ve bunu WebHook yardımı ile Jenkins ile ilişkilendirme gösterilmektedir.
Bir sonraki kısımda Jenkins’deki Pipeline kavramından bahsedilmekte ve geliştiricilerin bu Pipeline’ları rahat bir şekilde kurabilmeleri için kullanılan Jenkinsfile isimli Script dosyalarından bahsedilmektedir. Bu Script dosyasında kullanılan bazı direktiflerden bahsedilmekte ve oluşturduğumuz örnek proje için örnek Script dosyasının yazımı gösterilmektedir. Daha sonra ise Jenkins’de Pipeline’ları daha efektif bir şekilde izlemeye yarayan Blue Ocean eklentisinin ne olduğundan ve kurulumundan bahsedilmektedir.
Son kısımda ise Jenkins’de kullanılan global değişkenlerden bahsedilmekte ve bunun yazdığınız Jenkinsfile Script’lerinde kullanımı anlatılmaktadır. Oluşturduğunuz GitHub reposuna atılan bir Pull Request’in kabul edilmesinden sonra otomatik olarak bir Jenkins Pipeline’ını nasıl tetikleyebileceğiniz anlatılmaktadır. En son ise anlatılanlar ile ilgili örnek bir alıştırma yapılmaktadır.
Bölüm 6: Distributed Builds on Jenkins (Jenkins’de Dağıtık Build’lar)
Bu bölümde ilk olarak dağıtık Build almanın ne olduğundan ve Master-Slave modelinden bahsedilmektedir. Vagrant yardımıyla farklı sanal makineleri oluşturma ve bazı Jenkins işlerini bu makinelere aktarmaktan bahsedilmekte ve örnekler verilmektedir. Daha sonra bu oluşturulan sanal makineleri Jenkins’e Slave Node olarak ekleme gösterilmektedir. Bununla ilgili örnek bir senaryo üzerinden bir alıştırma yapılmaktadır.
Son kısımda ise bir Node üzerinde serbest stil proje koşturma, farklı Node’lar üzerinde Pipeline’lar koşturma gibi senaryolar açıklanmakta ve bunları Jenkins üzerinde nasıl gerçekleştirebileceğiniz anlatılmaktadır. En son ise bütün anlatılanları bir araya getirerek, örnek bir senaryo üzerinden bir alıştırma yapılmaktadır.
Değerlendirme
Bu kitabın hedef kitlesi CI/CD ile ilgilenen ve Jenkins aracını CI/CD işlerinde kullanmaya başlayacak kişilerdir diyebiliriz. Kitap oldukça kısa ve öz bir anlatıma sahiptir. Kullanılan dil oldukça sade ve anlaşılabilirlik oldukça yüksektir. Ancak bazen bazı CI/CD veya DevOps ile alakalı kavramların çok üzerinde durmamakta ve bu kavramları biliyormuşsunuz gibi anlatım yapmaktadır. Bu nedenle bu konularda çok yeni olan kişiler için ek araştırma ihtiyacı doğurabilir. Kitapta Jenkins’in 2.89.4 versiyonu anlatılmaktadır. Bu versiyon 2017 yılının sonlarına doğru yayınlandığından, kitapta anlatılan bazı durumlar ve gösterilen görseller eski kalmıştır.
Kitap kısa olmasına rağmen, kitabın çoğunu görseller meydana getirmektedir. Örnek gösterilen uygulamalarda yapılan hemen hemen her adım görseller ile gösterilmiştir. Bunun hem avantajı hem de dezavantajı bulunmaktadır. Görsel olarak bir şeyleri göstermek elbette kolay anlaşılmasını ve uygulanamasını sağlayacaktır. Ancak Jenkins gibi çok sık güncellenen araçlarda, bazen bu görseller kafa karıştırıcı olabilir. Çünkü görsellerde gösterilen bir buton veya yazı yeni versiyonda değiştirilmiş veya tamamen ortadan kaldırılmış olabilir. Bu nedenle kitabı okurken dikkat etmekte fayda var.
Kitabın içeriği bana göre orta düzey bir kaliteye sahiptir ve kesinlikle eşsiz bir içerik olduğunu söyleyemeyiz. Piyasada Jenkins aracını ve Jenkinsfile Script dosyasının söz dizimini çok daha iyi bir şekilde anlatan kitaplar (ve diğer kaynaklar) mevcuttur. Burada özellikle bu Script’in oldukça eski bir kullanımı gösterilmektedir. Ancak yine de genel hatlarıyla anlatılan Jenkins mantığında çok bir değişiklik olmamıştır. Kitabı bunu bilerek okumanız size avantaj sağlayacaktır.
Bence bu kitabın en öne çıkan özelliği örnekleridir. Hemen hemen anlattığı her şeyi değişik senaryolardaki örnek alıştırmalarda adım adım göstermektedir. Bu da özellikle Jenkins’e yeni başlayan kişiler için çok önemlidir. Bir şeyleri bu kadar ayrıntılı ve adım adım anlatan kaynaklar bulmak her zaman kolay iş olmayabilir. Ancak burada da yine verilen örneklerde versiyondan dolayı farklılıklar bulunabilmektedir. Bu zaten kitabın geneli ile alakalı (ve elbette sık güncellenen araçlara ait tüm kaynakların geneli ile alakalı) bir durum olduğundan, doğrudan verilen örneklerin de bundan etkileneceği barizdir.
Sonuç olarak, günümüzde yaygınlaşan CI/CD teknolojileri ve Jenkins aracının bu konudaki popülerliği göz önüne alındığında, bu konulara yeni başlayan kişilerin bu kitaba bakması faydalı olabilir. Kitabın anlatımında ve anlaşılabilirliğinde pek problem yoktur. Kitabın en öne çıkan özelliği her şeyi örneklerle açıklamasıdır. Görsel ve diyagram kullanımı oldukça fazladır. Ancak kitapta günümüzdekinden biraz daha eski bir Jenkins versiyonu kullanıldığından, bu durum bütün inceleme alanlarına olumsuz olarak yansımaktadır. Yine de hızlı bir şekilde Jenkins’e bakış atmak için faydalı bir kitaptır.
Jenkins Fundamentals İnceleme Özeti

Basım No: 1st Edition
Yazarlar: Joseph Muli, Arnold Okoth
Yayımlama Tarihi: 29 Ağustos 2018
Sayfa Sayısı: 234
Sonuç Özeti
Sonuç olarak, günümüzde yaygınlaşan CI/CD teknolojileri ve Jenkins aracının bu konudaki popülerliği göz önüne alındığında, bu konulara yeni başlayan kişilerin bu kitaba bakması faydalı olabilir. Kitabın anlatımında ve anlaşılabilirliğinde pek problem yoktur. Kitabın en öne çıkan özelliği her şeyi örneklerle açıklamasıdır. Görsel ve diyagram kullanımı oldukça fazladır. Ancak kitapta günümüzdekinden biraz daha eski bir Jenkins versiyonu kullanıldığından, bu durum bütün inceleme alanlarına olumsuz olarak yansımaktadır. Yine de hızlı bir şekilde Jenkins’e bakış atmak için faydalı bir kitaptır.




