代碼質(zhì)量難評估?一文帶你用 SonarQube 分析代碼質(zhì)量!
? 大家好,我是樹哥!
無論是架構(gòu)師還是研發(fā)經(jīng)理,代碼質(zhì)量都是必須要關(guān)注的重點。Sonar(沒錯,是 Sonar,不是 SonarQube)是一個用于代碼質(zhì)量管理的開源平臺,用于管理代碼的質(zhì)量。
它通過插件形式可以支持二十幾種語言的代碼質(zhì)量檢測,通過多個維度的檢查了快速定位代碼中潛在的或者明顯的錯誤。千里之行始于足下,今天就讓我?guī)Т蠹矣靡粋€簡單的例子,看看怎么使用 SonarQube 進(jìn)行代碼質(zhì)量管理。
基礎(chǔ)概念
SonarQube
SonarQube 是 Sonar 的服務(wù)端,相當(dāng)于一個 web 服務(wù)器中的 tomcat,用來發(fā)布應(yīng)用,在線瀏覽分析等。
Sonar Scanner
Sonar Scanner 是對源碼進(jìn)行掃描的工具,它可以將結(jié)果保存到數(shù)據(jù)庫以便用上面的 SonarQube 進(jìn)行分析。關(guān)于 Sonar Scanner 更多的內(nèi)容,見官方文檔:Analyzing source code overview https://docs.sonarqube.org/latest/analyzing-source-code/overview/
環(huán)境配置
JDK 配置
SonarQube 最新版本需要 JDK11 以上,需要先配置好 JDK 開發(fā)環(huán)境。配置好之后再命令行運(yùn)行 java -version 查看,如果運(yùn)行沒報錯說明配置成功,如下代碼所示。
Maven 配置
后續(xù)將會使用 Sonar Scanner for Maven 來分析項目,因此需要有安裝 Maven 并配置好對應(yīng)的環(huán)境變量。配置好之后運(yùn)行 mvn -version 查看,如果運(yùn)行沒報錯說明配置成功,如下代碼所示。
數(shù)據(jù)庫支持
SonarQube 最新版本支持 SQLServer、Oracle、H2 等數(shù)據(jù)庫來存儲數(shù)據(jù),但并不支持 MySQL 數(shù)據(jù)庫。SonarQube 默認(rèn)會使用 H2 內(nèi)存數(shù)據(jù)庫來臨時存儲數(shù)據(jù),可能查看數(shù)據(jù)的時候會比較不方便。
安裝啟動 SonarQube
到 Sonar 官方網(wǎng)站下載 SonarQube:Clean Code | Developer First | Sonar,這里我們選擇社區(qū)版,如下圖所示。
下載完成之后解壓可以看到如下圖所示目錄,其中 bin? 是運(yùn)行應(yīng)用的目錄、conf? 是配置文件的目錄、logs 是日志的目錄。
這里我們打開 bin? 文件夾,可以看到有多個不同目錄對應(yīng)不同系統(tǒng)。我這里是 Windows 系統(tǒng)就打開 macosx-universal-64? 目錄,隨后運(yùn)行 ./sonar.sh start? 命令運(yùn)行。運(yùn)行之后,會啟動 SonarQube 所需要的各個服務(wù),包括 ElasticSearch 等。如果一切正常,那么日志會提示 SonarQube is operational,如下圖所示。
隨后,打開 SonarQube 的管理后臺地址:http://127.0.0.1:9000,輸入默認(rèn)的賬號密碼:admin/admin,點擊登錄之后會要求你修改密碼。修改密碼之后就進(jìn)入了 SonarQube 管理后臺,如下圖所示。
SonarQube 也提供了 Docker 啟動的方式,鏡像地址為:sonarqube - Official Image | Docker Hub。 用 Docker 的好處就是:你可以省去上面所有的配置,一個命令就啟動 SonarQube,真的是太方便了!
掃描簡單項目
SonarQube 啟動完成之后,這里用我之前的 chenyurong/quick-start-of-spock: help you to learn spock quickly. 項目來體驗下 SonarQube 的代碼掃描功能。
首先,我們選擇手工導(dǎo)入項目的方式,來導(dǎo)入我們的本地項目,如下圖所示。
接著,我們設(shè)置好顯示名等信息,如下圖所示。
接著,選擇本地導(dǎo)入項目信息,如下圖所示。
接著,創(chuàng)建一個 token 令牌,點擊創(chuàng)建按鈕,如下圖所示。
接著,我們選擇 Maven 構(gòu)建技術(shù),隨后 SonarQube 會自動為我們生成對應(yīng)的命令,如下圖所示。
我們直接復(fù)制上面生成的 mvn 命令代碼,直接到 quick-start-of-spock 項目的根目錄運(yùn)行。正常情況下,其是可以運(yùn)行成功的,如下圖所示。
隨后,我們直接回到 SonarQube 頁面,可以看到 quick-start-of-spock 項目有數(shù)據(jù)了,如下圖所示。
掃描多模塊項目
如果你的項目是多模塊的結(jié)構(gòu),那么在運(yùn)行分析命令之前需要先運(yùn)行 mvn install? 命令。同樣在 SonarSource / sonar-scanning-examples 下面有 Sonar 官方提供的 maven-multimodule 示例項目,我們以這個項目為例來講講如何掃描多模塊項目。
首先,在項目根目錄下運(yùn)行 mvn install 命令,成功后再運(yùn)行 Sonar Scanner Maven 插件的分析命令,如下所示。
如果正常的話,那么命令行會輸出成功的日志信息,如下圖所示。
此時再打開 SonarQube 管理后臺,可以看到多了一個名為 maven-multimodule 的項目,如下圖所示。
如果你想要在 Gradle、Ant 等構(gòu)建的項目中使用 Sonar Scanner,可以參考官網(wǎng)的文檔:Analyzing source code overview https://docs.sonarqube.org/latest/analyzing-source-code/overview/