NTT DATA Business Solutions
Honey Badgers | Ağustos 27, 2020

"Jenkins ve SonarQube" ve DevOps Faydaları

Geliştirme (Development) süreçlerinin verimli ve etkili olarak sağlanması, kod bakımı kalitesi ölçümü, geliştirme ve bakım süreçlerini otomatikleştirmesi ve ayrıca Build, Test ve Deployment işlemlerinin en kolay şekilde yönetilmesine katkı sağlaması açısından Jenkins ve SonarQube süreçleri büyük önem taşımaktadır.

Jenkins ve SonarQube’un Faydaları

• Geliştirme-Development yapan herkesin kullanabileceği bir yapı
• Sürekli teslimat (continuous delivery)
• Sorunlara daha hızlı çözümler
• Ürün özelliklerinin daha hızlı teslimi
• Daha istikrarlı, stabil çalışan sistemler
• Sorun gidermekten daha çok, iyileştirme için zaman ayırma
• Jenkins, birçok topluluktan destek alan açık kaynak kodlu bir araç olup, kurulumu basit ve anlaşılırdır.
• Birçok ihtiyaca yönelik 1000’den fazla eklentisi mevcuttur.
• Java’da yazılmış olması itibari ile neredeyse tüm platformlarda çalışabilir
• Okunabilir, bakımı kolay, dokümante edilmiş, karmaşıklığı düşük kod olması.
• Kodlama prensiplerine veya standartlarına uygun, performans yüksek kod
• Güvenlik açıkları giderilmiş ve hata potansiyeli düşük kod

Uygulamaya Geçirilişi: Jenkins ve SonarQube server kurulduktan ve gerekli konfigürasyonlar oluşturulduktan sonra kodlar Jenkins’te pipeline aracılığıyla hem test edilir hem analiz edilir hem de uygulamaya alınır.

Kim, Neden Kullanmalı?

Development, süreci yöneten herkesin kullanması gereken bir yapı. Hem sistemi otomatikleştiriyor hem de hata oranını düşürüp kaliteyi artırıyor. Ayrıca kolay bir şekilde otomatize edilmiş bir şekilde deployment yapılabiliyor.

Jenkins ve SonarQube’un Farkları

Jenkins açık kaynak kodlu olduğundan community tarafından sürekli gelişime açık. 1000’den fazla eklenti paketi olması en güçlü özelliklerinden bir tanesidir. Jenkins’e benzer olarak Bamboo, TeamCity ve Travis gibi CI araçları bulunuyor. Bamboo Atlassian’a ait olup diğer Atlassian uygulamaları ile optimize çalışması en önde gelen özelliğidir. Ayrıca, TeamCity de JetBrains’e ait bir araçtır.

DevOps nedir?

Yazılım geliştiriciler (Dev) ve sistem yöneticileri (Ops) arasındaki iletişimi, iş birliğini ve bütünleşmeyi (entegrasyonu) vurgulamayı esas edinmiştir. Şirketlerin IT hizmetleriyle beraber yazılım ürünlerinin de daha hızlı ve daha sık teslim edilebilir (continuous delivery) olmasına yardımcı olmayı amaçlamaktadır.

DevOps Avantajları

• Sürekli teslimat (continuous delivery)
• Düzeltilecek sorunların daha az karmaşık olması
• Sorunlara daha hızlı çözümler
• Ürün özelliklerinin daha hızlı teslimi
• Daha istikrarlı, stabil çalışan sistemler
• Sorun gidermekten daha çok, iyileştirme için zaman ayırma

Continuous Integration: CI, geliştirme ekiplerini küçük değişiklikleri uygulamak ve kodun sürüm kontrol havuzlarına sık sık kontrol edilmesini sağlayan kodlama felsefesi ve uygulama dizisidir. CI’ın teknik hedefi, uygulamaları oluşturmak, paketlemek ve test etmek için tutarlı ve otomatik bir yol oluşturmaktır. Entegrasyon sürecindeki tutarlılık ile ekiplerin kod değişikliklerini daha sık yapma olasılığı daha yüksektir, bu da daha iyi bir takım çalışmasına ve yazılım kalitesine yol açar.

CI Tools:

• Jenkins
• Bamboo (Atlassian)
• TeamCity (JetBrains)
• Travis CI
• Circle CI

Continuous Delivery / Deployment: CI’ın bittiği yerlerde CD başlıyor. CD, uygulamaların seçilen altyapı ortamlarına teslim edilmesini otomatikleştiriyor. Ekiplerin çoğu, geliştirme ve test ortamları gibi, üretimden farklı ortamlarla çalışır ve Continuous Delivery, kod değişikliklerinin otomatik bir şekilde yürütülmesine olanak sağlıyor. CD uygulayan ekipler, günlük hatta saatlik deployment geçebilirler.

Pipeline: Bir işin uygulanmasından sonra otomatik olarak diğer iş(ler)in başlatılması sürecidir. CI/CD içinde pipeline kullanımı integration ve deployment arasında gerekli işlemlerin yapılmasını sağlıyor.

CI/CD İş Akışı

Jenkins ve SonarQube

Jenkins

Açık kaynak kodlu Continuous Integration sağlayan otomasyon aracıdır. Java tabanlıdır. Deploy, Build ve Test işlemlerinin otomatik bir şekilde gerçekleşmesini sağlar.

 

Jenkins ve SonarQube

Jenkins Avantajları

• Jenkins, birçok topluluktan destek alan açık kaynak kodlu bir araçtır
• Kurulumu basit ve anlaşılır
• Birçok ihtiyaca yönelik 1000’den fazla eklentisi mevcut
• Java’da yazılmış olması itibari ile neredeyse tüm platformlarda çalışabilir

SonarQube

SonarQube statik kod analizi yapan bir araçtır. Java tabanlıdır. Birçok programlama dilini desteklemektedir. Analiz yapıldıktan sonra kodların iyileştirilmesi, açıkların kapatılması ve coverage gibi raporları detaylı bir şekilde çıkarmaktadır. Jenkins ile entegre olduğunda yapılan her Git push talebinden sonra deploy olacak kodun kalitesini ölçer.

SonarQube Avantajları

• Okunabilir kod
• Bakımı kolay kod
• Dokümante edilmiş kod
• Karmaşıklığı düşük kod
• Kodlama prensiplerine veya standartlarına uygun kod
• Performanslı kod
• Güvenlik açıkları giderilmiş kod
• Hata potansiyeli düşük kod

SonarQube Workflow

sonarqube

Son olarak Jenkins ve SonarQube’e ait bazı UI örneklerini sizlerle paylaşacağım. Aşağıdaki görselde Jenkins’in arayüzü bulunuyor. Farklı projelere ait farklı pipeline‘ları görebilirsiniz.

Jenkins

Bir sonraki görselde Jenkins sunucusunun ayar ekranını bulunmakta.

 

 

Aşağıdaki görselde bir pipeline’ın aşama aşama ne kadar sürede tamamlandığı ve başarılı olup olmadığını inceleyebilirsiniz.

 

Jenkins

 

SonarQube sunucunun arayüzü görseldeki gibidir. Farklı projelerin kod kalitesi bu UI‘dan kontrol ediliyor.

 

 

Kendi framework kodlarımıza ait aldığımız bir kod kalite örneğini aşağıda inceleyebilirsiniz.

 

SonarQube

 

Herkese iyi kodlamalar dileriz.