Takip et

Ubuntu 20.04 Üzerinde Jenkins ile Sürekli Entegrasyon (CI) İş Hatları Kurulumu

Ubuntu 20.04 Üzerinde Jenkins ile Sürekli Entegrasyon (CI) İş Hatları Kurulumu Giriş Günümüz yazılım geliştirme süreçlerinde hız, kali

Ubuntu 20.04 Üzerinde Jenkins ile Sürekli Entegrasyon (CI) İş Hatları Kurulumu

Giriş

Günümüz yazılım geliştirme süreçlerinde hız, kalite ve güvenilirlik, rekabet avantajı sağlamanın temel unsurlarıdır. Bu unsurları destekleyen en kritik metodolojilerden biri Sürekli Entegrasyon (Continuous Integration – CI)’dır. CI, geliştiricilerin kod değişikliklerini ana kod tabanına düzenli olarak entegre etmelerini, bu entegrasyonun otomatik olarak test edilmesini ve olası sorunların erken aşamada tespit edilmesini sağlayan bir yazılım geliştirme uygulamasıdır. Bu sayede, entegrasyon sorunları azalır, hatalar daha hızlı bulunur ve çözülür, geliştirme süreci hızlanır ve yazılımın genel kalitesi artar.

Jenkins, açık kaynaklı ve Java tabanlı, lider bir otomasyon sunucusudur. Geniş eklenti ekosistemi sayesinde, yazılım geliştirme yaşam döngüsünün hemen her aşamasını otomatikleştirebilir. Özellikle sürekli entegrasyon ve sürekli teslimat (Continuous Delivery – CD) iş hatları oluşturmak için yaygın olarak kullanılır. Esnekliği, kapsamlı özellikleri ve büyük topluluk desteği ile Jenkins, birçok kuruluşun tercih ettiği CI/CD aracı haline gelmiştir.

Bu makalede, Ubuntu 20.04 işletim sistemi üzerinde Jenkins’i nasıl kuracağımızı, temel yapılandırmalarını nasıl yapacağımızı ve basit bir Sürekli Entegrasyon iş hattını adım adım nasıl oluşturacağımızı detaylı bir şekilde inceleyeceğiz. Amacımız, geliştiricilere ve DevOps mühendislerine, Jenkins’in gücünü kullanarak otomatikleştirilmiş derleme, test ve dağıtım süreçleri oluşturma konusunda pratik bir rehber sunmaktır.

Ön Gereksinimler ve Sistem Hazırlığı

Jenkins’i Ubuntu 20.04 üzerine kurmadan önce, sunucumuzun belirli gereksinimleri karşıladığından ve temel hazırlıkların yapıldığından emin olmalıyız.

Ubuntu 20.04 Sunucusu

Jenkins’i kuracağımız bir Ubuntu 20.04 sunucusuna ihtiyacımız var. Bu bir sanal makine, fiziksel sunucu veya bulut tabanlı bir örnek olabilir. Minimum sistem gereksinimleri genellikle 2 GB RAM ve 25 GB disk alanı olarak önerilir, ancak iş yükünüze ve çalıştıracağınız projelere göre bu değerler artırılmalıdır.

Java Development Kit (JDK) Kurulumu

Jenkins bir Java uygulaması olduğu için, çalışabilmesi için bir Java Runtime Environment (JRE) veya daha iyisi bir Java Development Kit (JDK) gereklidir. OpenJDK, açık kaynaklı ve ücretsiz bir seçenektir ve Jenkins ile uyumluluğu yüksektir.

Öncelikle sistem paketlerini güncelleyelim:

sudo apt update
sudo apt upgrade -y

Ardından OpenJDK 11’i kuralım. Jenkins’in en son sürümleri genellikle OpenJDK 11 veya 17’yi tercih eder.

sudo apt install openjdk-11-jdk -y

Kurulumun başarılı olduğunu doğrulamak için Java sürümünü kontrol edebiliriz:

java -version

Çıktı olarak OpenJDK 11’e ait sürüm bilgilerini görmelisiniz.

Firewall Yapılandırması (UFW)

Güvenlik amacıyla, sunucumuzda bir güvenlik duvarı (firewall) etkinleştirilmiş olmalıdır. Ubuntu’da varsayılan olarak UFW (Uncomplicated Firewall) bulunur. Jenkins varsayılan olarak 8080 portunu kullanır. Bu porta dışarıdan erişime izin vermemiz gerekmektedir.

