Takip et

Jenkins Üzerinde Sürekli Entegrasyon (CI) İş Akışları Nasıl Kurulur: Ubuntu 16.04 Rehberi

Jenkins Üzerinde Sürekli Entegrasyon (CI) İş Akışları Nasıl Kurulur: Ubuntu 16.04 Rehberi Giriş: Sürekli Entegrasyon ve Jenkins’in Önemi M

Jenkins Üzerinde Sürekli Entegrasyon (CI) İş Akışları Nasıl Kurulur: Ubuntu 16.04 Rehberi

Giriş: Sürekli Entegrasyon ve Jenkins’in Önemi

Modern yazılım geliştirme süreçlerinde hız, kalite ve güvenilirlik temel gereksinimlerdir. Bu hedeflere ulaşmada en kritik pratiklerden biri Sürekli Entegrasyon (Continuous Integration – CI) prensibidir. CI, geliştiricilerin kod değişikliklerini düzenli olarak merkezi bir depoya entegre etmelerini ve bu entegrasyonun otomatik olarak derlenip test edilmesini sağlayan bir yazılım geliştirme uygulamasıdır. Bu sayede, entegrasyon hataları erken aşamada tespit edilir, geri bildirim döngüleri hızlanır ve genel yazılım kalitesi artırılır.

Jenkins, bu Sürekli Entegrasyon ve Sürekli Teslimat (Continuous Delivery – CD) süreçlerinin otomasyonu için en popüler açık kaynaklı araçlardan biridir. Geniş eklenti ekosistemi ve esnek yapısı sayesinde Jenkins, neredeyse her türlü proje ve teknoloji yığını için özelleştirilebilir iş akışları (pipelines) oluşturmaya olanak tanır. Bu makalede, Ubuntu 16.04 işletim sistemi üzerinde Jenkins’i kurmaktan başlayarak, temel bir Sürekli Entegrasyon iş akışı (pipeline) oluşturmaya kadar adım adım bir rehber sunacağız. Hedefimiz, geliştiricilerin ve DevOps mühendislerinin Jenkins’in gücünü kullanarak projelerinde CI uygulamalarını kolayca hayata geçirmelerine yardımcı olmaktır.

Ön Gereksinimler

Bu rehbere başlamadan önce aşağıdaki ön gereksinimlerin karşılandığından emin olun:

  • Ubuntu 16.04 Sunucusu veya Sanal Makine: Jenkins’i kuracağımız bir Ubuntu 16.04 işletim sistemi kurulu bir sunucuya veya sanal makineye (örn: VirtualBox, VMware, bulut sağlayıcısı) ihtiyacınız var. Minimum 2GB RAM ve 2 CPU çekirdeği önerilir.
  • Java Development Kit (JDK): Jenkins Java tabanlı bir uygulama olduğu için sunucuda JDK kurulu olmalıdır. OpenJDK veya Oracle JDK kullanabilirsiniz. Ubuntu 16.04 için OpenJDK 8 genellikle yeterlidir.
  • Temel Linux Komut Satırı Bilgisi: Terminal üzerinden komutları çalıştırma ve dosya sisteminde gezinme konusunda temel bilgiye sahip olmanız gerekmektedir.
  • Sudo Yetkileri: Kurulum işlemleri için sudo yetkisine sahip bir kullanıcı hesabınız olmalıdır.
  • İnternet Bağlantısı: Gerekli paketleri indirmek için sunucunun internet bağlantısı olması şarttır.

Ubuntu 16.04 Üzerine Jenkins Kurulumu

Jenkins’i Ubuntu 16.04 üzerine kurmak için resmi Jenkins deposunu kullanacağız. Bu, Jenkins’in en güncel ve kararlı sürümünü kolayca kurmamızı sağlayacaktır.

1. Java Development Kit (JDK) Kurulumu

Eğer sunucunuzda JDK kurulu değilse, aşağıdaki komutlarla OpenJDK 8’i kurabilirsiniz:

sudo apt update
sudo apt install openjdk-8-jdk -y

