Jenkins Nedir ve Neden Önemlidir?
Modern yazılım geliştirme süreçlerinde, kod değişikliklerinin sürekli olarak entegre edildiği, test edildiği ve dağıtıldığı bir yaklaşım olan Sürekli Entegrasyon (CI) ve Sürekli Dağıtım (CD) hayati bir rol oynamaktadır. Jenkins, bu süreçleri otomatikleştirmek için kullanılan açık kaynaklı, güçlü bir otomasyon sunucusudur. Geliştiricilerin kodlarını birleştirme sıklığını artırarak hataları erken aşamada tespit etmelerine, testleri otomatik çalıştırmalarına ve yazılımı daha hızlı ve güvenilir bir şekilde yayınlamalarına olanak tanır.
Bu rehberde, CentOS 7 işletim sistemi üzerinde Jenkins’i adım adım nasıl kuracağınızı, temel yapılandırmalarını nasıl yapacağınızı ve ilk CI/CD projenizi nasıl oluşturacağınızı detaylı bir şekilde öğreneceksiniz.
Jenkins Kurulumu İçin Ön Gereksinimler
Jenkins’in sorunsuz çalışabilmesi için bazı ön koşulların yerine getirilmesi gerekmektedir. CentOS 7 sunucunuzda bu adımları takip ederek gerekli ortamı hazırlayalım.
Sistem Güncellemesi
Herhangi bir kuruluma başlamadan önce sistem paketlerini güncel tutmak iyi bir uygulamadır:
sudo yum update -y
sudo yum upgrade -y
Java Kurulumu
Jenkins, Java tabanlı bir uygulamadır ve çalışması için Java Sanal Makinesi (JVM) gerektirir. CentOS 7 üzerinde OpenJDK 8’i kurmak için aşağıdaki komutları kullanabilirsiniz:
sudo yum install java-1.8.0-openjdk-devel -y
Kurulumun ardından Java sürümünü kontrol edebilirsiniz:
java -version
Çıktı aşağıdaki gibi olmalıdır:
openjdk version "1.8.0_XXX"
OpenJDK Runtime Environment (build 1.8.0_XXX-bXX)
OpenJDK 64-Bit Server VM (build 25.XXX-bXX, mixed mode)
Firewall Ayarları
Jenkins varsayılan olarak 8080 portunu kullanır. Bu porta dışarıdan erişilebilmesi için CentOS 7’nin güvenlik duvarı (firewalld) üzerinde bir kural tanımlamanız gerekir:
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
Bu komutlar, 8080 portuna TCP trafiğine izin verir ve güvenlik duvarı kurallarını yeniden yükler.
Jenkins Kurulumu ve İlk Yapılandırması
Ön gereksinimleri tamamladıktan sonra Jenkins’i kurmaya ve ilk yapılandırmasını yapmaya hazırız.
Jenkins Repository Ekleme
Jenkins paketlerini CentOS 7’ye kurabilmek için öncelikle Jenkins’in kendi YUM deposunu sisteminize eklemeniz gerekir:
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
Jenkins Kurulumu
Depoyu ekledikten sonra Jenkins paketini kurabiliriz:
sudo yum install jenkins -y
Jenkins Servisini Başlatma ve Etkinleştirme
Kurulum tamamlandıktan sonra Jenkins servisini başlatın ve sistem başlangıcında otomatik olarak başlaması için etkinleştirin:
sudo systemctl start jenkins
sudo systemctl enable jenkins
sudo systemctl status jenkins
systemctl status jenkins komutunun çıktısında Jenkins’in active (running) olduğunu görmelisiniz.
Jenkins Web Arayüzü ile İlk Yapılandırma
Jenkins servisi çalışmaya başladıktan sonra, web tarayıcınızdan sunucunuzun IP adresi veya alan adıyla 8080 portundan erişebilirsiniz:
http://sizin_sunucu_ip_adresiniz:8080
İlk erişimde sizden bir başlangıç şifresi isteyecektir. Bu şifreyi aşağıdaki komutla alabilirsiniz:
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Çıktıdaki şifreyi kopyalayıp Jenkins web arayüzündeki ilgili alana yapıştırın ve “Continue” butonuna tıklayın.
Ardından, Jenkins eklentilerini kurma seçeneği sunulacaktır:
- Install suggested plugins: Çoğu kullanıcı için önerilen eklentileri kurar. Bu genellikle en iyi başlangıç seçeneğidir.
- Select plugins to install: İhtiyaçlarınıza göre eklentileri manuel olarak seçmenize olanak tanır.
“Install suggested plugins” seçeneğini seçerek devam etmenizi öneririz. Jenkins gerekli eklentileri indirip kuracaktır.
Eklenti kurulumu tamamlandıktan sonra, ilk yönetici kullanıcıyı oluşturmanız istenecektir. Kullanıcı adı, parola, tam ad ve e-posta adresi gibi bilgileri girerek bir yönetici hesabı oluşturun ve “Save and Finish” butonuna tıklayın. Son olarak, “Start using Jenkins” butonuna tıklayarak Jenkins kontrol paneline erişebilirsiniz.
Jenkins ile İlk CI/CD Projesi Oluşturma
Jenkins kurulumunu tamamladığınıza göre, basit bir Continuous Integration projesi oluşturalım. Bu örnekte, bir Git deposundan kod çekecek ve basit bir kabuk komutu çalıştıracağız.
Yeni Bir İş (Job) Oluşturma
- Jenkins kontrol panelinde sol menüden “New Item” (Yeni Öğe) seçeneğine tıklayın.
- Projenize bir isim verin (örneğin:
MyFirstCIProject). - “Freestyle project” (Serbest Stil Proje) seçeneğini seçin ve “OK” butonuna tıklayın.
Proje Yapılandırması
Proje yapılandırma sayfasında aşağıdaki bölümleri ayarlayacağız:
Kaynak Kodu Yönetimi (Source Code Management – SCM)
Bu bölümde, projenizin kaynak kodunun nerede bulunduğunu belirtirsiniz. Git kullanacağımız için, Jenkins sunucunuzda Git’in kurulu olduğundan emin olun. Değilse, aşağıdaki komutla kurabilirsiniz:
sudo yum install git -y
Jenkins yapılandırma sayfasında:
- “Git” seçeneğini işaretleyin.
- “Repository URL” alanına bir Git deposunun URL’sini girin (örneğin,
https://github.com/jenkins-docs/simple-java-maven-app.gitveya kendi örnek deponuzun URL’si). - Eğer depo özel ise, “Credentials” (Kimlik Bilgileri) bölümünden kimlik bilgilerinizi eklemeniz gerekebilir.
Yapılandırma Tetikleyicileri (Build Triggers)
Bu bölüm, bir yapının ne zaman tetikleneceğini belirler. En yaygın seçeneklerden biri “Poll SCM”dir. Bu, Jenkins’in belirli aralıklarla SCM deposunu kontrol etmesini ve bir değişiklik algıladığında bir yapı (build) tetiklemesini sağlar.
- “Poll SCM” seçeneğini işaretleyin.
- “Schedule” (Zamanlama) alanına bir cron ifadesi girin. Örneğin, her dakika kontrol etmek için
kullanabilirsiniz. Daha gerçekçi bir senaryo içinH/5 *(her 5 dakikada bir) gibi bir ifade kullanabilirsiniz.
Yapı Adımları (Build Steps)
Bu bölüm, kaynak kodu çekildikten sonra çalıştırılacak komutları veya betikleri tanımlar. Örneğin, bir Java projesini derlemek için Maven komutlarını veya basit bir “Hello World” çıktısı için kabuk komutlarını kullanabiliriz.
- “Add build step” (Yapı adımı ekle) butonuna tıklayın.
- “Execute shell” (Kabuk komutunu çalıştır) seçeneğini seçin.
- “Command” (Komut) alanına aşağıdaki komutları girin:
echo "Proje kaynak kodu çekildi."
ls -la
echo "Jenkins ilk CI projeniz başarıyla çalıştı!"
Eğer bir Maven projesi ise ve Jenkins sunucunuzda Maven kurulu ise (kurulu değilse sudo yum install maven -y komutuyla kurabilirsiniz), aşağıdaki gibi komutlar kullanabilirsiniz:
echo "Maven projesi derleniyor..."
mvn clean install
Projeyi Kaydetme ve Çalıştırma
Tüm yapılandırmaları tamamladıktan sonra “Save” (Kaydet) butonuna tıklayın. Proje ana sayfasına yönlendirileceksiniz. Sol menüden “Build Now” (Şimdi Oluştur) butonuna tıklayarak ilk yapıyı manuel olarak tetikleyebilirsiniz.
Yapı tamamlandığında, “Build History” (Yapı Geçmişi) bölümünde yapı numarasının yanındaki simgeye tıklayarak ve ardından “Console Output” (Konsol Çıktısı) seçeneğini seçerek yapının loglarını inceleyebilirsiniz.
Pratik Bilgiler ve En İyi Uygulamalar
Güvenlik
- Kullanıcı ve Rol Yönetimi: Jenkins’te farklı kullanıcılar ve rollere sahip olabilirsiniz. Herkese yönetici yetkisi vermek yerine, Matrix Authorization Strategy gibi eklentilerle belirli projelere veya işlemlere yetki atayın.
- HTTPS Yapılandırması: Jenkins’e erişimi HTTPS üzerinden sağlamak için Nginx veya Apache gibi bir ters proxy (reverse proxy) kullanın. Bu, iletişim trafiğinin şifrelenmesini sağlar.
- Kimlik Bilgileri Yönetimi: Depo kimlik bilgileri, API anahtarları gibi hassas bilgileri doğrudan betiklere yazmak yerine Jenkins’in Credentials (Kimlik Bilgileri) yöneticisinde güvenli bir şekilde saklayın.
Performans ve Ölçeklenebilirlik
- Jenkins Master-Agent Mimarisi: Büyük projelerde veya çok sayıda iş çalıştırıldığında, Jenkins Master sunucusunu sadece koordinasyon ve yapılandırma için kullanın. Gerçek yapı (build) işlemlerini gerçekleştirmek için ayrı Agent (Slave) makineleri kullanın. Bu, Master’ın yükünü azaltır ve performansı artırır.
- Kaynak Tahsisi: Jenkins sunucusuna yeterli CPU, RAM ve disk alanı ayırın. Özellikle derleme ve test süreçleri yoğun kaynak tüketebilir.
Yedekleme
Jenkins yapılandırmaları, iş tanımları, eklentiler ve geçmiş verileri /var/lib/jenkins dizininde saklanır. Bu dizini düzenli olarak yedeklemek, olası bir sistem çökmesi veya veri kaybı durumunda hızlı bir şekilde geri dönebilmenizi sağlar.
Plugin Ekosistemi
Jenkins’in gücü, zengin eklenti ekosisteminden gelir. Git, Maven Integration, Pipeline, Blue Ocean, Docker, Kubernetes gibi yüzlerce eklenti, Jenkins’in yeteneklerini genişleterek neredeyse her türlü CI/CD ihtiyacınızı karşılamanıza olanak tanır. İhtiyaçlarınıza göre “Manage Jenkins” -> “Manage Plugins” bölümünden yeni eklentiler kurabilirsiniz.
Pipeline as Code (Jenkinsfile)
Jenkins Pipeline, CI/CD işlem hattınızı kod olarak tanımlamanıza olanak tanır. Bir Jenkinsfile kullanarak (genellikle projenizin kök dizininde bulunur) tüm yapı, test ve dağıtım adımlarınızı versiyon kontrol sistemi altında yönetebilirsiniz. Bu, işlem hattının tekrarlanabilirliğini, şeffaflığını ve sürüm kontrolünü sağlar.
Sonuç
Bu rehberde, CentOS 7 üzerinde Jenkins’i adım adım kurmayı, temel yapılandırmalarını yapmayı ve ilk CI/CD projenizi oluşturmayı öğrendiniz. Jenkins, yazılım geliştirme süreçlerinizi otomatikleştirerek ekiplerin daha verimli çalışmasını, hataları erken aşamada tespit etmesini ve yazılımlarını daha hızlı ve güvenilir bir şekilde pazara sunmasını sağlayan paha biçilmez bir araçtır.
Jenkins’in sunduğu geniş eklenti yelpazesi ve esnek yapılandırma seçenekleri sayesinde, projenizin özel ihtiyaçlarına göre özelleştirilmiş ve güçlü CI/CD işlem hatları oluşturabilirsiniz. Bu başlangıç rehberi, Jenkins ile Continuous Integration ve Continuous Delivery dünyasına adım atmanız için sağlam bir temel oluşturacaktır.
Sıkça Sorulan Sorular (SSS)
Jenkins neden varsayılan olarak 8080 portunu kullanır?
8080 portu, genellikle web sunucuları veya uygulama sunucuları tarafından alternatif bir HTTP portu olarak kullanılır. Jenkins de bir web uygulaması olduğu için varsayılan olarak bu portu kullanır. Eğer bu port başka bir servis tarafından kullanılıyorsa, Jenkins’i farklı bir porta taşımanız gerekebilir.
Jenkins’i farklı bir porta nasıl taşırım?
Jenkins’in çalıştığı portu değiştirmek için CentOS 7’de genellikle /etc/sysconfig/jenkins dosyasını düzenlemeniz gerekir. Bu dosyadaki JENKINS_PORT değişkenini istediğiniz porta (örneğin 9000) ayarlayıp Jenkins servisini yeniden başlatmanız yeterlidir:
sudo sed -i 's/JENKINS_PORT="8080"/JENKINS_PORT="9000"/' /etc/sysconfig/jenkins
sudo systemctl restart jenkins
Portu değiştirdikten sonra güvenlik duvarı ayarlarınızı da yeni porta göre güncellemeniz gerektiğini unutmayın.
Jenkins’i root kullanıcısı olarak çalıştırmalı mıyım?
Hayır, Jenkins’i root kullanıcısı olarak çalıştırmak güvenlik riski taşır. Jenkins varsayılan olarak jenkins adında ayrıcalıksız bir kullanıcı ile çalışır. Bu, en iyi güvenlik uygulamalarından biridir. Jenkins’in ihtiyaç duyduğu tüm dizin ve dosyalara jenkins kullanıcısının erişim haklarının olduğundan emin olun.
Bir Jenkins işi neden başarısız oluyor?
Bir Jenkins işinin başarısız olmasının birçok nedeni olabilir:
- Konsol Çıktısını Kontrol Edin: İşin konsol çıktısı (Console Output), hatanın nedenini anlamak için en önemli kaynaktır. Genellikle hata mesajları burada açıkça belirtilir.
- Bağımlılıklar Eksik: Derleme veya test adımları için gerekli olan yazılımlar (Maven, npm, Python, Docker vb.) Jenkins sunucusunda veya agent’ta kurulu olmayabilir.
- Ortam Değişkenleri: Gerekli ortam değişkenleri doğru ayarlanmamış olabilir.
- Erişim İzinleri: Jenkins kullanıcısının belirli dosyalara veya dizinlere yazma/okuma izni olmayabilir.
- Kaynak Kodu Sorunları: Çekilen kodda derleme hataları veya test başarısızlıkları olabilir.
Jenkins’i HTTPS üzerinden nasıl erişilebilir yaparım?
Jenkins’in kendisi doğrudan HTTPS sağlamaz. Genellikle bu, bir ters proxy (reverse proxy) sunucusu (örneğin Nginx veya Apache) kullanılarak yapılır. Ters proxy, istemciden gelen HTTPS isteklerini alır, şifresini çözer ve isteği Jenkins’in HTTP portuna (varsayılan 8080) iletir. Ters proxy sunucusu aynı zamanda SSL sertifikalarını yönetir. Bu yapılandırma, hem güvenlik hem de daha esnek URL yönetimi sağlar.
