代碼質(zhì)量管理平臺實(shí)戰(zhàn)| SonarQube 安裝、配置及 JaCoCo、Maven 集成

SonarQube 是一個用于代碼質(zhì)量管理的開源平臺,用于管理源代碼的質(zhì)量。同時 SonarQube 還對大量的持續(xù)集成工具提供了接口支持,可以很方便地在持續(xù)集成中使用 SonarQube。此外, SonarQube 的插件還可以對 Java 以外的其他編程語言提供支持,對國際化以及報告文檔化也有良好的支持。
官方網(wǎng)址:https://www.sonarqube.org/
通過插件形式,可以支持包括 Java,C#,C/C++、PL/SQL、Cobol、JavaScrip、Groovy、Ruby 等二十五種編程語言的代碼質(zhì)量管理與檢測,針對不同的編程語言其所提供的分析方式也有所不同:對于所有支持的編程語言,SonarQube 都提供源了代碼的靜態(tài)分析功能;對于某些特定的編程語言,SonarQube 提供了對編譯后代碼的靜態(tài)分析功能。
SonarQube 支持多種客戶端集成方式,包括但不限于 Scanner 客戶端、Ant、Gradle、Maven、Jenkins、IDEA 插件等。比較常用的為 Gradle 和 Maven。
SonarQube 并不是簡單地將各種質(zhì)量或覆蓋率檢測工具的結(jié)果(例如 CheckStyle、JaCoCo 等)直接展現(xiàn)給客戶,而是通過不同的插件算法來對結(jié)果進(jìn)行再加工,并最終以量化的方式來衡量代碼質(zhì)量,從而方便地對不同規(guī)模和種類的工程進(jìn)行相應(yīng)的代碼質(zhì)量管理,以便進(jìn)行有針對性的代碼修復(fù)或重構(gòu)。
SonarQube 在進(jìn)行代碼質(zhì)量管理時,會從以下的七個緯度對項(xiàng)目代碼質(zhì)量進(jìn)行分析。
Sonar 實(shí)際上是一個 Web 系統(tǒng),展現(xiàn)了靜態(tài)代碼掃描的結(jié)果,結(jié)果是可以自定義的,而真正實(shí)現(xiàn)代碼掃描的是 Sonar Scanner 這個工具,另外同時支持多種語言的原理是它的擴(kuò)展性,通過插件實(shí)現(xiàn)的,也就是 Java Jar 架包,可以在 Sonar 平臺上在線安裝或者離線安裝。
1.已安裝 JDK1.8 環(huán)境
2.已安裝 Maven(用于后期與 SonarQube、JaCoCo 的集成)
3.已安裝 MySQ L數(shù)據(jù)庫(Sonar 默認(rèn)的數(shù)據(jù)庫是自帶 H2 數(shù)據(jù)庫,是很小的嵌入式數(shù)據(jù)庫引擎,這里的配置換成了 MySQL,為了方便通過數(shù)據(jù)庫客戶端進(jìn)行數(shù)據(jù)查詢)
1.下載 SonarQube,地址為:
Download | SonarQube
2.配置數(shù)據(jù)庫(下面的SQL是指定了schema為sonar,password為sonar,其中第四條SQL是localhost是因?yàn)镸ySQL安裝在本地)
3.安裝 SonarQube
I. 將下載的 sonar-3.7.zip 包解壓至 Windows某個路徑,如 D:\Tools\sonar(如是其他OS,請選擇對應(yīng)路徑,如Linux的/usr/local/等)。
II. 修改 sonar.properties
在 /conf/sonar.properties 文件中,配置數(shù)據(jù)庫設(shè)置(默認(rèn)已經(jīng)提供了各類數(shù)據(jù)庫的支持這里使用 MySQL,因此取消 MySQL 模塊的注釋),同時因?yàn)槎丝跊_突而改成端口為 11000。
III.在 /bin/ 目錄下,運(yùn)行 /windows-x86-64/StartSonar.bat (因?yàn)楸?demo 是在 win10 64位安裝的,如果是 Linux 的話,運(yùn)行 nohup bash sonar.sh start &)
IV. 訪問?http://localhost:11000,如果不是本機(jī)就輸入 http://[remote IP]:11000,如果你看到下圖所示即證明配置成功。
4.用 admin/admin(默認(rèn))進(jìn)行登錄,并安裝漢化包
Chinese pack installation
Chinese pack restart
Chinese pack restart confirm
Well done!
下載Sonar Scanner,地址為:
https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner將下載的 sonar-scanner-cli-3.3.0.1492-windows.zip 包解壓至 Windows 某個路徑,如D:\Tools\sonar(如是其他OS,請選擇對應(yīng)路徑,如Linux的/usr/local/等)
修改環(huán)境變量
新增變量:
SONAR_SCANNER_HOME = D:\Tools\sonar\sonar-scanner-3.3.0
修改Path變量:增添
%SONAR_SCANNER_HOME%\bin\安裝Sonar Scanner
I. 將下載的 sonar-3.7.zip 包解壓至 Windows 某個路徑,如 D:\Tools\sonar(如是其他 OS,請選擇對應(yīng)路徑,如 Linux的/usr/local/ 等)。
II. 修改 sonnar-scanner.properties
在 /conf/sonar-scanner.properties 文件中,設(shè)置SonarQube服務(wù)器。
III. 到你想檢測的工程根目錄下新建文件sonar-project.properties,文件內(nèi)容如下?,文件中的參數(shù)配置,參考Sonar Analysis Parameters這篇文章。
在命令行模式下,在工程的根目錄下鍵入命令“sonar-scanner”,你會看到以下日志:
運(yùn)行 sonar-scanner
接著,重新登錄 SonarQube 平臺,檢測的結(jié)果已經(jīng)在平臺上展現(xiàn)出來
從上圖你可以看出來,連單元測試覆蓋率的統(tǒng)計也生成出來了,主要原因?yàn)樵谠搈aven項(xiàng)目之前已經(jīng)集成了Jacoco插件(具體Maven與Jacoco的集成請參考我的另外一篇文章)。
1.該項(xiàng)目為maven項(xiàng)目,并且Jacoco已經(jīng)通過POM文件集成到項(xiàng)目中,具體步驟請參考我的另外一篇文章。
2.該集成方案其實(shí)還是首先通過maven package 命令去生成對應(yīng)的覆蓋率報告,然后通過sonar scanner直接使用該覆蓋率報告并通過一定算法加工并展示到SonarQube的界面上去。
1.在項(xiàng)目根目錄的 sonar-project.properties 文件中,增添以下配置內(nèi)容:
2.在 SoarQube 登錄 admin,并通過在【配置-應(yīng)用市場】下找到Jacoco插件并安裝和重啟。在項(xiàng)目根目錄下,運(yùn)行 mvn package,當(dāng)build成功的時候Jacoco的結(jié)果就會產(chǎn)生在target/site/jacoco文件夾下。
maven package接著,在項(xiàng)目根目錄下運(yùn)行命令 sonar-scanner,如果看到以下結(jié)果證明已經(jīng)覆蓋率已經(jīng)可以在SonarQube上查閱。
sonar scanner
以上,后續(xù)繼續(xù)補(bǔ)充如何通過 SonarLint 整合到 IntelliJ IDEA,并同時如何整合到 Jenkins 實(shí)現(xiàn)自動化測試。