Kurulumun başarılı olup olmadığını kontrol etmek için Java sürümünü kontrol edin:

java -version
javac -version

Çıktıda Java 1.8.x sürümünü görmelisiniz.

2. Jenkins Deposu Anahtarını Ekleme

Jenkins paketlerini doğrulamak için genel anahtarı sisteminize eklememiz gerekiyor:

wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -

Bu komut, Jenkins’in GPG anahtarını indirir ve sisteminize ekler.

3. Jenkins Deposu Ekleme

Şimdi Jenkins deposunu sisteminizin kaynak listesine ekleyelim:

sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'

Bu, Jenkins’in kararlı sürüm deposunu apt paket yöneticinizin kullanabileceği kaynaklara ekler.

4. Paket Listesini Güncelleme ve Jenkins Kurulumu

Depo eklendikten sonra, paket listesini güncelleyin ve Jenkins’i kurun:

sudo apt update
sudo apt install jenkins -y

Bu komutlar, yeni eklenen depodan Jenkins paketini indirip kuracaktır.

5. Jenkins Servisini Başlatma ve Durumunu Kontrol Etme

Jenkins kurulumdan sonra otomatik olarak başlamalıdır. Durumunu kontrol edebilir ve gerekirse başlatıp durdurabilirsiniz:

sudo systemctl start jenkins
sudo systemctl stop jenkins
sudo systemctl restart jenkins
sudo systemctl status jenkins

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

6. Güvenlik Duvarı Yapılandırması (UFW)

Eğer sunucunuzda UFW (Uncomplicated Firewall) etkinse, Jenkins’in varsayılan portu olan 8080’e gelen bağlantılara izin vermeniz gerekir:

sudo ufw allow 8080
sudo ufw status

ufw status çıktısında 8080 portunun izinli olduğunu görmelisiniz.

İlk Jenkins Kurulumu ve Yapılandırması

Jenkins başarıyla kurulduktan sonra, web arayüzü üzerinden ilk kurulum ve yapılandırma adımlarını tamamlamamız gerekiyor.

1. Jenkins Web Arayüzüne Erişim

Web tarayıcınızı açın ve sunucunuzun IP adresi veya alan adını 8080 portuyla birlikte girin:
http://your_server_ip:8080

2. Jenkins’in Kilidini Açma

İlk erişimde Jenkins sizden bir başlangıç yöneticisi şifresi isteyecektir. Bu şifre, kurulum sırasında oluşturulan bir dosyada bulunur. Terminale dönerek aşağıdaki komutla şifreyi alabilirsiniz:

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

Bu komutun çıktısındaki uzun alfanümerik dizeyi kopyalayın ve Jenkins web arayüzündeki “Administrator password” alanına yapıştırın. Ardından “Continue” butonuna tıklayın.

3. Eklentileri Kurma

Jenkins, işlevselliğini eklentiler aracılığıyla genişletir. İki seçenek sunulacaktır:

  • Install suggested plugins: Çoğu kullanıcı için önerilen eklentileri kurar. Bu, başlangıç için iyi bir seçenektir.
  • Select plugins to install: Kurmak istediğiniz eklentileri manuel olarak seçmenize olanak tanır.

“Install suggested plugins” seçeneğini seçmeniz önerilir. Jenkins, gerekli eklentileri indirip kurmaya başlayacaktır. Bu işlem biraz zaman alabilir.

4. İlk Yönetici Kullanıcı Oluşturma

Eklentiler yüklendikten sonra, sizden yeni bir yönetici kullanıcı oluşturmanız istenecektir. Kullanıcı adı, şifre, tam ad ve e-posta adresi gibi bilgileri girin. Bu kullanıcı, Jenkins’e giriş yapmak ve yönetmek için kullanılacaktır. Bu adımı atlamamanız ve güçlü bir şifre kullanmanız önemlidir.

5. Jenkins URL Yapılandırması

