Analisis Kod dengan SonarQube

1. Gambaran keseluruhan

Dalam artikel ini, kita akan melihat analisis kod sumber statik dengan SonarQube - yang merupakan platform sumber terbuka untuk memastikan kualiti kod.

Mari kita mulakan dengan soalan inti - mengapa menganalisis kod sumber terlebih dahulu? Ringkasnya, untuk memastikan kualiti, kebolehpercayaan, dan kekekalan sepanjang hayat projek; pangkalan data yang ditulis dengan baik selalu lebih mahal untuk dijaga.

Baiklah, sekarang mari kita mulakan dengan memuat turun SonarQube versi LTS terbaru dari halaman muat turun dan menyediakan pelayan tempatan kami seperti yang digariskan dalam panduan permulaan pantas ini.

2. Menganalisis Kod Sumber

Sekarang setelah kami log masuk, kami diminta membuat token dengan menentukan nama - yang boleh menjadi nama pengguna kami atau nama pilihan lain dan klik pada butang jana.

Kami akan menggunakan token kemudian pada saat menganalisis projek kami. Kita juga perlu memilih bahasa utama (Java) dan teknologi binaan projek (Maven).

Mari tentukan pemalam dalam pom.xml :

    org.sonarsource.scanner.maven sonar-maven-plugin 3.4.0.905    

Versi terkini plugin boleh didapati di sini. Sekarang, kita perlu melaksanakan perintah ini dari akar direktori projek kita untuk mengimbasnya:

mvn sonar:sonar -Dsonar.host.url=//localhost:9000 -Dsonar.login=the-generated-token

Kita perlu mengganti token yang dihasilkan dengan token dari atas.

Projek yang kami gunakan dalam artikel ini terdapat di sini.

Kami menetapkan URL host pelayan SonarQube dan log masuk (dihasilkan token) sebagai parameter untuk pemalam Maven.

Setelah melaksanakan perintah, hasilnya akan tersedia di papan pemuka Projek - di // localhost: 9000 .

Terdapat parameter lain yang boleh kita sampaikan ke plugin Maven atau bahkan ditetapkan dari antara muka web; sonar.host. url, sonar.projectKey , dan sonar.sources adalah wajib sementara yang lain adalah pilihan.

Parameter analisis lain dan nilai lalai mereka ada di sini. Juga, perhatikan bahawa setiap plugin bahasa mempunyai peraturan untuk menganalisis kod sumber yang serasi.

3. Hasil Analisis

Setelah menganalisis projek pertama kami, kami boleh pergi ke antara muka web di // localhost: 9000 dan memuat semula halaman.

Di sana kita akan melihat ringkasan laporan:

Masalah yang dijumpai boleh berupa Bug, Kerentanan, Bau Kod, Liputan atau Penduaan. Setiap kategori mempunyai jumlah masalah atau nilai peratusan.

Lebih-lebih lagi, masalah boleh mempunyai salah satu daripada lima tahap keparahan yang berbeza: penyekat, kritikal, utama, kecil dan maklumat. Tepat di depan nama projek adalah ikon yang memaparkan status Quality Gate - lulus (hijau) atau gagal (merah).

Mengklik nama projek akan membawa kita ke papan pemuka khusus di mana kita dapat meneroka isu-isu tertentu untuk projek dengan lebih terperinci.

Kita dapat melihat kod projek, aktiviti dan melaksanakan tugas pentadbiran dari papan pemuka projek - masing-masing tersedia pada tab berasingan.

Walaupun terdapat tab Isu global , tab Isu pada papan pemuka projek memaparkan masalah khusus untuk projek berkenaan sahaja:

Tab masalah selalu memaparkan kategori, tingkat keparahan, tag, dan usaha yang dihitung (mengenai masa) yang diperlukan untuk memperbaiki masalah.

Dari tab masalah, ada kemungkinan untuk memberikan masalah kepada pengguna lain, mengulasnya, dan mengubah tahap keparahannya. Mengklik pada masalah itu sendiri akan menunjukkan lebih terperinci mengenai masalah tersebut.

Tab isu dilengkapi dengan penapis canggih di sebelah kiri. Ini bagus untuk menentukan masalah. Oleh itu, bagaimana seseorang dapat mengetahui apakah pangkalan data cukup sihat untuk digunakan dalam pengeluaran? Itulah kualiti Quality Gate.

4. Pintu Pintu SonarQube

Di bahagian ini, kita akan melihat ciri utama SonarQube - Quality Gate. Kemudian kita akan melihat contoh cara menyediakan yang tersuai.

4.1. Apakah Pintu Berkualiti?

Quality Gate adalah sekumpulan syarat yang mesti dipenuhi oleh projek sebelum memenuhi syarat untuk pengeluaran pengeluaran. Ia menjawab satu soalan: bolehkah saya mendorong kod saya ke pengeluaran dalam keadaan sekarang atau tidak?

