Jenkins CI/CD Pipeline Uygulaması

Vakkas Sahin
Turk Telekom Bulut Teknolojileri
4 min readMay 25, 2023

Yazılım geliştirme dünyasıyla ilgileniyorsanız, CI/CD kavramına mutlaka denk gelmişsinizdir. Modern geliştirme, otomasyon araçları ve dağıtım gibi uygulamalarda sıklıkla kullanılır. Dolasıyla bu terimin ne olduğunu, hangi işlerde kullanıldığını bilmeniz, süreçleri daha hızlı bir şekilde yönetmenizi sağlar. Bu yazıda, CI/CD uygulamalarından bahsedilecek ve örnek bir Jenkins Pipeline oluşturulacaktır.

CI/CD Pipeline Nedir?

CI/CD Pipeline kavramı, Sürekli Entegrasyon ve Sürekli Dağıtım boru hattını (Pipeline) ifade eder. Bu bölüme geçmeden önce Pipeline teriminin ne olduğuna bakalım.

Pipeline, hızlı yazılım versiyonları yapmak için birbirini takip eden olay veya görevlere verilen isimdir. Örneğin yapmanız gereken bir görev var. Bu görev 3 farklı aşamadan oluşuyor, siz her aşamayı tamamladığınızda, sonraki göreve geçişiniz Pipeline örneğidir.

Pipeline konusunu açıkladığımıza göre CI/CD kavramının ne olduğuna bakalım.

Sürekli entegrasyon (CI), yazılım geliştirme sürecindeki bir yaklaşımdır. Bu yaklaşıma göre, geliştiricilerin sık sık ve düzenli aralıklarla kodlarını paylaşması ve birleştirmesi gerekmektedir. Bu şekilde, ekip üyelerinin yaptığı değişiklikler sürekli olarak bir araya getirilir ve çakışmalar veya hatalar daha erken tespit edilebilir. CI süreci genellikle otomatik bir derleme (build) süreci ve testlerin çalıştırılması gibi adımları içerir.

Sürekli dağıtım (CD), yazılım geliştirme sürecinin bir sonraki aşamasıdır. Bu aşamada, yazılımın üretim ortamlarına otomatik olarak dağıtılması ve kullanıma hazır hale getirilmesi hedeflenir. CD süreci genellikle otomatik dağıtım, konfigürasyon yönetimi ve otomatik testler gibi adımları içerir. Böylece, yazılımın hızlı bir şekilde kullanıcılara sunulması ve geri bildirimlerin alınması sağlanır.

CI/CD süreci, yazılım geliştirme ekibine sürekli geri bildirim sağlar, hataların erken tespit edilmesine ve düzeltilmesine olanak tanır, yazılımın hızlı bir şekilde yayımlanmasını sağlar ve genel olarak geliştirme sürecinin verimliliğini artırır. Jenkins gibi otomasyon araçları, CI/CD süreçlerinin kolaylaştırılmasına ve yönetilmesine yardımcı olur.

Jenkins Nedir?

Jenkins, yazılım projelerinin oluşturulması ve test edilmesi için kullanılan açık kaynaklı bir otomasyon aracıdır. Bu araç, geliştiricilerin projeye yapılan değişiklikleri entegre etmesini daha kolay hale getirir. Jenkins, eklentilerin yardımıyla Sürekli Entegrasyon’u gerçekleştirir.

Esnekliği, açık kaynak olması, eklenti yetenekleri ve kullanım kolaylığı nedeniyle, Jenkins CI/CD Pipeline oluşturmak için en uygun seçenektir.

Gerekli tanımlamaları yaptıktan sonra ilk uygulamamızı oluşturalım. Bunun için http://localhost:8080/ adresine giderek Jenkins arayüzüne bağlanalım. Daha sonra Jenkins’i yönet kısmından şekilde de görüldüğü gibi projemiz için gerekli olan credentials ekleyelim.

Credentials düzenlemelerine geçmeden önce yapacağımız uygulamadan bahsedeyim. Private key’i olan bir kullanıcının SSH agent yardımıyla kendi localine Jenkins uygulamasını bağlayacak ve github üzerinden pull edilecek hello-world uygulamasıyla, oluşturulan agenti test edeceğiz.

Bilgisayarımızdan Powershell uygulamasını yönetici olarak çalıştıralım. Gelen ekranda

`Get-WindowsCapability -Online | Where Name -like ‘OpenSSH*’`

komutunu yazarak OpenSSH dosyalarının yüklü olup olmadığını kontrol ediniz.

Uygulamalar yüklü değilse aşağıdaki komutları yazarak yüklemeleri yapabilirsiniz.

Set-Service -Name sshd -StartupType 'Automatic'
Start-Service -Name sshd

Daha sonra powershell ekranında agent için gerekli keyleri “ssh-keygen” komutu ile oluşturabilirsiniz. Yerel disk C klasörünün içindeki kullanıcı dosyasında .ssh uzantılı dosyayı açarak oluşturulan keylere ulaşabilirsiniz.

Authorized_keys klasörü listede görünmüyorsa id_rsa.pub dosyasını kopyalayıp authorized_keys olarak değiştirebilirsiniz. Buradaki private key sayesinde artık SSH yapmak için hazırız.

Şimdi Jenkins masterına SSH eklemek için credentials düzenlemelerine geçelim. Burada kind kısmını görseldeki gibi SSH Username with private key seçelim. Scope kısmı global olarak kalabilir, ID kısmına istediğinizi yazabilirsiniz. Username bilgisi içinse id_rsa klasörünün — ->Özellikler — ->Güvenlik kısmından görüntüleyebilirsiniz.

Daha sonra oluşturduğumuz id_rsa klasörünü notepad yardımıyla görüntüleyerek içerisindeki private key bilgisini enter directly kısmından şekildeki yere yapıştırın ve oluştur butonuna tıklayın.

Oluşturduğunuz credentials şekildeki gibi görünecektir ekranınızda.

Şimdi bu credentialsı kullanmak için bir agent oluşturalım. Jenkins’i yönet kısmından yeni bir node ekleyelim.

Açılan ekranda name bilgisini girdikten sonra herhangi bir root directory verebilirsiniz. Ben c klasöründe oluşturduğum Jenkins dosyasını dizin olarak verdim. Launch method kısmında Launch agent via SSH seçeneğini işaretleyin. Host bilgisini de girdikten sonra görseldeki gibi kaydedin.

Agent kurulumunu da yaptığımıza göre Pipeline oluşturabiliriz. Bunun için kontrol merkezinden yeni öğe oluştur seçeneğine tıklıyoruz. Ardından projemize adını vererek pipeline ifadesini seçip, ok diyoruz.

Projede github üzerinden kodu çekeceğimiz için script kısmına gelelim. Hello world dosyasını açalım ve gerekli kodlarımızı yazalım.

bat 'rm -rf simple-maven-project'
bat 'git clone https://github.com/vakkassahin/simple-maven-project.git'
bat 'cd simple-maven-project && mvn -DskipTests clean'
bat 'cd simple-maven-project && mvn -DskipTests compile'

Düzenlemeleri yaptıktan sonra kaydedip, “Şimdi yapılandır” seçeneğine tıklayalım. Daha sonra console output diyerek bağlantınızı ve projenin çıktılarını gözlemleyebilirsiniz.

Başarılı Çıktı

Siz de bu adımları kullanarak Jenkins arayüzünde Github projesini localinize çekerek clean, compile işlemlerini gerçekleştirebilir ve agent kurulumlarını yapabilirsiniz.

--

--