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.

Sonarqube kurulumu

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.

image

SonarQube üzerinde token oluşturma

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

image 12

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

image 3

SonarQube üzerinde proje oluşturma

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

image 4

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.

image 5

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

image 7

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

image 8

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.

image 9

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ç

image 10

SonarQube Üzerinde Tarama Sonucu

image 11