Jenkins nedir? Tarih, Mimari, Boru Hattı ve Faydaları
Yayınlanan: 2020-05-01DevOps'un farklı aşamalarını entegre etmeye istekli ekipler bunu sürekli entegrasyon yoluyla yapabilirler. Bu entegrasyonu gerçekleştirmeye yardımcı olacak birkaç araç vardır. Aralarında en popüler olanlardan biri de Jenkins. Ancak, silahı atlayıp bu aracı çalıştırmaya başlamadan önce, tam olarak ne olduğunu, nasıl çalıştığını, hangi özelliklerle geldiğini ve diğer benzer araçlara göre ne gibi avantajlar sunduğunu anlamalısınız.
Jenkins piyasaya sürüldüğünde, yalnızca açık kaynaklı bir sürekli entegrasyon aracıydı. Ancak, son güncellemelerden sonra, sürekli entegrasyon ve sürekli teslimat olmak üzere iki işi gerçekleştirebilen bir araç haline geldi. Artık uygulama dağıtımının düzenlenmesine de yardımcı olan bir araçtır. Bu blog, BT projelerinizde kullanmaya başlamadan önce Jenkins hakkında bilmeniz gereken tüm ayrıntıları ele almayı amaçlamaktadır.
İçindekiler
Jenkins'in Tarihi
Yıllar içinde pek çok teknoloji ve aracın gelişimi hakkında pek çok ilginç hikayemiz olduğu gibi, Jenkins için de bir hikayemiz var. Jenkins'in geliştiricisi Kohsuke Kawaguchi'nin Java geliştiricisi olarak Sun Microsystems ile çalıştığı 2004 yılına kadar gider.
Kawaguchi, geleceğin onun için çok özel bir şey olduğunu bilmiyordu. O zaman, Kawaguchi birkaç geliştirme projesinde yer aldı. Kod hatası nedeniyle yapıları kırmayı sevmiyordu. Bu, kodun depoya kaydedilmeden önce çalışıp çalışmayacağını bilmesine yardımcı olabilecek bir şey aramasına neden oldu.
Bu merak, Hudson adında bir otomasyon sunucusunun geliştirilmesine yol açtı. 2011 yılında, bağımsız Hudson açık kaynak topluluğu ile şimdi Sun Microsystems çatısı altında bulunan Oracle arasında kötü şöhretli bir anlaşmazlık vardı.
Bu anlaşmazlık, Jenkins adlı bir çatala yol açtı. Hem Jenkins hem de Hudson uzun süre varlıklarını sürdürdüler; ancak Jenkins daha çok tercih edilen bir seçimdi. Hudson projesi Ocak 2020'de kapatıldı. Jenkins hala aktif.

