Gitlab-SonarQube Entegrasyonu

SefaMelek
KoçSistem
Published in
4 min readOct 27, 2023

Merhabalar geçtiğimiz günlerde dotnet ile yazılan bir proje için Gitlab-Sonarqube entegrasyonu yapma ihtiyacım oldu. Burada çözüm bulmak için oldukça zaman harcadım ve işe yarar kaynak bulmakta çok zorluk çektim.

Ben de bu sorunun çözümünü bulduktan sonra sizlerle de paylaşmak istedim. Dilerseniz başlayalım;

  • İlk olarak, Sonarqube sunucusuna giriş yapın
  • Üst menüden “Administration” sekmesini bulun ve açın.
  • “Projects Management” altında “Manage Projects”e tıklayın.
  • Projenizi bulup seçin ve “Project Settings” sekmesini açın.
  • “Project Information” alanına tıkladıktan sonra altta “Project Key” bilgisini kopyalayın ve bir yere kaydedin. Birazdan .gitlab-ci.yml dosyanızda kullanacağız.
  • Ardından sağ üstten my account seçerek hesabınıza gidin
  • Açılan ekranda security tabını seçerek yeni bir token oluşturun ve token bilgisini kaydedin

SonarQube tarafındaki yapacağımız işlemler bu kadar. Şimdi Gitlab’e geçelim;

  • GitLab projenizde bir .gitlab-ci.yml dosyası olduğundan emin olun. Eğer yoksa, projenizin kök dizininde .gitlab-ci.yml adında bir dosya oluşturun.
  • Gitlab için biraz önce variables’lar eklememiz gerekmekte bunun için gitlab linkinize gidip gitlab projenizi seçin
  • Proje açıldıktan sonra sol menüden settings kısmını açıp altındaki CI/CD Seçeneğine tıklayın
  • Açılan ekranda Variables seçeneğinin yanındaki expand butonuna tıklayın
  • Variables alanında daha önce kaydetmiş olduğumuz değişkenleri burada tanımlayacağız. Bunun için add variable butonuna tıklayın
  • SONAR_PROJECT_KEY bilgisini örnek olarak tanımlıyoruz. Burada dikkat edilmesi gereken kısım protect variable seçeneği seçili olmamalı token için ise mask variable seçeneğini de seçmelisiniz. SONAR_PROJECT_KEY kısmında aldığınız key bilgisi, SONAR_HOST_URL kısmında sonar url bilgisini ,SONAR_TOKEN
  • .gitlab-ci.yml dosyanızın içine aşağıdaki gibi bir temel yapı ekleyin:
image: mcr.microsoft.com/dotnet/sdk:7.0
stages:
- build
- test
- sonarqube
build:
stage: build
before_script:
- "dotnet restore CompanyName.ProjectName.Development.sln"
script:
- "dotnet build CompanyName.ProjectName.Development.sln"
test:
stage: test
script:
- 'dotnet test CompanyName.ProjectName.Development.sln --filter FullyQualifiedName!~UI.Tests --test-adapter-path:. --logger:"junit;LogFilePath=..\artifacts\{assembly}-test-result.xml;MethodFormat=Full;FailureBodyFormat=Verbose"'
artifacts:
when: always
paths:
- ./**/*test-result.xml
reports:
junit:
- ./**/*test-result.xml
sonarqube:
stage: sonarqube
image: mcr.microsoft.com/dotnet/sdk:latest
variables:
SONAR_PROJECT_BASE_DIR: "$CI_PROJECT_DIR"
script:
- export PATH="$PATH:/root/.dotnet/tools"
- dotnet sonarscanner begin /k:"$SONAR_PROJECT_KEY" /d:sonar.login="$SONAR_TOKEN" /d:sonar.host.url="$SONAR_HOST_URL"
- dotnet build CompanyName.ProjectName.Development.sln
- dotnet sonarscanner end /d:sonar.login="$SONAR_TOKEN"
tags:
- sonarqube
allow_failure: true

YAML dosyası üç aşamadan oluşuyor: build, test ve sonarqube. İşte adım adım bu aşamaları anlatalım:

Build Aşaması

  • İlk olarak, build aşaması başlar ve dotnet restore komutuyla solution dosyasının bağımlılıkları yüklenir.
  • Ardından, dotnet build komutuyla çözüm dosyası derlenir.

Test Aşaması

  • test aşamasında, dotnet test komutu kullanılarak testlerin çalıştırılması sağlanır.
  • Test sonuçları, junit formatında raporlanır ve artifacts altında saklanır.

SonarQube Aşaması

  • Son olarak, sonarqube aşaması başlar ve mcr.microsoft.com/dotnet/sdk:latest imajı kullanılır.
  • SONAR_PROJECT_BASE_DIR değişkeni ayarlanır.
  • dotnet sonarscanner begin komutuyla SonarQube analizi başlatılır. Bu komut, SONAR_PROJECT_KEY proje anahtarını, sonar.login olarak belirtilen giriş belirteciyle birlikte kullanır.
  • Ardından, solution dosyası yeniden derlenir (dotnet build).
  • Son olarak, dotnet sonarscanner end komutuyla SonarQube analizi sonlandırılır ve sonar.login belirteci kullanılarak oturum kapatılır.
  • Bu aşama sonarqube etiketiyle etiketlenir ve hata durumuna izin verilir (allow_failure: true).

Bu YAML dosyası, GitLab CI/CD iş akışınızda SonarQube analizini entegre etmek için kullanılabilir. İş akışınızın geri kalanı bu YAML dosyasının üzerine inşa edilebilir.

Son olarak kaydedip pipeline’ı çalıştırıp sonarqube aşaması başarıyla tamamlandıktan sonra sonarqube’a gidip ilgili projeyi bularak son çalışmasında elde sonuçları görebilirsiniz.

Umarım faydalı olmuştur.

Bir sonraki konuda görüşmek üzere

Referanslar:

--

--

SefaMelek
KoçSistem

QA at KoçSistem | Founder of YouTube @hafifmuhendis channel