Jenkins

Suat Oruç
4 min readJul 6, 2022

--

Merhabalar,

Jenkins ile ilgili bir kaç bölümden oluşan bir seri oluşturmayı düşünüyorum, serinin bu kısımda önce Jenkins’in ne olduğu ne için kullanıldığına biraz değindikten sonra Continous Integration ve Continous Deployment(CI/CD) kavramlarını biraz anlamaya çalışacağız, sonrasında Local’imize iki farklı yolla nasıl Jenkins kurabileceğimizi pratik edeceğiz. En son da da birlikte Amazon Web Service (AWS) üzerinde oluşturduğumuz sanal makinamıza Jenkis kurup testlerimizi buradan run edeceğiz.

İsterseniz lafı çok uzatmadan başlayalım…

Jenkins basit tanım ile, bir yazılım projesinde dinamik olarak gerekli olan yapısal işlemleri otomatize ederek projeyi hızlandıran, java ile yazılmış açık kaynak kodlu bir otomasyon sunucusudur, kolaylıkla hata raporlaması ve kolay test edilip hataların fixlenebilmesini sağlayan yazılım geliştirme süreçlerini otomatize etmemize yarayan bir CI (Continous Integration) aracıdır.

Jenkins, belirli bir sunucuda ve portta çalışır, biz çalışırken projemiz genel de bir versiyon kontrol sistemi (VCS) -örneğin Git- üzerinde bulundururuz, Jenkins belirlenen kaynaktan projeye ulaşarak ayarlarda belirlediğimiz işlemleri gerçekleştirir. Sonuçlarını belirlenen kişilere belirlediğimiz şekilde ve formatta iletir.

Yazılımın sunucu ortamında çalışması için gerekli olan toollar, eklentiler ve belirli configrasyon ayarlarının yapılması gereklidir. Projenin, çalıştırılması gereken Ui, Unit, Api vb testleri çalışıyor ve stabil olduğundan emin olduktan sonra son kullanıcıya release edilerek hizmet vermeye devam eder. Jenkins bize bu ve daha detaylı süreçler için her bir işlemi üstlenerek ve aralarında bir pipeline kurarak tüm süreci otomatize etmemizi sağlar.

Aktif olarak hizmet veren ve devamlı geliştirme sağlanan projelerde, yazılımın ve kullanıcının gereksinimleri doğrultusunda devamlı teknik geliştirme söz konusudur. Her bir uygulamanın geliştirme ve deploy sürecinde son kullanıcı karşısına çıkmadan önce bir test sürecinden geçmesi gereklidir ki bu şekilde canlıya çıkacak olan ürünün stabilizasyonunun devam ettiğinden emin olunmalıdır. Eğer ki yapılan geliştirmeler sonucu derlemede bir sorun yaşanır veya testler pass etmez ise Jenkins’in konsol çıktısı bizi uyaracaktır. Bu gibi fail durumları konfigüre ederek oluşması halinde jenkins’in uyarı olarak mail, slack vb. yollarla notification yollayıp takımı uyarması sağlanabilmektedir.

CI/CD Cycle

JENKİNS’DEKİ KAVRAMLAR

Job: Her bir Jenkins projesine Jop denir. Otomatize etmek istediğimiz işleri bu kısımda belirleriz. Örnek olarak, job config üzerinde ki şu repo’yu çek, şu şartlarda build et, şu testleri çalıştır ve belirlenen kişilere mail at gibi işlemleri burada belirleriz.

Node: job üzerinde ki çalıştığı sunucuyu ifade eder. Testleri başka bir bilgisayarda run etmek istediğimizde, node oluşturur ve bağlantı için gerekli şartları gerçekleştirdikten sonra bu node üzerinde de testlerimizi çalıştırabiliriz.

Plugin (eklenti): Jenkins ilk kurulumda herhangi bir plugin eklentisi ile gelmeden saf haliyle yüklenir, ihtiyacımıza göre plugin yükler ve bunları kullanılırız. Örneğin, Job çalıştıktan sonra Jenkins’in test sonuçlarını mail yoluyla atması için “Email Extension” eklentisini yüklemeli ve bu eklentiyi post-build adımında kullanmalıyız.

Pipeline: Sürekli teslim (CD) işlem hatlarının Jenkins’e uygulanmasını ve entegre edilmesini destekleyen bir eklentiler paketidir. Bir işin uygulanmasından sonra otomatik olarak diğer işlerin başlatılması sürecidir.

Jenkin’sin kurulumuna girmeden önce CI (Continous Integration) ve CD (Continous Deployment) kavramlarının ne demek olduğunu hatırlayalım.

Continuous Integration (CI) : CI kelime anlamı olarak sürekli entegrasyon anlamına gelmektedir. CI, kodun Git gibi versiyon kontrol sistemlerinden sürekli değişiklik olup olmadığını kontrol edip en küçük değişiklileri bile entegre etme anlamına gelmektedir.

CI’ın hedefi, uygulamayı Git reposundan alıp, paketleyip, test edilecek ortama kurulumunu otomatize etme sürecidir. Bu süreçte kod birtakım testlerden geçer. Testler başarılı bir şekilde sonuçlanır ve tüm sistem çalışır haldeyse deploy işlemlerini başlatır. Eğer değişiklikler sistemde kırılmalara neden olmuşsa bu durumdan programcıları haberdar eder.

Continuous Deployment (CD) : CD ise CI’dan başarılı bir şekilde geçen sistemin ilgili yerlere dağıtımı ile ilgilenir. Yani CI süresince kod derlendi, bazı testlerden geçti ve CD süreci ile dağıtımına başlandı.

Şimdi Jenkins’in neler yaptığına bir daha bakalım. Jenkins, ilgili git reposunu belirli aralıklarla kontrol eder. Değişiklikleri kendi reposuna alır ve derler. Daha sonra repodan alınan bu kod bizin belirlediğimiz bir dizi testlerden geçer. Sonrasında istediğimiz yere bu yeni versiyonu deploy eder.

Aşağıdaki görselde yağın olarak kullanılan CI/CD süreçlerini bir arada yönetebileceğiniz çeşitli araçları bir arada görebilirsiniz

Kısaca özetlemek gerekirse;

  • Jenkins, birçok topluluktan destek alan açık kaynak kodlu bir araçtır,
  • Kurulumu oldukça basit ve ara yüzü anlaşılırdır,
  • Birçok ihtiyaca yönelik 1000’den fazla eklentisi mevcuttur,
  • Ayrıca mevcut olmayan Jenkins eklentilerini de oluşturmak oldukça kolaydır,
  • Java’da yazılmış olması itibari ile neredeyse tüm platformlarda çalışabilir.

Piyasa da alternatif bir çok araç varken bunların arasında Jenkins’in neden en çok tercih edilen araç olduğunu bu şekilde ifade edebiliriz.

Bu kısmı burada bitirmek istiyorum bir sonraki bölümde local’imizde bilgisayarımıza Jenkins kurulumu ve ayarlanması üzerine konuşacağız.
Umarım faydalı bir yazı olmuştur.

--

--

Suat Oruç

I’m an automation tester trying to improve himself