Memastikan kualiti kod "baru" sambil memperbaiki yang sudah ada adalah salah satu cara yang baik untuk mengekalkan pangkalan data yang baik dari masa ke masa. Quality Gate memudahkan menetapkan peraturan untuk mengesahkan setiap kod baru yang ditambahkan ke pangkalan kode pada analisis berikutnya.

Syarat yang ditetapkan di Quality Gate masih mempengaruhi segmen kod yang tidak diubah. Sekiranya kita dapat mengelakkan timbulnya masalah baru, dari masa ke masa, kita akan menghilangkan semua masalah.

Pendekatan ini setanding dengan memperbaiki kebocoran air dari sumbernya. Ini membawa kita ke istilah tertentu - Leakage Period. Ini adalah jangka masa antara dua analisis / versi projek .

Sekiranya kita menjalankan semula analisis, pada projek yang sama, tab gambaran keseluruhan papan pemuka projek akan menunjukkan hasil untuk tempoh kebocoran:

Dari antara muka web, tab Quality Gates adalah tempat kita dapat mengakses semua pintu kualiti yang ditentukan. Secara lalai, cara SonarQube telah diprapasang dengan pelayan.

Konfigurasi lalai untuk cara SonarQube menandakan kod tersebut sebagai gagal sekiranya:

  • liputan pada kod baru kurang daripada 80%
  • peratusan baris pendua pada kod baru lebih besar daripada 3
  • tahap pemeliharaan, kebolehpercayaan atau keselamatan lebih buruk daripada A

With this understanding, we can create a custom Quality Gate.

4.2. Adding Custom Quality Gate

First, we need to click on the Quality Gates tab and then click on the Create button which is on the left of the page. We'll need to give it a name – baeldung.

Now we can set the conditions we want:

From the Add Condition drop-down, let's choose Blocker Issues; it'll immediately show up on the list of conditions.

We'll specify is greater than as the Operator, set zero (0) for the Error column and check Over Leak Period column:

Then we'll click on the Add button to effect the changes. Let's add another condition following the same procedure as above.

We'll select issues from the Add Condition drop-downand check Over Leak Period column.

The value of the Operator column will be set to “is less than” and we'll add one (1) as the value for the Error column. This means if the number of issues in the new code added is less than 1, mark the Quality Gate as failed.

I know this doesn't make technical sense but let's use it for learning sake. Don't forget to click the Add button to save the rule.

One final step, we need to attach a project to our custom Quality Gate. We can do so by scrolling down the page to the Projects section.

There we need to click on All and then mark our project of choice. We can as well set it as the default Quality Gate from the top-right corner of the page.

We'll scan the project source code, again, as we did before with Maven command. When that's done, we'll go to the projects tab and refresh.

This time, the project will not meet the Quality Gate criteria and will fail. Why? Because in one of our rules we have specified that, it should fail if there are no new issues.

Let's go back to the Quality Gates tab and change the condition for issues to is greater than. We need to click the update button to effect this change.

A new scan of the source code will pass this time around.

5. Integrating SonarQube into a CI

Making SonarQube part of a Continuous Integration process is possible. This will automatically fail the build if the code analysis did not satisfy the Quality Gate condition.

For us to achieve this, we're going to be using SonarCloud which is the cloud-hosted version of SonaQube server. We can create an account here.

From My Account > Organizations, we can see the organization key, and it will usually be in the form xxxx-github or xxxx-bitbucket.

Also from My Account > Security, we can generate a token as we did in the local instance of the server. Take note of both the token and the organization key for later use.

In this article, we'll be using Travis CI, and we'll create an account here with an existing Github profile. It will load all our projects, and we can flip the switch on any to activate Travis CI on it.

We need to add the token we generated on SonarCloud to Travis environment variables. We can do this by clicking on the project we've activated for CI.

Then, we'll click “More Options” > “Settings” and then scroll down to “Environment Variables”:

We'll add a new entry with the name SONAR_TOKEN and use the token generated, on SonarCloud, as the value. Travis CI will encrypt and hide it from public view:

Finally, we need to add a .travis.yml file to the root of our project with the following content:

language: java sudo: false install: true addons: sonarcloud: organization: "your_organization_key" token: secure: "$SONAR_TOKEN" jdk: - oraclejdk8 script: - mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent package sonar:sonar cache: directories: - '$HOME/.m2/repository' - '$HOME/.sonar/cache'

Ingatlah untuk mengganti kunci organisasi anda dengan kunci organisasi yang dinyatakan di atas. Melakukan kod baru dan mendorong ke repo Github akan mencetuskan Travis CI build dan seterusnya mengaktifkan pemindaian sonar juga.

6. Kesimpulannya

Dalam tutorial ini, kami telah melihat bagaimana untuk menyediakan pelayan SonarQube secara tempatan dan bagaimana menggunakan Quality Gate untuk menentukan kriteria kesesuaian projek untuk pengeluaran pengeluaran.

Dokumentasi SonarQube mempunyai lebih banyak maklumat mengenai aspek lain dari platform.