一 Sonar介紹
Sonar是一個用于代碼品質管理的開源平台,用于管理Java源代碼的品質。通過插件機制,Sonar 可以內建不同的測試工具,代碼分析工具,以及持續內建工具,比如pmd-cpd、checkstyle、findbugs、Jenkins。通過不同的插件對這些結果進行再加工處理,通過量化的方式度量代碼品質的變化,進而可以友善地對不同規模和種類的工程進行代碼品質管理。同時, Sonar 還對大量的持續內建工具提供了接口支援,可以很友善地在持續內建中使用 Sonar。
此外,Sonar 的插件還可以對 Java 以外的其他程式設計語言提供支援,對國際化以及報告文檔化也有良好的支援。
二 配置資料庫
Apache Derby 是Sonar自帶并且預設安裝使用的資料庫,此外Sonar對如下資料庫提供支援:MySQL 5.x, Oracle 10g XE, Postgresql, MS SqlServer等,
本文以mysql為例介紹如何配置資料庫:
1)建立資料庫
在mysql中執行如下腳本建立資料庫及mysql使用者
|
|
2)編輯${SONAR_HOME}/conf/sonar.properties配置資料庫:
|
3)配置DB驅動包
如果使用Oracle資料庫,必須手動複制驅動類到${SONAR_HOME}/extensions/jdbc-driver/oracle/目錄下。其它支援的資料庫預設提供了驅動,http://docs.codehaus.org/display/SONAR/Analysis+Parameters 列舉了一些常用的配置及預設值.
三 安裝、配置Sonar
目前的LTS為4.5.7,下載下傳位址: https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-4.5.7.zip。
Sonar預設內建了jetty容器,可以直接啟動提供服務,也可以通過腳本建構為war包,部署在tomcat容器中。本文直接用jetty部署運作,
預設端口号是9000。
1) 編輯,添加環境變量SONAR_HOME
|
修改成如下内容:
|
使環境變量生效
|
2) 配置為随機啟動
vi /etc/rc.local
# start sonar
/data/sonar/sonarqube-4.5.7/bin/linux-x86-64/sonar.sh start
3) 修改conf/sonar.properties
#----- MySQL 5.x
sonar.jdbc.url=jdbc:mysql://host:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
sonar.jdbc.driverClassName: com.mysql.jdbc.Driver
4)啟動sonar
|
四 安裝插件
采用sonar的更新中心安裝插件:以管理者使用者登入Sonar,進入配置->系統,選擇更新中心->可用插件。
sonar預設內建了Java Ecosystem插件,該插件是一組插件的合集
1)Java [sonar-java-plugin]:java源代碼解析,計算名額等
2)Squid [sonar-squid-java-plugin]:檢查違反Sonar定義規則的代碼
3)Checkstyle [sonar-checkstyle-plugin]:使用CheckStyle檢查違反統一代碼編寫風格的代碼
4)FindBugs [sonar-findbugs-plugin]:使用FindBugs檢查違反規則的缺陷代碼
5)PMD [sonar-pmd-plugin]:使用pmd檢查違反規則的代碼
6)Surefire [sonar-surefire-plugin]:使用Surefire執行單元測試
7)Cobertura [sonar-cobertura-plugin]:使用Cobertura擷取代碼覆寫率
8)JaCoCo [sonar-jacoco-plugin]:使用JaCOCO擷取代碼覆寫率
下面列出了一些常用的插件:
1)JavaScript代碼檢查:http://docs.codehaus.org/display/SONAR/JavaScript+Plugin
2)python代碼檢查:http://docs.codehaus.org/display/SONAR/Python+Plugin
3)Web頁面檢查(HTML、JSP、JSF、Ruby、PHP等):http://docs.codehaus.org/display/SONAR/Web+Plugin
4)xml檔案檢查:http://docs.codehaus.org/display/SONAR/XML+Plugin
5)scm源碼庫統計分析:http://docs.codehaus.org/display/SONAR/SCM+Stats+Plugin
6)檔案度量:http://docs.codehaus.org/display/SONAR/Tab+Metrics+Plugin
7)中文語言包:http://docs.codehaus.org/display/SONAR/Chinese+Pack
8)時間表顯示度量結果:http://docs.codehaus.org/display/SONAR/Timeline+Plugin
9)度量結果演進圖:http://docs.codehaus.org/display/SONAR/Motion+Chart+Plugin
五 內建Jenkins
在jenkins的插件管理中選擇安裝SonarQube Plugin,該插件可以使項目每次建構都調用sonar進行代碼度量。
進入配置頁面對sonar插件進行配置,如下圖:

配置建構項目,增加Post Build Action:
應用程式建構時就會自動觸發Sonar對代碼的檢查。
TIPS
- 可以在sonar的web管理界面(通用設定->排除中),排除不需要掃描的檔案或者不需要報告的問題。
- 建立job時,jdk應該明确指定版本,而不是采用system version!!