SSH bağlantısına izin verin (eğer kullanıyorsanız):

sudo ufw allow OpenSSH

Jenkins’in varsayılan portu olan 8080’e izin verin:

sudo ufw allow 8080

Güvenlik duvarını etkinleştirin:

sudo ufw enable

Güvenlik duvarı durumunu kontrol edin:

sudo ufw status

Çıktıda 8080 ve OpenSSH portlarının izinli olduğunu görmelisiniz.

Jenkins Kurulumu

Jenkins’i Ubuntu’ya kurmanın en kolay yolu, resmi Jenkins APT deposunu kullanmaktır.

Jenkins Depo Anahtarını Ekleme

İlk olarak, Jenkins deposunun GPG anahtarını sistemimize eklemeliyiz. Bu, indirdiğimiz paketlerin güvenilirliğini doğrulamak için gereklidir.

curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo tee \
  /usr/share/keyrings/jenkins-keyring.asc > /dev/null

Jenkins Deposunu Ekleme

Şimdi Jenkins deposunu APT kaynak listemize ekleyelim:

echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
  https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
  /etc/apt/sources.list.d/jenkins.list > /dev/null

Jenkins’i Kurma

Depo eklendikten sonra, paket listemizi güncelleyip Jenkins’i kurabiliriz:

sudo apt update
sudo apt install jenkins -y

Jenkins Servisini Başlatma ve Etkinleştirme

Kurulum tamamlandıktan sonra Jenkins servisi otomatik olarak başlamalıdır. Başlamadığını veya durumunu kontrol etmek için aşağıdaki komutları kullanabiliriz:

sudo systemctl start jenkins
sudo systemctl enable jenkins
sudo systemctl status jenkins

systemctl status jenkins komutunun çıktısında “active (running)” ifadesini görmelisiniz.

İlk Jenkins Yapılandırması

Jenkins servisi çalışır durumda olduğuna göre, web arayüzüne erişebiliriz. Tarayıcınızdan sunucunuzun IP adresi veya alan adresi ve 8080 portunu kullanarak erişin: http://:8080

İlk erişimde Jenkins sizden bir “initial admin password” isteyecektir. Bu parola, kurulum sırasında oluşturulan ve güvenlik amacıyla kullanılan geçici bir paroladır. Parolayı aşağıdaki komutla bulabilirsiniz:

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

Bu parolayı kopyalayıp Jenkins web arayüzündeki ilgili alana yapıştırın ve “Continue” (Devam) butonuna tıklayın.

Eklenti Kurulumu

Sonraki adımda Jenkins sizden eklentileri kurmanızı isteyecektir. İki seçeneğiniz vardır: “Install suggested plugins” (Önerilen eklentileri kur) veya “Select plugins to install” (Kurulacak eklentileri seç). Genellikle “Install suggested plugins” seçeneği iyi bir başlangıçtır, çünkü temel CI/CD işlevleri için gerekli olan eklentileri otomatik olarak kurar (Git, Pipeline, Maven vb.). İhtiyaçlarınıza göre daha sonra ek eklentiler kurabilirsiniz.

Yönetici Kullanıcısı Oluşturma

Eklenti kurulumu tamamlandıktan sonra, Jenkins sizden bir yönetici kullanıcısı oluşturmanızı isteyecektir. Güvenlik nedeniyle, bu adımı tamamlayıp güçlü bir kullanıcı adı ve parola belirlemeniz önemlidir. Bu kullanıcı, Jenkins’e giriş yapmak ve yönetim görevlerini yerine getirmek için kullanılacaktır.

Jenkins URL Yapılandırması

Son olarak, Jenkins URL’sini yapılandırmanız istenecektir. Varsayılan URL genellikle doğru olacaktır, ancak bir proxy arkasında çalışıyorsanız veya özel bir alan adı kullanıyorsanız bunu düzenlemeniz gerekebilir. “Save and Finish” (Kaydet ve Bitir) butonuna tıklayarak kurulumu tamamlayın.

Artık Jenkins ana paneline yönlendirileceksiniz. Kurulum başarılı bir şekilde tamamlanmıştır.

Jenkins Temel Yapılandırması

Jenkins ana paneline eriştikten sonra, CI iş hatlarımızı oluşturmadan önce bazı temel yapılandırmaları yapmak faydalı olacaktır.

Global Tool Configuration (Küresel Araç Yapılandırması)

Jenkins’in derleme ve test işlemleri için harici araçları (JDK, Maven, Gradle, Git vb.) nerede bulacağını bilmesi gerekir. Bu yapılandırmayı “Manage Jenkins” (Jenkins’i Yönet) -> “Global Tool Configuration” (Küresel Araç Yapılandırması) altında yapabiliriz.

JDK Yapılandırması

Daha önce OpenJDK 11 kurduğumuz için, Jenkins’in bu JDK’yi kullanmasını sağlayabiliriz.
1. “JDK Installations” (JDK Kurulumları) altında “Add JDK” (JDK Ekle) butonuna tıklayın.
2. “Name” (İsim) alanına “OpenJDK 11” gibi bir isim verin.
3. “JAVA_HOME” alanına JDK’nin kurulu olduğu yolu girin. Ubuntu’da bu genellikle /usr/lib/jvm/java-11-openjdk-amd64 şeklindedir.
4. “Save” (Kaydet) butonuna tıklayın.

Git Yapılandırması

Git genellikle sisteminizde zaten yüklüdür. Jenkins’in bunu kullanabilmesi için yolunu belirtmek iyi bir uygulamadır.
1. “Git Installations” (Git Kurulumları) altında “Add Git” (Git Ekle) butonuna tıklayın.
2. “Name” (İsim) alanına “Default Git” gibi bir isim verin.
3. “Path to Git executable” (Git yürütülebilir dosyasının yolu) alanına git yazın. Jenkins bunu otomatik olarak sistem PATH’inden bulacaktır.
4. “Save” (Kaydet) butonuna tıklayın.

Maven Yapılandırması (Opsiyonel)

Eğer Maven tabanlı projelerle çalışacaksanız, Maven’ı da yapılandırmanız gerekir.
1. “Maven Installations” (Maven Kurulumları) altında “Add Maven” (Maven Ekle) butonuna tıklayın.
2. “Name” (İsim) alanına “Maven 3.x” gibi bir isim verin.
3. “Install automatically” (Otomatik kur) seçeneğini işaretleyebilir ve Jenkins’in sizin için Maven’ı indirmesini sağlayabilirsiniz. Veya manuel olarak kurup yolunu belirtebilirsiniz.
4. “Save” (Kaydet) butonuna tıklayın.

Güvenlik ve Kullanıcı Yönetimi

Jenkins’in güvenliği, “Manage Jenkins” -> “Manage Users” (Kullanıcıları Yönet) ve “Configure Global Security” (Küresel Güvenliği Yapılandır) altında yönetilir.
* Kullanıcı Yönetimi: Yeni kullanıcılar oluşturabilir, parolalarını değiştirebilir veya silebilirsiniz.
* Küresel Güvenlik: Kimlik doğrulama (authentication) ve yetkilendirme (authorization) stratejilerini ayarlayabilirsiniz. Genellikle “Jenkins’in kendi kullanıcı veritabanı” ve “Matris tabanlı güvenlik” veya “Proje tabanlı strateji” tercih edilir. Bu, hangi kullanıcının hangi işleme yetkili olduğunu kontrol etmenizi sağlar.

Sürekli Entegrasyon İş Hatları (CI Pipelines) Kavramı

Jenkins’teki bir iş hattı (pipeline), yazılım geliştirme sürecinizin tamamını veya bir kısmını otomatikleştiren bir dizi olay veya “adım”dır. Bir iş hattı, kodu derlemek, test etmek, dağıtmak ve hatta izlemek gibi bir dizi ardışık veya paralel görevi içerebilir.

Declarative (Bildirimsel) ve Scripted (Betiksel) İş Hatları

Jenkins Pipeline, iki farklı sözdizimi ile tanımlanabilir:
* Declarative Pipeline (Bildirimsel İş Hattı): Daha modern ve kullanıcı dostu bir sözdizimidir. Yapısı daha katı ve önceden tanımlanmış bloklara sahiptir (agent, stages, steps, post vb.). Okunabilirliği ve bakımı daha kolaydır. Genellikle yeni projeler için tercih edilir.
* Scripted Pipeline (Betiksel İş Hattı): Groovy tabanlı, daha esnek bir sözdizimidir. Tüm Groovy özelliklerini kullanabilir ve daha karmaşık mantıklar için uygundur. Ancak daha fazla Groovy bilgisi gerektirir ve yapısal olarak daha az kısıtlayıcı olduğu için bakımı daha zor olabilir.

Bu makalede, daha yaygın ve önerilen Declarative Pipeline’ı kullanacağız.

Jenkinsfile: İş Hattının Kodu

Jenkinsfile, bir Jenkins iş hattının tanımını içeren metin tabanlı bir dosyadır. Bu dosya, projenizin kaynak kontrol sisteminde (Git gibi) depolanır. Bu yaklaşımın birçok avantajı vardır:
* Versiyon Kontrolü: İş hattınız, kodunuzla birlikte versiyon kontrolüne tabi tutulur. Bu, değişiklikleri takip etmeyi, geri almayı ve iş hattının farklı sürümlerini yönetmeyi kolaylaştırır.
* Kod Olarak İş Hattı (Pipeline as Code): İş hattı tanımı, projenin kendisinin bir parçası haline gelir.
* Tekrarlanabilirlik: İş hattı tanımı her zaman aynıdır ve farklı ortamlarda veya farklı Jenkins örneklerinde aynı şekilde çalışır.
* İşbirliği: Geliştirme ekibi, Jenkinsfile üzerinde işbirliği yapabilir ve iş hattı değişikliklerini kod inceleme süreçlerine dahil edebilir.

Temel İş Hattı Yapı Taşları

Bir Declarative Pipeline’ın temel yapı taşları şunlardır:
* pipeline: Tüm iş hattını kapsayan kök bloktur.
* agent: İş hattının nerede çalışacağını belirtir (örneğin, agent any herhangi bir mevcut aracı kullanır, agent { docker 'maven:3.8.1-jdk-11' } belirli bir Docker konteynerinde çalışır).
* stages: İş hattını mantıksal adımlara bölen bir koleksiyondur. Her stage (aşama) belirli bir görevi temsil eder (derleme, test etme, dağıtma vb.).
* stage: Bir iş hattı içindeki tek bir aşamadır. Her aşama bir veya daha fazla steps (adım) içerir.
* steps: Bir aşama içinde yürütülen komut veya eylemlerin dizisidir. sh (shell komutu), bat (Windows batch komutu), git, junit gibi çeşitli adımlar olabilir.
* post: İş hattının veya bir aşamanın tamamlanmasından sonra (başarılı, başarısız, her zaman vb. durumlara göre) çalıştırılacak eylemleri tanımlar.

Örnek Bir CI İş Hattı Oluşturma

Şimdi basit bir Java/Maven projesi için bir CI iş hattı oluşturalım. Bu iş hattı, kodu bir Git deposundan çekecek, derleyecek, test edecek ve sonuçları raporlayacaktır.

Örnek Proje Hazırlığı

Öncelikle, GitHub veya GitLab gibi bir platformda basit bir Maven projesi oluşturalım.
Örnek pom.xml:



    4.0.0

    com.example
    my-app
    1.0-SNAPSHOT

    
        11
        11
        UTF-8
    

    
        
            junit
            junit
            4.13.2
            test
        
    

    
        
            
                org.apache.maven.plugins
                maven-surefire-plugin
                2.22.2
            
        
    

Örnek src/main/java/com/example/App.java:

package com.example;

public class App {
    public String getGreeting() {
        return "Hello World!";
    }

    public static void main(String[] args) {
        System.out.println(new App().getGreeting());
    }
}

Örnek src/test/java/com/example/AppTest.java:

package com.example;

import static org.junit.Assert.assertEquals;
import org.junit.Test;

public class AppTest {
    @Test
    public void testGetGreeting() {
        App app = new App();
        assertEquals("Hello World!", app.getGreeting());
    }
}

Bu dosyaları içeren bir Git deposu oluşturun ve kodunuzu bu depoya yükleyin. Örneğin, https://github.com/kullaniciadi/my-java-app.git gibi bir URL’ye sahip olun.

Jenkinsfile Oluşturma

Projenizin kök dizinine Jenkinsfile adında bir dosya oluşturun ve aşağıdaki içeriği ekleyin:

// Jenkinsfile
pipeline {
    agent any // İş hattını herhangi bir mevcut Jenkins aracısında çalıştır

    tools {
        // Maven'ı Global Tool Configuration'dan kullan
        // 'Maven 3.x' daha önce Global Tool Configuration'da tanımladığımız Maven ismidir.
        maven 'Maven 3.x' 
        // JDK'yi Global Tool Configuration'dan kullan
        // 'OpenJDK 11' daha önce Global Tool Configuration'da tanımladığımız JDK ismidir.
        jdk 'OpenJDK 11'
    }

    stages {
        stage('Checkout') {
            steps {
                // Git deposundan kodu otomatik olarak çekecek
                // Bu adım, SCM yapılandırması tarafından otomatik olarak halledilir.
                // Burada sadece bir placeholder olarak duruyor, aslında bir komut yazmaya gerek yok.
                echo 'Checking out code...' 
            }
        }

        stage('Build') {
            steps {
                // Maven ile projeyi derle
                sh 'mvn clean install -DskipTests' 
            }
        }

        stage('Test') {
            steps {
                // Maven ile testleri çalıştır
                sh 'mvn test'
            }
        }

        stage('Publish Test Results') {
            steps {
                // JUnit test sonuçlarını yayınla
                junit '/target/surefire-reports/*.xml' 
            }
        }
    }

    post {
        always {
            echo 'Pipeline finished.'
        }
        success {
            echo 'Pipeline succeeded!'
            // Başarılı durumda e-posta gönderme vb. eylemler eklenebilir.
        }
        failure {
            echo 'Pipeline failed!'
            // Başarısız durumda bildirim gönderme vb. eylemler eklenebilir.
        }
    }
}

Bu Jenkinsfile dosyasını Git deponuza commit edin ve push edin.

Jenkins’te Yeni Bir İş (Job) Oluşturma

Şimdi Jenkins’e geri dönelim ve bu Jenkinsfile‘ı kullanacak yeni bir iş hattı oluşturalım:

1. Jenkins ana panelinde “New Item” (Yeni Öğe) veya “Create a job” (Bir iş oluştur) seçeneğine tıklayın.
2. Öğe adı olarak “my-java-ci-pipeline” gibi bir isim verin.
3. “Pipeline” (İş Hattı) seçeneğini seçin ve “OK” (Tamam) butonuna tıklayın.

İş Hattı Yapılandırması

Yeni açılan yapılandırma sayfasında aşağıdaki ayarları yapın:

1. General (Genel):
* İsteğe bağlı olarak bir açıklama ekleyebilirsiniz.
2. Build Triggers (Derleme Tetikleyicileri):
* Bu bölümde iş hattının ne zaman çalışacağını belirleyebilirsiniz. Şimdilik manuel tetikleme ile başlayacağız. Daha sonra “GitHub hook trigger for GITScm polling” veya “Poll SCM” gibi seçenekleri kullanarak Git deposundaki değişikliklerde otomatik tetiklemeyi ayarlayabiliriz.
3. Pipeline (İş Hattı):
* Definition (Tanım): “Pipeline script from SCM” (SCM’den iş hattı betiği) seçeneğini seçin. Bu, Jenkins’in Jenkinsfile‘ı doğrudan Git deponuzdan okumasını sağlayacaktır.
* SCM (Kaynak Kontrol Yönetimi): “Git” seçeneğini seçin.
* Repository URL (Depo URL’si): Git deponuzun URL’sini girin (örn. https://github.com/kullaniciadi/my-java-app.git).
* Credentials (Kimlik Bilgileri): Eğer deponuz özel (private) ise, “Add” (Ekle) butonuna tıklayarak Git hesabınızın kullanıcı adı ve parola veya SSH anahtarı gibi kimlik bilgilerini eklemeniz gerekir. Genel (public) depolar için bu adım gerekli değildir.
Branches to build (Derlenecek dallar): Genellikle /main veya */master olarak kalır.
* Script Path (Betik Yolu): Jenkinsfile olarak bırakın. Bu, Jenkins’in deponuzun kök dizininde Jenkinsfile adlı dosyayı arayacağını belirtir.

4. “Save” (Kaydet) butonuna tıklayarak iş hattı yapılandırmasını tamamlayın.

İş Hattının Çalıştırılması ve İzlenmesi

İş hattını yapılandırdıktan sonra, ilk derlemeyi manuel olarak tetikleyebiliriz.

1. İş hattınızın ana sayfasına gidin (Jenkins ana panelinde iş hattı adına tıklayarak).
2. Sol menüdeki “Build Now” (Şimdi Derle) seçeneğine tıklayın.

Jenkins, iş hattını çalıştırmaya başlayacaktır. Derleme geçmişi bölümünde yeni bir derleme numarası belirecektir. Bu derleme numarasına tıklayarak veya “Pipeline Stage View” (İş Hattı Aşama Görünümü) ekranına giderek ilerlemeyi izleyebilirsiniz.

Konsol Çıktısı ve Aşama Görünümü

* Console Output (Konsol Çıktısı): Derleme numarasına tıklayıp sol menüdeki “Console Output” seçeneğini seçerek, iş hattının adım adım yürüttüğü tüm komutları ve bunların çıktısını görebilirsiniz. Bu, sorun giderme için çok önemlidir.
* Pipeline Stage View: Bu görünüm, iş hattınızın her aşamasının durumunu (başarılı, başarısız, devam ediyor) görsel olarak gösterir. Her aşamanın üzerine tıklayarak ilgili loglara veya test sonuçlarına erişebilirsiniz.

Eğer her şey doğru yapılandırıldıysa, iş hattı başarılı bir şekilde tamamlanmalı ve yeşil renkte görünmelidir. “Publish Test Results” aşamasında, JUnit test sonuçlarını da Jenkins arayüzünde görebilirsiniz.

Gelişmiş Konular ve En İyi Uygulamalar

Jenkins ve CI/CD dünyası oldukça geniş ve derinlemesine bir alandır. İşte daha ileri seviye yapılandırmalar ve en iyi uygulamalar:

Webhook Entegrasyonu ile Otomatik Tetikleme

Manuel tetikleme yerine, Git deponuzda (GitHub, GitLab, Bitbucket) bir değişiklik olduğunda iş hattının otomatik olarak tetiklenmesini sağlayabilirsiniz. Bu, bir “webhook” kurarak yapılır.
1. Git deponuzun ayarlarına gidin ve bir webhook ekleyin.
2. Webhook URL’si genellikle http:///github-webhook/ (GitHub için) veya http:///project/ (GitLab için) şeklinde olacaktır.
3. Jenkins iş hattı yapılandırmasında “Build Triggers” altında ilgili webhook tetikleyicisini seçin (örn. “GitHub hook trigger for GITScm polling”).
Bu sayede, her kod push işleminde iş hattınız otomatik olarak çalışacaktır.

Parametreli İşler

İş hatlarınıza parametreler ekleyerek, kullanıcıların derlemeyi tetiklerken belirli değerleri (örn. hedef ortam, derlenecek dal, versiyon numarası) girmesine olanak tanıyabilirsiniz.
1. İş hattı yapılandırmasında “General” altında “This project is parameterized” (Bu proje parametreli) seçeneğini işaretleyin.
2. “Add Parameter” (Parametre Ekle) butonuna tıklayarak String Parameter, Choice Parameter vb. ekleyebilirsiniz.
3. Bu parametreleri Jenkinsfile içinde ${params.PARAMETER_NAME} şeklinde kullanabilirsiniz.

Bildirimler

İş hattı durum değişiklikleri hakkında (başarılı, başarısız) ekip üyelerini bilgilendirmek önemlidir.
* E-posta Bildirimleri: Jenkins’in “Email Extension Plugin” eklentisi ile derleme sonuçlarını e-posta ile gönderebilirsiniz.
* Slack/Microsoft Teams Entegrasyonu: İlgili eklentileri kurarak derleme bildirimlerini anlık mesajlaşma platformlarına gönderebilirsiniz.

Güvenlik ve Sırların Yönetimi

Hassas bilgileri (veritabanı parolaları, API anahtarları, SSH anahtarları) doğrudan Jenkinsfile içine yazmak yerine, Jenkins’in “Credentials Plugin” (Kimlik Bilgileri Eklentisi) kullanarak güvenli bir şekilde saklayın.
1. “Manage Jenkins” -> “Manage Credentials” (Kimlik Bilgilerini Yönet) altında yeni kimlik bilgileri ekleyin.
2. Jenkinsfile içinde bu kimlik bilgilerini withCredentials bloğu ile kullanabilirsiniz.

pipeline {
    agent any
    stages {
        stage('Deploy') {
            steps {
                withCredentials([usernamePassword(credentialsId: 'my-deploy-creds', usernameVariable: 'USER', passwordVariable: 'PASS')]) {
                    sh "sshpass -p ${PASS} ssh ${USER}@myserver.com 'deploy_script.sh'"
                }
            }
        }
    }
}

Jenkins Master-Agent Mimarisi

Büyük ve yoğun iş yükleri için tek bir Jenkins sunucusu (master) yeterli olmayabilir. Jenkins master-agent (eski adıyla master-slave) mimarisi ile iş yükünü birden fazla aracıya dağıtabilirsiniz. Master sunucu işleri planlarken, agent’lar derleme ve test işlemlerini yürütür. Bu, performans, ölçeklenebilirlik ve farklı ortamlarda (farklı işletim sistemleri, farklı JDK sürümleri) derleme yapabilme esnekliği sağlar.

Yedekleme ve Geri Yükleme

Jenkins yapılandırmaları, iş geçmişi ve eklentileri /var/lib/jenkins dizininde saklanır. Bu dizinin düzenli olarak yedeklenmesi kritik öneme sahiptir. Olası bir felaket durumunda Jenkins kurulumunuzu kolayca geri yükleyebilirsiniz. “Backup Plugin” gibi eklentiler bu süreci otomatikleştirebilir.

Sorun Giderme

Jenkins kurulumu veya iş hattı çalıştırma sırasında karşılaşabileceğiniz bazı yaygın sorunlar ve çözümleri:

* Java Yolu Hatası: “JAVA_HOME not set” veya “java command not found” gibi hatalar alıyorsanız, Java kurulumunuzu ve Jenkins’in Global Tool Configuration’daki JDK yolunu kontrol edin. Jenkins kullanıcısının (genellikle jenkins) Java’ya erişim izni olduğundan emin olun.
* İzin Hataları: Jenkins’in belirli dosya veya dizinlere yazma/okuma izni olmadığında hatalar meydana gelebilir. Özellikle Git deposu klonlama veya dosya oluşturma adımlarında bu tür hatalar alıyorsanız, ilgili dizinlerin jenkins kullanıcısı tarafından erişilebilir olduğundan emin olun (sudo chown -R jenkins:jenkins /path/to/directory).
* Eklenti Sorunları: Bir eklenti düzgün çalışmıyorsa veya iş hattınızda bir hata veriyorsa, Jenkins loglarını kontrol edin. Eklentiyi güncellemeyi veya yeniden kurmayı deneyebilirsiniz.
* Git Kimlik Bilgileri: Özel bir Git deposundan kod çekerken kimlik doğrulama hatası alıyorsanız, Jenkins’e doğru kimlik bilgilerini (kullanıcı adı/parola veya SSH anahtarı) eklediğinizden ve bunları iş hattı yapılandırmasında seçtiğinizden emin olun.
* Maven/Gradle Komut Hataları: Derleme veya test aşamalarında Maven veya Gradle komutları başarısız oluyorsa, komutların doğru olduğundan ve bağımlılıkların düzgün bir şekilde çözüldüğünden emin olun. Jenkins’in Global Tool Configuration’da Maven/Gradle’ın doğru şekilde yapılandırıldığını kontrol edin.
* Jenkins Logları: Sorun gidermenin en iyi yolu Jenkins loglarını incelemektir. Loglara sudo cat /var/log/jenkins/jenkins.log komutuyla veya Jenkins web arayüzündeki “Manage Jenkins” -> “System Log” (Sistem Logu) altından erişebilirsiniz.

Sonuç

Bu makalede, Ubuntu 20.04 üzerinde Jenkins’i kurmaktan, temel yapılandırmalarını yapmaya ve basit bir Sürekli Entegrasyon iş hattını oluşturmaya kadar tüm süreci adım adım ele aldık. Jenkins’in gücü ve esnekliği sayesinde, yazılım geliştirme süreçlerinizi büyük ölçüde otomatikleştirebilir, hataları erken aşamada tespit edebilir ve ürün kalitesini artırabilirsiniz.

Sürekli Entegrasyon, modern DevOps uygulamalarının temelidir ve Jenkins bu sürecin merkezinde yer alan güçlü bir araçtır. Bu kurulum ve yapılandırma rehberi, kendi CI/CD yolculuğunuza başlamanız için sağlam bir temel sağlamaktadır. İş hatlarınızı daha da geliştirmek için sürekli teslimat (Continuous Delivery) ve sürekli dağıtım (Continuous Deployment) kavramlarını araştırmaya, daha karmaşık Jenkinsfile‘lar yazmaya ve Jenkins’in zengin eklenti ekosistemini keşfetmeye devam etmeniz önerilir. Bu sayede, yazılım geliştirme süreçlerinizde maksimum verimlilik ve güvenilirlik elde edebilirsiniz.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version