Jenkins nedir?
Jenkins, projelerine sürekli entegrasyon getirmek isteyen DevOps ekipleri tarafından kullanılan bir otomasyon aracı olarak adlandırılabilir. Java'da yerleşik açık kaynaklı bir yazılımdır. Yazılım geliştirmenin yaşam döngüsü boyunca kullanılır.
Sadece geliştirme ve test aşamasında değil, aynı zamanda dağıtımda da. Geliştiricilerin değişiklikleri projelerine çok kolay bir şekilde entegre etmelerini sağlar. Jenkins, yazılım projelerinin sürekli teslimi için de kullanılır.
Hakkında bilgi edinin: DevOps ile Gerçek Zamanlı Senaryoları Çözme
Sürekli entegrasyon nasıl çalışır?
Sürekli entegrasyon (CI), yazılım geliştirme sürecinin ayrılmaz bir parçasıdır. Depoda benzersiz işlevsellik kullanımı, özellik geliştirme ve diğerlerinin yanı sıra hata düzeltmeleri de dahil olmak üzere bir dizi farklı görevden oluşabilir.
Jenkins gibi sürekli bir entegrasyon aracı, mevcut uygulama kaynaklarıyla ilgili sorunları belirlemede harikadır ve otomatikleştirilmiş oluşturma ve test özellikleri yardımıyla entegrasyon sürecini kontrol ederek hızlı yanıt sağlar.
Sürekli entegrasyon, Çevik metodoloji ile ilişkili bir programlama modelinden geldi. Bununla birlikte, konsept yine de doğası gereği yinelemeli olan tüm bu programlama modellerine uygulanabilir.
Şelale modelleri ve bu tür diğer geliştirme yaklaşımları, sürekli entegrasyonun sunduğu şeylerden de yararlanabilir. CI, yürütülebilir kodu üretime çok daha hızlı ve otomatik bir şekilde teslim etmek için genellikle sürekli teslim (CD) ile birlikte çalışır. Aşağıda yaygın CI uygulamaları listelenmiştir:
- Düzenli kod işleme
- Evreleme inşa et
- Entegrasyona adanmış bir yapı makinesi
- Sürekli geri bildirim
- Geliştirici testi sınıflandırması
Sürekli entegrasyon, projeniz ve şirketiniz göz önünde bulundurularak uygun gördüğünüz sıklıkta yayınlanabilir. Dolayısıyla, CI kullanan şirketler, geleneksel yazılım geliştirme süreçlerini kullananlardan daha düzenli yayınlara sahiptir.
Gittikçe daha fazla şirket, basit bir gerçek nedeniyle CI kullanmaya başladı - koddaki en küçük değişiklik bile yeni bir yapıya yol açabilir. CI, yazılımın geliştirilmesi sırasında sürekli geri bildirim verebilir.
Bu, DevOps ekiplerinin geliştirmenin her aşamasında hatalardan kurtulmasına yardımcı olur. Ayrıca, geliştirme sürecinde sorunları oldukça erken tespit eder. Bu, bu sorunları daha az rahatsız edici, çok karmaşık değil ve ele alınması kolay hale getirir.
Okuyun: Piyasadaki En İyi DevOps Araçları
Sürekli teslimat nasıl çalışır?
Sürekli teslimat, yazılımı üretime sunmaya her zaman hazır olmanızı sağlayacak şekilde geliştirmeye devam etmenizi sağlayan yazılım geliştirme sürecinin bir parçasıdır. Sürekli teslimatın ek olarak verimli olduğu birkaç kez aşağıda belirtilmiştir:
1. DevOps ekibi, özellik geliştirme devam ederken bile yazılımın dağıtıma hazır olmasını sağlar
2. Yazılım, yazılım geliştirme döngüsü boyunca dağıtıma hazırdır
3. Basmalı düğme araçlarıyla dağıtım, farklı isteğe bağlı ortamlara farklı yazılım sürümleri için bir gerçektir
Sürekli teslimat nasıl sağlanabilir? İlk gereksinim, yazılımın halihazırda sürekli entegrasyondan geçiyor olmasıdır. Geliştirme ekibi daha sonra yürütülebilir dosyaları oluşturmalı ve hataları veya hataları tespit etmek için bunlar üzerinde testler yapmalıdır. Ayrıca, yazılımın her an üretime gönderilmeye hazır olduğundan emin olmak için yürütülebilir dosyaları farklı üretim ortamlarında test etmek çok önemlidir. Bunun için bir dağıtıma sahip olmak gereklidir.
Jenkins'in otomasyonu, şirketlerin yazılım geliştirme süreçlerini oldukça önemli ölçüde hızlandırmalarını sağlar. Jenkins, oluşturma, test etme, devreye alma ve diğerleri dahil olmak üzere farklı türde yazılım geliştirme yaşam döngüsü süreçlerini entegre etme yeteneğine sahiptir. Sürekli entegrasyonun sağlanması için eklentiler çok önemlidir. Jenkins'e yeni bir araç eklemek istiyorsanız, öncelikle bunun için bir eklenti yüklediğinizden emin olmanız gerekir.
Okuyun: Jenkins Röportaj Soruları ve Cevapları
Jenkins boru hattı nedir?
Jenkins ardışık düzeni, sırayla birbirine bağlanan işlerin, görevlerin veya olayların birleşimidir. Başka bir deyişle, sürekli teslim işlem hatlarının kolayca entegre edilmesini ve uygulanmasını sağlayan bir grup eklentidir. Genişletilebilir otomasyon, hem karmaşık hem de basit dağıtım boru hatlarının kod biçiminde ve etki alanına özgü dil veya DSL yardımıyla oluşturulmasında bir boru hattını desteklemek için çalışır.
Şimdi sürekli teslimat boru hatları ve nasıl çalıştıkları hakkında biraz tartışalım. Bir Jenkins ardışık düzeninin temel özelliği, sahip olduğu her olay veya görev veya işin şu veya bu şekilde bu olaylardan, işlerden veya görevlerden bir veya daha fazlasına bağlı olmasıdır. Sürekli teslim işlem hatları, oluşturma, test etme, dağıtma, serbest bırakma gibi farklı durumlara sahiptir. Bütün bu devletler birbirine bağlıdır.
Sürekli teslim ardışık düzeni, bu durumların her birinin olaylarının içinde çalıştığı bir dizidir. Sürüm kontrol yazılımını almak için gerekli işlemleri yapan otomatik bir ifadedir. Yazılımda yapılan tüm değişiklikler, yazılım piyasaya sürülmeden önce birkaç karmaşık süreçten geçmek zorundadır. Bu süreç aynı zamanda yazılımın tekrarlanabilir ve güvenilir bir şekilde geliştirilmesini sağlar ve yazılımın ilerlediği çoklu test ve dağıtım aşamalarını içerir.
JenkinsFile, Jenkins boru hatlarını tanımlamak için kullanılan bir metin dosyasıdır. JenkisFile genellikle boru hatlarını kod biçiminde uygulamak için kullanılır ve bu sürecin tamamı DSL kullanılarak tanımlanır. Jenkins işlem hatlarını çalıştırmak için izlenmesi gereken adımları yazmak için JenkinsFile'ı da kullanabilirsiniz. JenkinsFile kullanmanın bazı faydaları aşağıda belirtilmiştir:

- İşlem hattındaki kodun gözden geçirilmesini kolaylaştırır.
- Farklı dallar için oluşturduğunuz tüm işlem hatları için çekme isteklerini yürütmenize yardımcı olabilir.
- Boru hatlarınız için farklı kullanıcılar tarafından değiştirilebilen tek ve tek kaynaktır.
- Jenkins boru hattınız üzerinde bir denetim yapmanıza yardımcı olabilir.
JenkinsFile iki tür sözdizimi kullanılarak tanımlanır
Bildirime dayalı ardışık düzen sözdizimi
Bu sözdizimi ile ardışık düzen oluşturmak çok daha kolaydır. Boru hatları oluşturmaya yardımcı olan iyi kurulmuş bir hiyerarşiye sahiptir. İşlem hatlarının yürütülmesiyle ilgili her yönü kontrol etmenin basit yollarını sunar.
Komut dosyasıyla oluşturulmuş ardışık düzen sözdizimi
Hafif bir yürütücü kullanır ve Jenkins master üzerinde çalışır. Boru hatlarını atomik komutlara dönüştürmek için kullandığı kendi kaynakları vardır. Tanımlarından da anlaşılacağı gibi, her iki sözdizimi de birbirinden oldukça farklıdır. Sadece bu değil, hatta farklı şekillerde de tanımlanırlar.
Neden Jenkins boru hattını kullanmalısınız?
Jenkins, sürekli entegrasyon yetenekleriyle bu yazılım geliştirme sürecini otomatikleştirir. Bir dizi otomasyon işi oluşturmak için farklı kullanım durumları kullanabilir ve ardından hepsini çalıştırmak için Jenkins ardışık düzenini kullanabilirsiniz. Jenkins ardışık düzenini kullanmanın birkaç nedeni aşağıda listelenmiştir:
- Bir kod biçiminde uygulandığından, Jenkins boru hattı, süreci düzenleyebilen ve yürütebilen birkaç kullanıcıya sahip olabilir.
- Normalden daha büyük boyutlu projeleri destekler. Aynı anda birden fazla proje çalıştırmak veya bir döngüde boru hatları kullanmak mümkündür.
- Sağlamdırlar. Sunucunuz beklenmedik durumlarda yeniden başlarsa endişelenmenize gerek yok. Jenkins boru hattı otomatik olarak devam edecek.
- İşlem hattı işlemi, kullanıcı girdisi alana kadar duraklatılabilir ve devam ettirilemez.
Jenkins Mimarisi
Bu bölümde, tartışmamıza Jenkins'in hem geliştiricilere hem de testçilere nasıl yardımcı olduğuna odaklanacağız. Bunu anlamak için Jenkins sürekli entegrasyonunu tartışalım.
Başlangıçta geliştiriciler kaynak kodda istedikleri tüm değişiklikleri yaparlar. Bu kod Git deposunda saklanır. Değişiklikler, bu değişiklikler yapılırken takip edilir. Jenkins sunucusu işini yapıyor ve depoda depolanan dosyalarda yapılan değişiklikleri izliyor. Geliştiriciler tarafından yapılan değişiklikler Jenkins sunucusu tarafından algılanır. Jenkins daha sonra bu değişiklikleri alır ve bu değişikliklere dayalı olarak yeni bir yazılım yapısı üzerinde çalışmaya başlar.
Derleme başarısız olursa ilgili ekip bir bildirim alır. Öte yandan, derleme başarılı olursa Jenkins onu test sunucusuna dağıtır. Geliştiriciler, derleme geliştirme ve test sonuçları hakkında bilgilendirilir. Bu döngü tekrar etmeye devam ediyor.
Artık Jenkins'in nasıl çalıştığını anladığımıza göre, çalışmasındaki ve ondan önce serbest bırakma ve dağıtım için kullanılan yöntemlerdeki farkı anlamamız daha kolay olacak.
Yani Jenkins öne çıkmadan önce, süreç kaynak kodunun tamamının oluşturulmasını ve test edilmesini içeriyordu. Hataları bulmak ve düzeltmek, yazılımın teslimini geciktirmek için kullanılan kolay işler değildi. Geliştiriciler, test sonuçları için uzun süre beklemek zorunda kaldı. Dağıtım eskiden manuel olarak yapılırdı.
Jenkins'ten sonra kaynak koddaki tüm değişiklikler yapıldıktan sonra test edilir. Geliştiricilerin, hataları ve hataları bulmak için tam kaynak kodunu gözden geçirmeleri gerekmez. Derleme sürümlerinin lansmanı artık çok daha sık. Geliştiriciler, tüm değişikliklerin ve taahhütlerin test sonuçları hakkında bilgilendirilir. Değişiklikleri kabul ettiğinizde, Jenkins sunucusu diğer işlemleri yürütmeye başlayabilir.
Jenkins Dağıtılmış Mimari
Jenkins, yapıları master-slave mimarisinin yardımıyla yönetir. Master ve slave üniteler birbirleriyle IP/TCP protokolünü kullanarak iletişim kurar. İşte her şeyin nasıl çalıştığına dair küçük bir indirme.
Jenkins ustası
Bu, Jenkins'in birincil sunucusudur. Derleme işlerini zamanlama, derleme sonuçlarını kaydetme ve sunma, derlemeleri yürütme için kölelere gönderme, tüm köleleri hem çevrimdışı hem de çevrimiçi olarak izleme ve diğerlerini içeren ancak bunlarla sınırlı olmayan bir dizi görevi yerine getirir. Master Jenkins, yapım işlerini doğrudan yürütme yeteneğine sahiptir.
Jenkins köle
Uzak sunucuda çalışır. Jenkins sunucusu, Jenkins yöneticisinin isteklerini takip eder ve tüm işletim sistemleriyle uyumludur. Master tarafından gönderilen bina işleri köle tarafından yürütülür. Proje, belirli bir bağımlı makine seçmek için uygun şekilde yapılandırılabilir.
Jenkins'in Faydaları
1. Jenkins, kurulumu ve kullanımı son derece kolay olan açık kaynaklı bir araçtır. Kullanmak için ekstra bileşenlere ihtiyacınız yok
2. Ücretsizdir ve Windows, Linux, macOS ve diğerleri gibi farklı platformlarda kullanılabilir.
3. Yaygın olarak kullanılır, bu nedenle çevrimiçi topluluklarda destek bulmak büyük bir sorun değildir
4. Jenkins tüm entegrasyon çalışmalarını otomatikleştirir. Entegrasyon sorunları azdır ve bu nedenle proje yaşam döngüsü boyunca zamandan ve paradan tasarruf edilmesine yardımcı olur.
5. Yapılandırmak, genişletmek ve değiştirmek kolaydır. Testlerin anında oluşturulmasına ve farklı platformlarda kodun oluşturulmasına, otomasyonuna ve dağıtımına olanak tanır.
6. Jenkins, CI ve CD kavramlarını düzgün şekilde çalıştıracak şekilde yapılandırılabilir
7. Sorunları kolayca tespit edip düzeltebilir. Yazılım her zaman ani bir sürüm için hazırdır
8. Daha iyi esneklik sağlayan çeşitli eklentileri destekler
9. Hataları çok erken tespit etmeye yardımcı olur, böylece geliştiricilere çok fazla zaman ve sıkı çalışma tasarrufu sağlar
Jenkins eklentileriyle üretkenliği artırın
İşte geliştiriciler tarafından kullanılan en yaygın eklentilerden birkaçı.

