使用 Sonar 進行程式碼質量管理
Sonar 是一個開源的程式碼質量管理平臺。通過外掛機制,Sonar 可以整合不同的測試工具,程式碼分析工具,以及持續整合工具(如Jenkins)。
Sonar 並不是簡單地把不同的程式碼檢查工具結果(例如 FindBugs,PMD 等)直接顯示在 Web 頁面上,而是通過不同的外掛對這些結果進行再加工處理,通過量化的方式度量程式碼質量的變化,從而可以方便地對不同規模和種類的工程進行程式碼質量管理。
Sonar 的安裝
我安裝的是sonarQube6.7,要求JDK1.8,MySQL5.6及以上,maven3.0.2以上。
下載
下載 zip 包後,直接解壓到任意目錄。
資料庫配置
sonar預設使用H2記憶體資料庫,可以直接使用。不過建議用其他資料庫,Sonar 可以支援大多數主流關係型資料庫(例如 Microsoft SQL Server, MySQL, Oracle, PostgreSQL 等)。
本文使用mysql,需要提前裝好MySQL,並建立sonar庫(不詳述)。
修改/conf/sonar.properties
檔案
sonar.jdbc.username= root
sonar.jdbc.password= 123456
sonar.jdbc.url= jdbc:mysql://192.168.1.56:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
執行
- windows環境
在 windows 環境中,直接啟動 Soanr 的 bin 目錄下 windows-x86-64\StartSonar.bat 即可。
然後在瀏覽器中訪問:http://localhost:9000 預設賬戶:admin/admin
- linux環境
使用命令bin/linux-x86-64/sonar.sh start
啟動服務。
注意:由於elasticsearch不支援root使用者啟動,需要在非root使用者下啟動sonar
- docker環境
安裝映象
docker pull sonarqube
啟動
預設使用h2資料庫
docker run -p 9000:9000 sonarqube
使用外接資料庫
docker run -e SONARQUBE_JDBC_USERNAME=sonar -e SONARQUBE_JDBC_PASSWORD=pwd -e SONARQUBE_JDBC_URL='jdbc:mysql://101.132.184.251:3306/sonar?useUnicode=true&characterEncoding=utf8' -p 9000:9000 sonarqube
- marathon中部署
{
"id": "/sonarqube",
"cmd": null,
"cpus": 0.2,
"mem": 1024,
"disk": 0,
"instances": 1,
"container": {
"type": "DOCKER",
"volumes": [],
"docker": {
"image": "sonarqube:6.7.5",
"network": "BRIDGE",
"portMappings": [
{
"containerPort": 9000,
"hostPort": 0,
"servicePort": 19999,
"protocol": "tcp",
"labels": {
"VIP_0": "sonarqube:19999"
}
}
],
"privileged": true,
"parameters": [],
"forcePullImage": true
}
},
"env": {
"SONARQUBE_JDBC_USERNAME": "sonar",
"SONARQUBE_JDBC_PASSWORD": "pwd",
"SONARQUBE_JDBC_URL": "jdbc:mysql://192.168.1.193:3306/sonar?useUnicode=true&characterEncoding=utf8"
},
"healthChecks": [
{
"protocol": "TCP",
"portIndex": 0,
"gracePeriodSeconds": 60,
"intervalSeconds": 30,
"timeoutSeconds": 60,
"maxConsecutiveFailures": 3,
"ignoreHttp1xx": false
}
],
"labels": {
"HAPROXY_GROUP": "external",
"LOAN_SONAR_BUILD_ID": "1"
},
"portDefinitions": [
{
"port": 19999,
"protocol": "tcp",
"labels": {}
}
]
}
安裝外掛
舉個栗子,我們安裝一個漢化外掛:Chinese Pack
進入Administration->Marketplace
搜尋Chinese Pack
,點選install。
再安裝一個分析java的外掛:
搜尋SonarJava
點選install
安裝後重啟sonar。
使用 Sonar maven外掛進行程式碼解析
使用前提:
- 需要maven版本3.0.2及以上。
- 安裝好SonarQube。
- 使用了已安裝的SonarQube支援的最低的JDK。
- 已經安裝好了你要分析的語言的外掛。
配置 settings.xml
進入$MAVEN_HOME/conf or ~/.m2
編輯settings.xml,新增外掛和sonarQube server地址:
<settings>
<pluginGroups>
<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
</pluginGroups>
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- Optional URL to server. Default value is http://localhost:9000 -->
<sonar.host.url>
http://192.168.1.56:9000
</sonar.host.url>
</properties>
</profile>
</profiles>
</settings>
開始分析專案
編譯命令如下:
mvn clean install
編譯成功後,再使用如下命令:
mvn sonar:sonar
Maven 外掛會自動把所需資料(如單元測試結果、靜態檢測結果等)上傳到 Sonar 伺服器上,需要說明的是,關於 Sonar 的配置並不在每個工程的 pom.xml 檔案裡,而是在 Maven 的配置檔案 settings.xml 檔案裡。
將 Soanr 所需要的資料上傳到 Sonar 伺服器上之後,Sonar 安裝的外掛會對這些資料進行分析和處理,並以各種方式顯示給使用者,從而使使用者方便地對程式碼質量的監測和管理。
本文參考