Son adımda, Jenkins’in varsayılan URL’sini yapılandırmanız istenecektir. Genellikle, önceden doldurulmuş URL (sunucunuzun IP adresi ve 8080 portu) doğru olacaktır. “Save and Finish” butonuna tıklayın.

Tebrikler! Jenkins kurulumu ve ilk yapılandırması tamamlandı. Artık “Start using Jenkins” butonuna tıklayarak Jenkins paneline erişebilirsiniz.

Sürekli Entegrasyon (CI) ve Jenkins İş Akışları (Pipelines)

Jenkins kurulumunu tamamladığımıza göre, şimdi Sürekli Entegrasyon kavramına daha derinlemesine bakalım ve Jenkins’in bu süreçleri otomatikleştirmek için kullandığı iş akışları (pipelines) yapısını inceleyelim.

Sürekli Entegrasyon (CI) Nedir?

CI, bir ekibin kod tabanındaki değişiklikleri sık sık (genellikle günde birkaç kez) entegre ettiği ve her entegrasyonun otomatik bir derleme ve test süreciyle doğrulandığı bir geliştirme uygulamasıdır. Temel faydaları şunlardır:

  • Erken Hata Tespiti: Entegrasyon sorunları ve hatalar, geliştirme döngüsünün başlarında yakalanır.
  • Geri Bildirim Hızı: Geliştiriciler, kod değişikliklerinin sistemle uyumluluğu hakkında hızlı geri bildirim alırlar.
  • Azalan Risk: Küçük ve sık entegrasyonlar, büyük ve nadir entegrasyonlara göre daha az risk taşır.
  • Artan Güven: Otomatik testler, kod tabanının kararlılığına olan güveni artırır.
  • Daha Hızlı Teslimat: Sürekli olarak entegre edilmiş ve test edilmiş bir kod tabanı, dağıtıma daha hızlı hazır olur.

Jenkins İş Akışları (Pipelines) Nedir?

Jenkins İş Akışları (Pipelines), tüm Sürekli Entegrasyon ve Sürekli Teslimat (CI/CD) süreçlerinizi kod olarak tanımlamanıza olanak tanıyan bir dizi eklentidir. Bu, geliştirme yaşam döngünüzün tamamını otomatikleştirebileceğiniz ve sürüm kontrol sistemi (SCM) aracılığıyla yönetebileceğiniz anlamına gelir. Jenkins Pipelines’ın temel özellikleri:

  • Kod Olarak İş Akışı (Pipeline as Code): İş akışları, Groovy tabanlı bir DSL (Domain Specific Language) kullanılarak Jenkinsfile adı verilen bir metin dosyasında tanımlanır ve projenizin kaynak koduyla birlikte sürüm kontrol sisteminde saklanır.
  • Dayanıklılık: Jenkins yeniden başlatılsa bile iş akışları devam edebilir.
  • Genişletilebilirlik: Yüzlerce eklenti sayesinde neredeyse her türlü görevi otomatikleştirebilirsiniz.
  • Görselleştirme: Jenkins, iş akışlarınızın ilerlemesini görsel olarak izlemenizi sağlayan kullanıcı dostu bir arayüze sahiptir.

Jenkins Pipelines iki ana formda yazılabilir:

  • Declarative Pipeline (Bildirimsel İş Akışı): Daha yeni ve basitleştirilmiş bir sözdizimine sahiptir. Yapılandırılmış bir yaklaşımla, iş akışınızın her adımını (aşamaları, adımları, aracıları vb.) açıkça tanımlarsınız. Başlangıç seviyesi için daha kolay anlaşılır ve yönetilebilirdir.
  • Scripted Pipeline (Betiksel İş Akışı): Groovy programlama dilinin tam gücünü kullanır. Daha fazla esneklik ve karmaşık mantık gerektiren durumlar için uygundur, ancak daha dik bir öğrenme eğrisine sahiptir.

Bu rehberde, daha yaygın ve anlaşılır olan Declarative Pipeline yapısına odaklanacağız.

Örnek Bir CI İş Akışı (Pipeline) Kurulumu

Şimdi, basit bir Java (Maven) projesini GitHub’dan çekip derleyen, test eden ve çıktılarını arşivleyen bir Sürekli Entegrasyon iş akışı oluşturalım.

Senaryo: Basit Bir Maven Projesi

Varsayımsal olarak, GitHub üzerinde my-maven-project adında basit bir Maven projemiz olduğunu varsayalım. Bu proje, pom.xml dosyasına sahip standart bir Maven projesi yapısına sahiptir ve JUnit testleri içerir.

1. Gerekli Eklentilerin Kontrolü

Pipeline’lar ve SCM entegrasyonu için temel eklentiler (Pipeline, Git) genellikle “Install suggested plugins” seçeneğiyle kurulur. Maven projesi için ek olarak Maven Integration eklentisi faydalı olabilir, ancak doğrudan sh 'mvn ...' komutlarını kullanarak da Maven işlemlerini yürütebiliriz. Eğer Maven kurulu değilse, Jenkins sunucunuza veya kullanacağınız agent’a kurmanız gerekecektir. Basitlik adına, bu rehberde Jenkins sunucusunda Maven’ın kurulu olduğunu varsayıyoruz.

sudo apt install maven -y

Yukarıdaki komutla Maven’ı Jenkins sunucusuna kurabilirsiniz.

2. Yeni Bir Jenkins Öğesi (Item) Oluşturma

Jenkins paneline giriş yapın ve sol menüden “New Item” (Yeni Öğe) seçeneğine tıklayın.

  • Item Name: MyMavenCIPipeline gibi anlamlı bir isim verin.
  • Select a type of project: “Pipeline” seçeneğini işaretleyin.

“OK” butonuna tıklayarak devam edin.

3. Pipeline Yapılandırması

Yeni oluşturduğunuz Pipeline öğesinin yapılandırma sayfasına yönlendirileceksiniz. Burada birçok seçenek bulunur, ancak biz “Pipeline” bölümüne odaklanacağız.

“Pipeline” bölümünde, “Definition” açılır menüsünden “Pipeline script from SCM” seçeneğini seçin. Bu, iş akışı tanımımızı (Jenkinsfile) doğrudan bir SCM (Git) deposundan alacağımız anlamına gelir. Bu yöntem, iş akışını kod tabanınızla birlikte sürüm kontrolünde tuttuğu için en iyi uygulamadır.

  • SCM: “Git” seçeneğini seçin.
  • Repository URL: Örnek Maven projenizin GitHub URL’sini girin. Örneğin: https://github.com/your_username/my-maven-project.git (Kendi örnek projenizle veya genel bir Maven projesi örneğiyle değiştirin).
  • Credentials: Eğer depo herkese açıksa “None” olarak bırakın. Özel bir depo ise, “Add” butonuna tıklayarak GitHub kimlik bilgilerinizi (kullanıcı adı/şifre veya SSH anahtarı) eklemeniz gerekir.
  • Branches to build: /main veya /master olarak bırakın.
  • Script Path: Jenkinsfile olarak bırakın. Bu, projenizin kök dizininde Jenkinsfile adında bir dosya arayacağı anlamına gelir.

4. Jenkinsfile Oluşturma

Şimdi, örnek Maven projenizin kök dizininde Jenkinsfile adında bir dosya oluşturmanız ve aşağıdaki içeriği içine yapıştırmanız gerekiyor. Bu dosyayı GitHub deponuza commit edin ve push edin.


// Jenkinsfile (Declarative Pipeline)
pipeline {
    // İş akışının çalışacağı ortamı tanımlar.
    // 'any' herhangi bir mevcut Jenkins aracısında çalışacağı anlamına gelir.
    agent any

    // İş akışının aşamalarını tanımlar.
    stages {
        // 1. Aşama: Kaynak Kodu Çekme (Checkout)
        stage('Checkout') {
            steps {
                // Git deposundan kaynak kodunu çeker.
                // Repository URL, Jenkins iş yapılandırmasında belirtildiği için burada sadece git() kullanılır.
                // Eğer farklı bir repo çekilecekse, 'git url: "https://github.com/...", branch: "main"' kullanılabilir.
                checkout scm
            }
        }

        // 2. Aşama: Projeyi Derleme (Build)
        stage('Build') {
            steps {
                // Maven kullanarak projeyi temizler ve derler.
                // 'sh' komutu, kabuk (shell) komutlarını çalıştırmak için kullanılır.
                sh 'mvn clean install -DskipTests' // Testleri şimdilik atla, ayrı bir aşamada çalıştıracağız.
            }
        }

        // 3. Aşama: Testleri Çalıştırma (Test)
        stage('Test') {
            steps {
                // Maven kullanarak projenin testlerini çalıştırır.
                sh 'mvn test'
                // JUnit test sonuçlarını arşivler (eğer JUnit eklentisi kuruluysa).
                junit '/target/surefire-reports/*.xml'
            }
        }

        // 4. Aşama: Çıktıları Arşivleme (Archive Artifacts)
        stage('Archive Artifacts') {
            steps {
                // Derlenen JAR/WAR dosyalarını Jenkins üzerinde arşivler.
                // Bu sayede, derleme sonrası oluşan çıktılara kolayca erişilebilir.
                archiveArtifacts artifacts: 'target/*.jar', fingerprint: true
            }
        }
    }

    // İş akışı tamamlandıktan sonra çalışacak post-build adımları.
    post {
        // Her zaman çalışır, başarılı veya başarısız olsun fark etmez.
        always {
            echo 'Pipeline finished.'
        }
        // İş akışı başarılı olduğunda çalışır.
        success {
            echo 'Pipeline succeeded!'
            // Örneğin, Slack veya e-posta bildirimi gönderebilirsiniz.
        }
        // İş akışı başarısız olduğunda çalışır.
        failure {
            echo 'Pipeline failed!'
            // Örneğin, hata durumunda e-posta bildirimi gönderebilirsiniz.
        }
        // İş akışı iptal edildiğinde çalışır.
        aborted {
            echo 'Pipeline was aborted.'
        }
    }
}

Jenkinsfile Açıklaması:

  • pipeline { ... }: Tüm Declarative Pipeline’ın kök bloğudur.
  • agent any: Bu iş akışının herhangi bir mevcut Jenkins aracısında (şu anda sadece ana Jenkins sunucusu) çalışabileceğini belirtir. Belirli bir etiketle eşleşen bir aracıya yönlendirmek için agent { label 'my-agent' } gibi ifadeler kullanılabilir.
  • stages { ... }: İş akışının mantıksal aşamalarını içeren bloğudur. Her stage (aşama), bir dizi steps (adım) içerir.
  • stage('Checkout') { ... }: Kaynak kodunu sürüm kontrol sisteminden çeker. checkout scm komutu, Jenkins iş yapılandırmasında tanımlanan SCM ayarlarını kullanır.
  • stage('Build') { ... }: Maven clean install komutunu çalıştırarak projeyi derler. -DskipTests parametresi, testlerin bu aşamada atlanmasını sağlar, çünkü testleri ayrı bir aşamada çalıştırmak daha iyi bir pratiktir.
  • stage('Test') { ... }: Maven test komutunu çalıştırarak projenin birim testlerini yürütür. junit '/target/surefire-reports/*.xml' adımı, Maven’ın Surefire eklentisi tarafından üretilen JUnit test raporlarını toplar ve Jenkins’in test sonuçlarını görselleştirmesini sağlar.
  • stage('Archive Artifacts') { ... }: Derleme sonucunda oluşan .jar veya .war gibi çıktı dosyalarını Jenkins’in kendisine arşivlemesini sağlar. Bu sayede, geçmiş derlemelerin çıktılarına kolayca erişilebilir. fingerprint: true özelliği, arşivlenen dosyanın parmak izini tutarak, hangi derlemenin hangi çıktıyı ürettiğini takip etmeye yardımcı olur.
  • post { ... }: İş akışı tamamlandıktan sonra (başarılı, başarısız, iptal edildi vb. durumlarına göre) belirli eylemleri gerçekleştirmek için kullanılır. Örneğin, bildirim göndermek.
  • sh '...': Kabuk komutlarını çalıştırmak için kullanılan bir adımdır.
  • echo '...': Konsola mesaj yazdırmak için kullanılır.

5. İş Akışını Başlatma

Jenkins iş yapılandırmanızı “Save” (Kaydet) butonuna tıklayarak kaydedin. Ardından, sol menüdeki “Build Now” (Şimdi Derle) butonuna tıklayarak iş akışını manuel olarak başlatın.

İş akışı çalışmaya başladığında, sol menüden “Build History” (Derleme Geçmişi) altındaki son derlemeye tıklayın ve ardından “Console Output” (Konsol Çıktısı) seçeneğini seçerek iş akışının ilerlemesini ve çıktısını gerçek zamanlı olarak izleyebilirsiniz. Her aşamanın başarıyla tamamlandığını görmelisiniz.

Gelişmiş İş Akışı Kavramları (Kısaca)

Jenkins Pipelines’ın temelini attığımıza göre, şimdi daha karmaşık senaryolar için kullanılabilecek bazı gelişmiş kavramlara değinelim.

1. Dağıtılmış Derlemeler (Agents/Nodes)

Jenkins’in ana sunucusunda tüm derlemeleri çalıştırmak, özellikle büyük projeler veya çok sayıda paralel derleme olduğunda performans sorunlarına yol açabilir. Bu durumu aşmak için “agent” veya “node” adı verilen harici makineler kullanabilirsiniz. Bu makineler, Jenkins ana sunucusundan derleme görevlerini alır ve çalıştırır.

  • Neden Kullanılır? Ana sunucunun yükünü azaltmak, farklı işletim sistemlerinde (Windows, macOS) derleme yapmak, belirli donanım gereksinimleri olan derlemeler için özel ortamlar sağlamak.
  • Kurulum: Bir agent makinesine Java kurulu olmalı ve Jenkins ana sunucusu ile SSH veya JNLP (Java Network Launch Protocol) aracılığıyla bağlantı kurabilir olmalıdır. Jenkins web arayüzünden “Manage Jenkins” -> “Manage Nodes and Clouds” altından yeni bir node ekleyebilirsiniz.
  • Kullanım: Jenkinsfile içinde agent { label 'my-linux-agent' } veya agent { node { label 'my-windows-agent' } } gibi ifadelerle belirli bir agent’ı hedefleyebilirsiniz.

2. Kimlik Bilgileri Yönetimi (Credentials Management)

Veritabanı şifreleri, API anahtarları, özel Git depoları için kullanıcı adları/şifreler gibi hassas bilgileri doğrudan Jenkinsfile içine yazmak güvenlik riski taşır. Jenkins, bu tür bilgileri güvenli bir şekilde saklamak için bir “Credentials” (Kimlik Bilgileri) yöneticisine sahiptir.

  • Kullanım: “Manage Jenkins” -> “Manage Credentials” altından farklı türde kimlik bilgileri (kullanıcı adı/şifre, SSH anahtarı, gizli metin vb.) ekleyebilirsiniz.
  • Pipeline içinde kullanım: withCredentials([usernamePassword(credentialsId: 'my-github-creds', usernameVariable: 'GIT_USERNAME', passwordVariable: 'GIT_PASSWORD')]) { ... } gibi yapılarla kimlik bilgilerini güvenli bir şekilde pipeline adımlarına enjekte edebilirsiniz.

3. Parametreli İş Akışları (Parameterized Pipelines)