1. İş oluşturma eklentisi
Büyüyen veya daha büyük bir organizasyonda proje işlerini sürdürmek biraz daha zordur, çünkü geliştiriciler genellikle farklı dallar ve sürümler üzerinde çalışırlar. Geliştiricilerin kendi başlarına iş yaratmalarına izin vermeye hazır olsanız da, şirket standartlarını karşılayıp karşılayamayacaklarından emin değilsiniz. Bu büyük bir ikilem. Bu eklenti, geliştiricilerinizin işler oluşturmak için kullanabileceği şablonlar tanımlamanıza olanak tanır. Rol tabanlı yetkilendirme eklentisini kullanarak şablonun yapılandırma erişimini devre dışı bırakabilirsiniz.
2. Küresel yapı istatistikleri eklentisi
Mevcut kapasitenizi, yeteneklerinizi ve kullanımınızı bilmek, kendinizi sistem gereksinimlerine veya kapasite planlamasına hazırlamak için çok önemlidir. Düzenli olarak gerçekleşen yapıların sayısının farkında olmalısınız. Ayrıca derlemeleri yayınlamak için gereken süreyi de bilmeniz gerekir. Bu eklenti, tüm bu soruları yanıtlamak için gerekli tüm bilgileri sağlar.
3. GitLab/GitHub çekme isteği oluşturucu
GitLab/GitHub'daki kod inceleme sürecini normalden daha yüksek bir düzeye otomatikleştirmek için bu şablonu kullanabilirsiniz. Her çekme isteği için, bu eklentinin yalnızca derlemeyi çalıştırmasını değil, aynı zamanda sonuçları oluşturmasını ve durumu bir çekme isteği ile paylaşmasını veya önemli statik analizler toplamasını bekleyebilirsiniz. Bu eklenti, birleştirilmesi gereken kod hakkında çok şey anlatır. Bu eklentiyi kullanarak bazı durumlarda otomatik birleştirme tanımlamak da mümkündür.
Çözüm
Bu blog, Jenkins'in nasıl çalıştığına ve CI/CD kullanarak farklı proje fikirlerini uygulamak için nasıl kullanılabileceğine dair sağlam bir fikir sağlar. Etkili arayüzü ve eklentileri ile işleri oldukça kolaylaştıran bu günlerde en çok tercih edilen DevOps araçlarından biridir.
Tam yığın geliştirme hakkında daha fazla bilgi edinmek istiyorsanız, upGrad & IIIT-B'nin çalışan profesyoneller için tasarlanmış ve 500'den fazla saat zorlu eğitim, 9'dan fazla proje ve ödev sunan Tam Yığın Yazılım Geliştirme PG Diplomasına göz atın. IIIT-B Mezunları statüsü, pratik uygulamalı bitirme projeleri ve en iyi firmalarla iş yardımı.