Takip et

Jenkins Nedir ve Neden Önemlidir?

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 edil

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

  1. Jenkins kontrol panelinde sol menüden “New Item” (Yeni Öğe) seçeneğine tıklayın.
  2. Projenize bir isim verin (örneğin: MyFirstCIProject).
  3. “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:

  1. “Git” seçeneğini işaretleyin.
  2. “Repository URL” alanına bir Git deposunun URL’sini girin (örneğin, https://github.com/jenkins-docs/simple-java-maven-app.git veya kendi örnek deponuzun URL’si).
  3. 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.

  1. “Poll SCM” seçeneğini işaretleyin.
  2. “Schedule” (Zamanlama) alanına bir cron ifadesi girin. Örneğin, her dakika kontrol etmek için kullanabilirsiniz. Daha gerçekçi bir senaryo için H/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.

  1. “Add build step” (Yapı adımı ekle) butonuna tıklayın.
  2. “Execute shell” (Kabuk komutunu çalıştır) seçeneğini seçin.
  3. “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.

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.
Mobil sürümden çık