Jenkins & SonarQube ve .Net Core uygulaması ile Kod analizi

Ertuğrul Şen
3 min readApr 25, 2021

Bir proje üzerinde çalışırken ve araştırma yaparken .net core uygulamalarının jenkins üzerinde derlenmesi, pipeline üzerine entegre edilmesi, Code Quality, Code Coverage bilgilerinin SonarQube üzerinde başarılı bir şekilde taranması ve yansıtılması gibi bir çok soru ile karşılaştım özellikle sonar üzerine quality bilgim yansıyor fakat coverage bilgisi neden yansımıyor gibi sorular. Bu yüzden bu konularla ile ilgili bir demo yapmak istedim.

Dostlar gelelim örnek çalışmamıza; Çalışan bir .net core uygulamanız var ve bu uygulama için unit testlerinizi yazdığınız test uygulaması mevcut. Öncelikli olarak test uygulamanız da aşağıda ki nuget package’lar eklenmiş olmalı.

Bu paketler yüklü olmadığı taktirde uygulamamız için sonar taramaları sonuçsuz kalacaktır.

Şimdi gelelim uygulamamız için dockerfile oluşturmaya, .net core uygulaması derleyip çalıştıracağımız için jenkins üzerinde ayağa kaldıracağımız cluster içerisinde dotnet komutlarını çalıştırabilmemiz gerekiyor.

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
WORKDIR /app

COPY NuGet.config ./
COPY appName/*.csproj ./
RUN dotnet restore


COPY appName/. ./
RUN dotnet publish -c Release -o out


FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app
COPY --from=build-env /app/out .
EXPOSE 5000
ENTRYPOINT ["dotnet", "appName.dll"]

Dockerfile’da hazır olduğuna göre şimdi SonarQube tarafına geçip uygulmamız için sonarqube üzerinde yeni proje oluşturup, Access token generate edeceğiz.

Uygulamamızı oluşturduktan sonra hangi teknoloji için hangi komutları çalıştıracağımızı SonarQube bizim için çıkartıyor. Üretmiş olduğumuz key’i bir yere not edelim.

Jenkins üzerine geçip yeni bir pipeline projesi oluşturuyorum bu proje için örnek bir pipeline yazacağım. Git üzerinden uygulamamızı çeken ve sonar taramasını yapıp build alan örnek bir pipeline.

Pipeline’mız hazır sizde bu şekilde basit bir pipeline oluşturabilirsiniz. SonarQube stage adımlarında çalıştırdığımız komutlar başarılı bir şekilde çalıstırıldığı zaman uygulamamıza ait code quality ve code coverage bilgisi başarılı bir şekilde sonar üzerinde yansıyacaktır..

Jenkins kullanmadan da sonar taramalarını yapabiliriz

Jenkins kullanmadan manuel olarak SonarQube taraması yapmak isterseniz uygulmanızın bulunduğu path üzerinde bir komut satırı açın ve aşağıdaki komutları sırayla çalıştırabilirsiniz.

  • dotnet test AppNameUnitTest/AppNameUnitTest.csproj /p:CollectCoverage=true /p:CoverletOutputFormat=opencover
  • dotnet sonarscanner begin /k:”keyName” /d:sonar.host.url=”localhost:6080" /d:sonar.login=”generatedKey” /d:sonar.cs.opencover.reportsPaths=”..\coverage.opencover.xml” /d:sonar.coverage.exclusions=”**Tests*.cs”
  • dotnet build /t:Rebuild
  • dotnet sonarscanner end /d:sonar.login=”generatedKey”

İlk komut ile projemizde var olan testlerin çalıştırılması ve uygulamamıza ait coverage bilgisnini xml dosyası üzerinde oluşturulması sağlanıyor. Eğer yazımın başında bahsetmiş olduğum nuget package üzerinde GeneratedReport kütüphanesi projenizde ekli değilse bu xml oluşmayacaktır. Bir diğer adımda ise sonar taramasını yaptırıyoruz ve üretmiş olduğumuz CoverageReport dosyasının path’ni feature olarak ekleyerek bu komutu çalıştırıyoruz son olarak dotnet build ve sonarscanner end komutları ile sonuçları sonarqube üzerinde publish edildiğini görebilirsiniz.

Teşekkürler :)

--

--