İçerik
Bu yazıda SonarQube kurulumu, SonarQube & Jenkins entegrasyonunu ve SonarQube ile ilgili tanımları bulabileceksiniz.
SonarQube Nedir?
SonarQube, 20’den fazla programlama dilinde hataları, kod analizlerini ve güvenlik açıklarını tespit etmek için kodun statik analizi ile otomatik incelemeler yapar. Kod kalitesinin sürekli denetimi için Sonar Source tarafından geliştirilen açık kaynaklı bir araçtır. SonarQube, yinelenen kod, kodlama standartları, birim testleri, kod kapsamı, kod karmaşıklığı, yorumlar, hatalar ve güvenlik açıkları hakkında raporlar sunar.
Jenkins ve SonarQube’un Önemi
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.
Daha önce Jenkins kurulumunu yapmadıysanız bu yazım üzerinden detaylara ulaşabilirsiniz. Ayrıca Jenkins ile Gitlab entegrasyonu konusuna da bu yazım üzerinden ulaşabilirsiniz.

Kubernetes Üzerinde SonarQube Kurulumu
Helm paket yöneticisini kurma & repo ekleme
CLI üzerinde Helm paket yöneticisi kurulu değilse bu yazım üzerindeki komutu uygulayarak basitçe kurulum yapabilirsiniz.
Ardından Bitnami repomuzu ekleyelim ve update edelim.
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
Namespace üzerine SonarQube kurulumunu başlatma
SonarQube adında bir namespace oluşturalım.
kubectl create ns sonarqube
Kurulumu başlatmadan önce ingress.hostname, sonarqubeUsername, sonarqubePassword mutlaka değiştirin! Servis tipinde loadbalancer kullanıyorsanız aynı şekilde “LoadBalancer” olarak servis tipini değiştirebilirsiniz.
Helm komutu ile kurulumu başlatalım.
helm upgrade --install sonarqube \
--set ingress.enabled=true \
--set sonarqubeUsername=admin \
--set sonarqubePassword=sezer.test \
--set service.type=ClusterIP \
--set ingress.pathType=Prefix \
--set ingress.ingressClassName=nginx \
--set ingress.hostname=sezersonarqube.test \
bitnami/sonarqube --namespace sonarqube
SonarQube Ayarları
Web arayüzüne giriş
Kurulum sonrası hosts dosyanıza veya alan adınız için DNS sunucunuza kaydı ekledikten sonra tarayıcıdan ulaşabilirsiniz. Kullanıcı girişi yapalım. Helm kurulumunda bilgilerimizi belirtmiştik.

SonarQube üzerinde token oluşturma
Arayüzden My Account > Security > Generate Tokens kısmından istediğiniz başlıkla “token” oluşturun.

Oluşturulan “token” kodunu kopyalayıp saklayalım.

SonarQube üzerinde proje oluşturma
Projects > Add Project > Manually adımlarını izleyip yeni bir proje oluşturalım.

Jenkins Ayarları
SonarQube Server’ın Jenkins’e eklenmesi
Jenkins’i Yönet > Sistem Konfigürasyonunu Değiştir > SonarQube servers sekmesine gidin. Ayarlarınızı aşağıdaki gibi yaptıktan sonra Add > Jenkins adımını takip ederek token eklemesi yapın. Name kısmındaki değeri aynı yapın. Daha sonra Jenkinsfile üzerinden bu isimle işlem başlatacağız.

Daha önce SonarQube üzerinden oluşturduğumuz token’i Secret kısmına yazın ve Add butonuna basın.

İşlemlerinizi bitirdikten sonra “Kaydet” butonuna basmayı unutmayın.

SonarQubeScanner’in Jenkins’e eklenmesi
Jenkins’i Yönet > Global Tool Configuration adımlarını takip ederek “SonarQube Scanner” kısmına gidin. Ardından SonarQube Scanner Installations… butonuna tıklayın. Ayarlarınızı aşağıdaki gibi yaptıktan sonra “Save” butonuna basıp kaydedin.

Jenkinsfile Dosyası
Asıl komutlarımızı gerçekleştirecek olan pipeline komutları aşağıdaki gibi olmalıdır.
Komut içerisinde bulunan -Dsonar.projectKey=test -Dsonar.projectName=test ve -Dsonar.projectVersion=1.0 komutlarını kendinize göre değiştirmeyi unutmayın.
pipeline {
environment {
def scannerHome = tool 'SonarQubeScanner'
}
agent any
stages {
stage('SonarQube Code Analysis') {
steps {
withSonarQubeEnv('sonarqube') {
sh "${scannerHome}/bin/sonar-scanner -Dsonar.projectKey=test -Dsonar.projectName=test -Dsonar.projectVersion=1.0"
}
}
}
}
}
Jenkins Pipeline Webhook Sonrası Sonuç

SonarQube Üzerinde Tarama Sonucu