Bazen, bir iş akışını çalıştırırken kullanıcıdan bazı girdiler almak isteyebilirsiniz (örneğin, derlenecek dal adı, dağıtılacak ortam, testlerin hangi test paketiyle çalışacağı). Jenkins, parametreli iş akışlarını destekler.

  • Yapılandırma: İş yapılandırmasında “This project is parameterized” seçeneğini işaretleyerek String, Boolean, Choice gibi farklı türde parametreler ekleyebilirsiniz.
  • Pipeline içinde kullanım: params.BRANCH_NAME gibi ifadelerle Jenkinsfile içinde parametre değerlerine erişebilirsiniz.

4. Bildirimler (Notifications)

İş akışlarının durumu hakkında (başarılı, başarısız, kararsız) geliştiricileri veya ekipleri bilgilendirmek, CI/CD sürecinin önemli bir parçasıdır.

  • Eklentiler: Email Extension Plugin, Slack Notification Plugin gibi eklentilerle bildirimleri yapılandırabilirsiniz.
  • Pipeline içinde kullanım: post bloğu içinde mail to: 'dev@example.com', subject: 'Pipeline ${currentBuild.result}: ${env.JOB_NAME}', body: 'Build ${env.BUILD_NUMBER} is ${currentBuild.result}' gibi adımlar ekleyebilirsiniz.

5. Pipeline Kütüphaneleri (Shared Libraries)

Birden fazla projede tekrar eden iş akışı adımlarınız veya aşamalarınız varsa, bunları merkezi bir “Shared Library” (Paylaşılan Kütüphane) olarak tanımlayabilir ve farklı Jenkinsfile dosyalarında yeniden kullanabilirsiniz. Bu, kod tekrarını azaltır ve iş akışlarının bakımını kolaylaştırır.

  • Kullanım: Bir Git deposunda özel Groovy betikleri oluşturulur ve Jenkins’te “Manage Jenkins” -> “Configure System” altında “Global Pipeline Libraries” olarak kaydedilir. Ardından Jenkinsfile içinde @Library('my-shared-library') _ gibi bir ifadeyle çağrılır.

Jenkins ile CI/CD için En İyi Uygulamalar

Jenkins ve CI/CD süreçlerini verimli ve güvenli bir şekilde kullanmak için bazı en iyi uygulamaları takip etmek önemlidir:

  • Jenkinsfile‘ı Sürüm Kontrolünde Tutun: İş akışı tanımlarınızı (Jenkinsfile) projenizin kaynak koduyla birlikte Git gibi bir SCM sisteminde saklayın. Bu, iş akışının geçmişini takip etmenizi, değişiklikleri gözden geçirmenizi ve geri almanızı sağlar.
  • Küçük ve Odaklanmış Aşamalar Kullanın: Her aşama (stage) tek bir sorumluluğa sahip olmalı (örn: checkout, build, test, deploy). Bu, hataları daha kolay izlemenizi ve iş akışını daha modüler hale getirmenizi sağlar.
  • Hızlı Başarısız Olun (Fail Fast): En kritik ve hızlı testleri iş akışının başlarında çalıştırın. Böylece, temel bir sorun varsa, pahalı ve zaman alıcı adımlara geçmeden önce derlemeyi durdurabilirsiniz.
  • Her Şeyi Otomatikleştirin: Manuel adımlardan kaçının. Bir adımı her seferinde tekrarlıyorsanız, onu otomatikleştirmek için bir yol bulun.
  • Ayrılmış Derleme Aracıları (Agents) Kullanın: Jenkins ana sunucusunun sadece orkestrasyon görevlerini yapmasını sağlayın. Gerçek derleme, test ve dağıtım görevlerini ayrı derleme aracılarına devredin. Bu, performansı artırır ve ana sunucunun kararlılığını korur.
  • Pipeline Sağlığını İzleyin: İş akışlarınızın durumunu düzenli olarak kontrol edin. Başarısız derlemeleri hemen inceleyin ve düzeltin. Bildirimleri etkinleştirerek sorunlardan anında haberdar olun.
  • Jenkins’i Güvenli Hale Getirin: Jenkins kurulumunuzu güvenli hale getirmek için kullanıcı tabanlı yetkilendirme, güçlü şifreler, SSL/TLS kullanımı ve düzenli güvenlik güncellemeleri gibi adımları uygulayın. Hassas bilgilere erişimi kısıtlayın.
  • Eklentileri Güncel Tutun: Jenkins eklentilerini düzenli olarak güncelleyerek güvenlik açıklarını kapatın ve yeni özelliklerden yararlanın.

Sık Karşılaşılan Sorunlar ve Giderme

Jenkins kurulumu ve pipeline oluşturma sürecinde karşılaşabileceğiniz bazı yaygın sorunlar ve çözümleri:

  • Java Sürüm Uyuşmazlığı: Jenkins belirli Java sürümleriyle çalışır. java -version komutuyla kurulu Java sürümünü kontrol edin ve Jenkins gereksinimleriyle eşleştiğinden emin olun. Genellikle OpenJDK 8 veya 11 önerilir.
  • İzin Sorunları: Jenkins kullanıcısının (jenkins) dosya sistemi üzerinde gerekli okuma/yazma izinlerine sahip olduğundan emin olun. Özellikle SCM’den kod çekerken veya çıktı dosyalarını yazarken bu sorunlar ortaya çıkabilir.
  • Güvenlik Duvarı Engellemesi: Jenkins web arayüzüne erişemiyorsanız (genellikle 8080 portu), sunucunuzdaki güvenlik duvarının (UFW, iptables) bu porta gelen bağlantılara izin verdiğinden emin olun.
  • SCM Bağlantı Sorunları: Git deposundan kod çekemiyorsanız, depo URL’sinin doğru olduğundan, kimlik bilgilerinin (eğer özel bir depo ise) doğru yapılandırıldığından ve Jenkins sunucusunun depoya erişim için gerekli ağ bağlantısına sahip olduğundan emin olun. SSH tabanlı bağlantılarda SSH anahtarlarının doğru şekilde yapılandırılması gerekir.
  • Eklenti Çatışmaları veya Hataları: Bazen eklentiler arasında çatışmalar olabilir veya bir eklenti hatalı çalışabilir. Jenkins loglarını (/var/log/jenkins/jenkins.log) kontrol edin. Sorunlu eklentiyi devre dışı bırakmayı veya yeniden yüklemeyi deneyin.
  • Maven/Gradle/NPM Bulunamadı: Pipeline içinde mvn, gradle, npm gibi komutlar çalışmıyorsa, bu araçların Jenkins sunucusunda veya kullanılan agent’ta kurulu ve PATH ortam değişkenine ekli olduğundan emin olun. Alternatif olarak, Jenkins’in “Manage Jenkins” -> “Global Tool Configuration” bölümünden bu araçları yapılandırabilirsiniz.

Sonuç

Bu kapsamlı rehberde, Ubuntu 16.04 üzerinde Jenkins’i kurmaktan, temel bir Sürekli Entegrasyon iş akışı (pipeline) oluşturmaya ve gelişmiş kavramlara değinmeye kadar birçok adımı ele aldık. Jenkins, yazılım geliştirme süreçlerinizi otomatikleştirmek, hataları erken tespit etmek ve yazılım teslimat hızınızı artırmak için güçlü bir araçtır.

Sürekli Entegrasyon, modern DevOps kültürünün temel taşlarından biridir ve Jenkins bu pratiği hayata geçirmek için size gerekli tüm araçları sunar. Başlangıçta karmaşık görünebilir, ancak adım adım ilerleyerek ve yukarıdaki rehberi takip ederek, projeleriniz için sağlam CI/CD altyapıları kurabilirsiniz. Unutmayın, Jenkins’in gücü eklenti ekosisteminde ve topluluğunun desteğindedir. Bu rehber bir başlangıç noktasıdır; Jenkins’in sunduğu sınırsız olanakları keşfetmeye devam edin ve iş akışlarınızı kendi proje ihtiyaçlarınıza göre özelleştirin. Bu sayede, daha kaliteli yazılımları daha hızlı ve daha güvenilir bir şekilde sunabilirsiniz.

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

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.