1. 程式人生 > >程式碼質量檢查的利器:SonarQube

程式碼質量檢查的利器:SonarQube

SonarQube 是一個用於程式碼質量管理的開源平臺,用於管理原始碼的質量。 通過外掛形式,可以支援包括 java, C#, C/C++, PL/SQL, Cobol, JavaScrip, Groovy 等等二十幾種程式語言的程式碼質量管理與檢測。關於Sonarqube的環境搭建,可以參考下面的一篇文章:http://www.devopsedu.com/front/articleinfo/31 , 其不但要安裝MySQL,還要安裝ElasticSearch,其應用層的程式碼是基於java的,所以在安裝SonarQube之前一定要記得安裝JDK,最新版本的安裝推薦使用JDK1.8以上的版本。

SonarQube的架構

SonarQube提供四種版本:

  • 社群免費版
  • 開發者版
  • 企業版
  • 資料中心版
    在這裡插入圖片描述

安裝好之後,可以以admin的身份來定義不同的規則:
在這裡插入圖片描述

主要集中在下面5個方面:

在這裡插入圖片描述

作為管理員提供了下面的一些選單功能。
在這裡插入圖片描述

那麼如何使用SonarQube來掃描不同的程式碼,比如Java程式碼,JavaScript程式碼,或者C#程式碼呢? 不同的語言有不同的使用方式。

#1 Java語言

對於Maven專案的命令如下:

mvn sonar:sonar \
  -Dsonar.host.url=http://192.168.172.129:9000 \
  -Dsonar.login=bd096dab95726decf6b0f6b30b304daafcbdbdd6

對於Gradle專案的命令如下:

./gradlew sonarqube \
  -Dsonar.host.url=http://192.168.172.129:9000 \
  -Dsonar.login=bd096dab95726decf6b0f6b30b304daafcbdbdd6

當然在使用之前要加入下面的依賴。

plugins {
  id "org.sonarqube" version "2.5"
}

#2 C#或者VB語言

SonarQube.Scanner.MSBuild.exe begin /k:"com.henry.test:aspdottest" /d:sonar.host.url="http://192.168.172.129:9000" /d:sonar.login="bd096dab95726decf6b0f6b30b304daafcbdbdd6"

MsBuild.exe /t:Rebuild

SonarQube.Scanner.MSBuild.exe end /d:sonar.login="bd096dab95726decf6b0f6b30b304daafcbdbdd6"

其客戶端的掃描程式的下載地址為:
http://redirect.sonarsource.com/doc/install-configure-scanner-msbuild.html

#3 JS,Python,PHP等語言

sonar-scanner \
  -Dsonar.projectKey=com.henry.test:aspdottest \
  -Dsonar.sources=. \
  -Dsonar.host.url=http://192.168.172.129:9000 \
  -Dsonar.login=bd096dab95726decf6b0f6b30b304daafcbdbdd6

其客戶端的地址:http://redirect.sonarsource.com/doc/install-configure-scanner.html

對於上面的不同方式,我們都看到了一個Dsonar.login的值,那麼這個值是什麼呢?
這個值就是有能登入到Sonarqube伺服器的使用者或者管理員幫助生成的,相當一個憑證(Token),只有擁有了這個憑證,才能把在客戶端生成的相關質量,安全等報告上傳到SonarQube的伺服器上。當然也可以通過使用者名稱和密碼方式進行認證,下面的圖就是以管理員的方式生成的登入的Token值。
在這裡插入圖片描述

總結

書山有路,勤為徑。 如果要真正的理解透SonarQube的原理和使用方式,還請讀者自己根據上面的安裝文件自行安裝並用來真正的掃描一下Java專案或者JavaScript,C#等專案。如果要擴充套件其功能,讀者們還可以以管理員的身份安裝下面的外掛。
在這裡插入圖片描述

大家安裝好SonarQube伺服器之後,可以嘗試安裝這些外掛試試,看其分別提供了什麼樣的功能來支援我們的DevOps的技術棧。