Tutorial Implementasi Code Quality Check dengan SonarQube dan Jenkins pada Project Spring Boot (Part I)

Septian Reza Andrianto
6 min readJun 10, 2023

--

Hallo semuanya, bagaimana kabarnya? Semoga sehat selalu ya.
Senang akhirnya bisa kembali nulis lagi nih, disesi kali ini saya mau share tentang implementasi sonarQube yang terintegrasi dengan Jenkins pada project Java Spring Boot.

Dalam proses pengembangan aplikasi kita tentunya menginginkan aplikasi yang berkualitas, yang jauh dari bugs code maupun kerentan dalam sistem yang kita kembangkan, disini saya menggunakan sonarqube sebagai tool untuk melakukan inspeksi code yang telah kita tulis.

Kenapa harus sonarqube?
Karena menurut saya fitur disonarqube lengkap, kita dapat melihat bugs, vulnerabilty, code smell, coverage, dll.

Yuk langsung saya kita ketahapan implementisinya, disini saya menggunakan project spring boot 3, kalian bisa clone projectnya https://github.com/septianrezaandrianto/rnd-spring-boot-3.

Pada project tersebut saya sudah memprovide API, dan beberapa unit testing menggunakan jUnit5. Yang terdapat pada package test.

Untuk dependency yang kita perlukan adalah jacoco agar dapat memberikan report dari unit test yang telah kita buat. Kita bisa copy dependency disini https://mvnrepository.com/artifact/org.jacoco/jacoco-maven-plugin

Jika sudah paste kedalam file pom.xml

Paste juga plugin tersebut kedalam file pom.xml

<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.7</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<!-- attached to Maven test phase -->
<execution>
<id>report</id>
<phase>verify</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>sonar-project.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>

<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.7.0.1746</version>
</plugin>

Jika sudah mari kita reload kembali projectnya, dengan cara klik kanan pada file pom.xml -> maven -> reload project, disini saya menggunakan IntelliJ IDE.

Jika sudah selanjutnya mari kita running sonarqube menggunakan docker, disini saya menggunakan cmd, kemudian tuliskan command docker run -d — name sonarqube -p 9000:9000 -p 9092:9092 sonarqube

Jika sudah coba kita cek containernya apakah statusnya sudah up atau belum, dengan command docker ps, Jika terdapat output seperti gambar diatas itu artinya containernya sudah up.

Selanjutnya kita akses sonarqubenya melalui browser, dengan mengetikan http://localhost:9000

Jika muncul page Log in to SonarQube, artinya sonarqube sudah run dengan sempurna, selanjutnya kita coba login dengan username : admin dan password : admin, sebagai default loginnya.

Jika sudah login biasanya kita di suggest untuk update password, silahkan teman-teman isi new password dan confirm password dengan password terbaru, disini saya update password menjadi admin2. Jika sudah langsung saya tekan button update.

Jika sudah kita akan diarahkan ke page ini, disini saya akan create project menggunakan Manually

Dan kita akan diarahkan ke page ini, disni isi project display name dan project key dengan nama rnd-springboot-3.0 (Kita bisa sesuaikan dengan nama yang kita mau), kemudian saya pilih master sebagai branchnya. Jika sudah langsung saja tekan tombol set up.

Jika sudah kita akan didirect ke page dibawah ini, untuk menganalisa projectnya saya akan pilih Locally

Jika sudah kita akan didirect ke page dibawah ini, kita bisa sesuaikan token name dan expire in, sesuai dengan keinginan kita, kemudian langsung saja tekan button Generate

Jika sudah kita akan diberikan token dari project kita, selanjutnya kita tekan saja button continue

Dan kita akan diarahkan ke page seperti gambar dibawah ini, kita kana menggunakan config tersebut, untuk di file sonar-project.properties kita.

Selanjutnya kita buat sebuah file dengan nama sonar-project.properties, didalam project spring boot kita.

Dan disini kita akan masukan config yang kita dapat dari sonar yang tadi kita generate.

  • sonar.host.url : Isi dengan url sonar
  • sonar.projectKey : Isi dengan key dari hasil generate
  • sonar.projectName : Isi dengan nama project dari hasil generate
  • sonar.coverage.exlusion : Isi dengan package / file yang ingin kita exclude (agar tidak di scan oleh sonarqube)

Jika sudah selanjutnya kita edit configuration

Kemudian kita pilih maven -> add new run configuration

Kemudian kita isi name dengan clean install, dan isi pada bagian Run, hasil dari generatean sonar
mvn clean verify sonar:sonar \
-Dsonar.projectKey=rnd-springboot-3.0 \
-Dsonar.projectName=’rnd-springboot-3.0' \
-Dsonar.host.url=http://localhost:9000 \
-Dsonar.token=sqp_47f99c6324749dfb7d519c01804945825f8a24a1

Jika sudah kita tekan saya tombol OK, kemudian kita run.

Build Success, selanjutnya kita kembali buka halaman sonarnya, Dan jika tampilannya sudah seperti ini, artinya project kita sudah berhasil discan oleh sonarQube, so far so good, project kita aman, tidak terdapat bugs, vulnerabilities dan coverage code kita 75%, dengan status Passed.

Selanjutnya kita akan config sonarqubenya, disini saya ingin up minimal coveragenya menjadi minimal 90%, jika dibawah 90% maka projectnya akan menjadi failed statusnya.
Caranya kita pergi ke halaman sonarqube, kemudian pilih Quality Gates

Kemudian pilih Create, disini saya akan meberi nama Sonar Way Custom, Jika sudah langsung saya kita Save

Selanutnya kita pilih Unlock editing,

Kemudian pilih Add Condition, kemudian pilih On Overall Code lalu Quality Gate Fails When isi dengan Coverage, dan untuk valuenya isi dengan 90.

Jika sudah langsung saya tekan Add Condition, Kemudian pilih Sonar Way Custom sebagai default, dengan cara tekan tombol Set as Default dipojok kanan atas.

Selanjutnya kita coba run clean verify lagi project spring boot kita.

Kalau kita liat sekarang hasil runningnya menjadi failed, kenapa failed?
karena minimal coverage di sonar kita naikan menjadi 90.

Sekarang kita coba buka kembali halaman sonarqubenya.

Oke sudah sesuai expect jika coverage < 90% maka status projectnya akan menjadi failed.

Oke cukup sekian dulu tutorialnya di part I ini, di Part II kita akan coba integrasikan dengan jenkins.
Jika bingung silahkan clone projectnya dari git https://github.com/septianrezaandrianto/rnd-spring-boot-3

Sebelum masuk ke part II, jika kalian belum install jenkins, kalian bisa liat cara installnya pada link berikut https://medium.com/@septianrezaa/tutorial-install-jenkins-di-operating-system-windows-4b0cb4788325

See yaa di tutorial Part II.

--

--

Septian Reza Andrianto

I'm a Software Engineer with more than three years experiences