SonarQube Kendi Pluginimizi Oluşturalım 1

Merhaba arkadaşlar, bu yazımda size sonarqube icin plugin nasıl geliştirileceğinden bahsedeceğim. 1 ay öncesine kadar SonarQube konusunda hiç tecrübem yoktu ve sadece ismini ve ne iş yaptığını biliyordum. Son 1 aydır SQ plugin geliştirmeye çalışıyorum. Bu arada SonarQube için SQ kısaltmasını kullanacağım.

Önce SQ nedir biraz bundan bahsedeyim. Örnek üzerinden gideceğim. Farklı yaşlarda developerlardan oluşan bir geliştirme takımınız var. Büyük bir proje geliştirmeye başlayacaksınız. Öncelikle bazı standartlar belirlersiniz ki developerlar o standartlara uygun kod yazsın ve kodda ilerde maintenance için bir tutarlılık olsun. Yani mesela bir fonksiyon şu kadar satırı geçemez. Değişken kucuk harfle başlar buyuk harfle devam eder filan gibisinden. Yada complexity olarak bakarsak olaya. Bir fonksiyon en fazla şu kadar karmaşık olur gibi. Bunları toparladığımız ve bunlara uyarak projeyi geliştirdigimiz zaman projedeki kaliteyi artırmış oluruz. SQ de bunu sağlıyor aslında. Herşey otomatik olarak gerçekleşip sizin önünüze rapor olarak çıktılar sunuluyor. Yani kim güzel kod yazıyor buradan görebiliyorsunuz :)

SQ Server kurulumunu anlatmayacağım. Gayet basit anlatımı kendi installation guide içerisinde var.

SQ Server kurulumunu tamamladıktan sonra browserdan SQ uygulamasını açıyoruz ve biraz inceleyoruz. Şimdi  Arayüzde bilmemiz gereken neler var bunlara bakalım biraz.

1.Rules: Belirtilen dil için kurallar dizisidir. Yani üstte soyledigim gibi fonksiyon şu kadar satır kodu geçemez gibisinden.
2.Issues: Belirtilen kurallara aykırı durumlar proje üzerinde tesbit edildiği zaman SQ ün oluşturdugu uyarılardır. Yani şu kurala aykırı davranılmış şu satırda gibisinden mesajlar verir.
3.Metrics: Bunlar projenin genel anlamdaki değerleridir. Yani totalde kaç satır kod var ne kadar comment var. Karmaşıklıgı nasıl.
4.Quality Profiles: Projenin kalite sorumlusu tarafından belirlenen kuralları içerisinde toplayan kümelerdir. Mesela complex diye bir profile oluşturup buraya fonksiyonun uzunlugu 5 satırdan fazla olamaz dedim. Birde normal diye profile oluşturup aynı rule için uzunluk 10 dan fazla olamaz dedim. Yani Bir projeyi belirledigimiz Quality Profile lara gore SQ değerlendirmesine sokabiliriz.

Birazda google dan bilgi almanızı oneririm. Yazıda herhangi bir bilgi hatası farkederseniz lütfen bana iletin. Bende yeni başladım SQ işlerine. O yüzden hatalarım olabilir.

Plugin geliştirmek için java bilmeniz gerekiyor. Başkada birşey bilmenize gerek yok :) En son SQ 5.6 versiyonu çıktı. Bu versiyon için plugin geliştirebilmek icin Java8 ve en düşük versiyon olarak Maven 3.1 e sahip olmanız gerekiyor. Ben SQ 5.4 versiyonu için plugin geliştirdiğim için bu yazıdada 5.4 için anlatım yapacağım.

Api değişikliklerine şuradan göz atabilirsiniz.
http://docs.sonarqube.org/display/DEV/API+Changes

Perl için plugin geliştirmeye çalışacağız. Aslında lexical analiz kısmını filan yapmayacağız dilin. Yani perl koduna hiç dokunmayacağız. External bir program sayesinde analiz edilmiş kodu SQ ekranlarında göstermeye çalışacağız. Yani elimizde hangi dosyanın kaçıncı satırının hangi kurala aykırı olduğu mevcut.  Şuradaki örnekten gideceğim https://github.com/otrosien/sonar-perl.

Yeni bir Java Maven projesi açtık ve pluginimizi yazmaya başlıyoruz.

  • Öncelikle pom.xml i duzenlemeyle başlayalım. Daha sonra kafa karışmasın.

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<sonar.version>5.4</sonar.version>
<sonarpackaging.version>1.16</sonarpackaging.version>
<junit.version>4.10</junit.version>
<commonslang.version>2.6</commonslang.version>
</properties>

<dependency>
<groupId>org.sonarsource.sonarqube</groupId>
<artifactId>sonar-plugin-api</artifactId>
<version>${sonar.version}</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>${commonslang.version}</version>
</dependency>

<build>
<plugins>
<plugin>
<groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
<artifactId>sonar-packaging-maven-plugin</artifactId>
<version>${sonarpackaging.version}</version>
<extensions>true</extensions>
<configuration>
<!– the entry-point class that extends org.sonar.api.SonarPlugin –>
<pluginClass>com.onrkrdmn.sonar.plugin.PerlPlugin</pluginClass>
<pluginDescription>perl plugin</pluginDescription>
<!– advanced properties can be set here. See paragraph “Advanced Build
Properties”. –>
</configuration>
</plugin>
</plugins>
</build>

  • Packaging kısmını sonar-plugin olarak değiştirmeyi unutmayın. Yoksa proje derlenir ama SQ plugin olarak görmez projeyi.

<packaging>sonar-plugin</packaging>

Bir sonraki yazıda gorusmek uzere.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir