本文以CentOS操作系統為例介紹Sonar的安裝配置,以及如何與Jenkins進行集成,通過pmd-cpd、checkstyle、findbugs等工具對代碼進行持續審查。
Sonar是一個用於代碼質量管理的開源平台,用於管理Java源代碼的質量。通過插件機制,Sonar 可以集成不同的測試工具,代碼分析工具,以及持續集成工具,比如pmd-cpd、checkstyle、findbugs、Jenkins。通過不同的插件對這些結果進行再加工處理,通過量化的方式度量代碼質量的變化,從而可以方便地對不同規模和種類的工程進行代碼質量管理。
同時 Sonar 還對大量的持續集成工具提供了接口支持,可以很方便地在持續集成中使用 Sonar。
此外,Sonar 的插件還可以對 Java 以外的其他編程語言提供支持,對國際化以及報告文檔化也有良好的支持。
2、配置數據庫
Apache Derby 是Sonar自帶並且默認安裝使用的數據庫,此外Sonar對如下數據庫提供支持:MySQL 5.x, Oracle 10g XE, Postgresql, MS SqlServer等,本文以mysql為例介紹如何配置數據庫:
1)創建數據庫
在mysql中執行如下腳本創建數據庫及mysql用戶
CREATE
DATABASE
sonar
CHARACTER
SET
utf8
COLLATE
utf8_general_ci;
CREATE
USER
'sonar'
IDENTIFIED
BY
'sonar'
;
GRANT
ALL
ON
sonar.*
TO
'sonar'
@
'%'
IDENTIFIED
BY
'sonar'
;
GRANT
ALL
ON
sonar.*
TO
'sonar'
@
'localhost'
IDENTIFIED
BY
'sonar'
;
FLUSH
PRIVILEGES
;
2)編輯${SONAR_HOME}/conf/sonar.properties配置數據庫:
sonar.jdbc.username: sonar sonar.jdbc.password: sonar sonar.jdbc.url: jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true # Optional properties sonar.jdbc.driverClassName: com.mysql.jdbc.Driver
3)配置DB驅動包
如果使用Oracle數據庫,必須手動復制驅動類到${SONAR_HOME}/extensions/jdbc-driver/oracle/目錄下。其它支持的數據庫默認提供了驅動,http://docs.codehaus.org/display/SONAR/Analysis+Parameters 列舉了一些常用的配置及默認值.
4)常見錯誤及解決方法
添加語言包後,啟動報錯分析:
下載安裝 sonar-l10n-zh-plugin-1.4.jar 語言包(http://docs.codehaus.org/display/SONAR/Chinese+Pack),重新打包部署後,後台報錯如下:
Error in Sonar.log : 2012.10.25 14:39:15 INFO org.sonar.INFO Register rules [squid/java]...2012.10.25 14:39:15 ERROR o.s.s.p.Platform The following rule (repository: squid) must have a description: Rule[id=<null>,name=<null>,key=ParsingError,configKey=ParsingError,plugin=squid,enabled=true,severity=MAJOR,cardinality=SINGLE]org.sonar.api.utils.SonarException: The following rule (repository: squid) must have a description: Rule[id=<null>,name=<null>,key=ParsingError,configKey=ParsingError,plugin=squid,enabled=true,severity=MAJOR,cardinality=SINGLE]at org.sonar.server.startup.RegisterRules.validateRule(RegisterRules.java:131) ~[classes/:na]at org.sonar.server.startup.RegisterRules.registerRepository(RegisterRules.java:103) ~[classes/:na]at...
(可參考http://jira.codehaus.org/browse/SONAR-3910)
解決方法:將 extensions\plugins\ 目錄下的jar包全部刪除,重新加入本地語言包後,重新打包部署即可。
3、安裝、配置Sonar
Sonar的運行需要 JDK 1.5+ , 從 http://www.sonarqube.org/downloads/ 下載sonar zip文件,本文以3.6版本為例。
創建運行sonar的CentOS賬戶sonar,並設置賬戶密碼:
# useradd sonar # passwd sonar
使用sonar賬戶登錄CentOS。
Sonar默認集成了jetty容器,可以直接啟動提供服務,也可以通過腳本構建為war包,部署在tomcat容器中。
1)直接啟動
編輯.bash_profile,添加環境變量SONAR_HOME
$ vi $HOME/.bash_profile
修改成如下內容:
PATH=$PATH:$HOME/bin SONAR_HOME=$HOME/sonar export PATH SONAR_HOME
使環境變量生效
Source $HOME/.bash_profile
運行如下命令啟動sonar,其它操作系統sonar均提供了啟動腳本
$ ${SONAR_HOME}/bin/linux-x86-64/sonar.sh start
在浏覽器中訪問: http://localhost:9000/ ,運行界面如下:
Sonar默認的端口是”9000”、默認的上下文路徑是”/”、默認的網絡接口是”0.0.0.0”,默認的管理員帳號和密碼為:admin/admin,這些參數都可以在配置文件中修改:
$ vi ${SONAR_HOME}/conf/sonar.properties
2)作為Web項目,部署到Tomcat等應用服務器中
a. 確保conf/sonar.properties、conf/wrapper.conf未被修改使用過
b. 執行如下命令生成war包,將生成的sonar.war部署到應用服務器中
$ ${SONAR_HOME}/war/build-war.sh
c. 啟動Tomcat, 通過 http://localhost:8080/sonar 訪問.
Tomcat安裝配置參見:CentOS系統中安裝Tomcat7並設置為自啟動服務
4、配置為自啟動服務
使用root賬戶或者開啟sudo權限操作。
創建自啟動腳本文件/etc/init.d/sonar
# vi /etc/init.d/sonar
添加如下內容
#!/bin/sh # # rc file for SonarQube # # chkconfig: 345 96 10 # description: SonarQube system (www.sonarsource.org) # ### BEGIN INIT INFO # Provides: sonar # Required-Start: $network # Required-Stop: $network # Default-Start: 3 4 5 # Default-Stop: 0 1 2 6 # Short-Description: SonarQube system (www.sonarsource.org) # Description: SonarQube system (www.sonarsource.org) ### END INIT INFO /usr/bin/sonar $*
添加啟動服務
# ln -s $SONAR_HOME/bin/linux-x86-64/sonar.sh /usr/bin/sonar # chmod 755 /etc/init.d/sonar # chkconfig --add sonar
5、配置插件
a)插件介紹
Sonar支持多種插件,插件的下載地址為:http://docs.codehaus.org/display/SONAR/Plugin+Library
將下載後的插件上傳到${SONAR_HOME}extensions\plugins目錄下,重新啟動sonar。
sonar默認集成了Java Ecosystem插件,該插件是一組插件的合集
下面列出了一些常用的插件:
b)插件配置示例(本段內容來自 )
Sonar 的主要特色是對不同工具產生的檢查結果進行再加工處理,Sonar 還向用戶提供了對數據進行個性化處理的方法。
本節以 Technical Debt 插件為例說明如何通過設置參數影響最後的報告結果。首先了解一下這個插件中的“技術債務”的概念,這個概念最早是在 1992 年由 Ward Cunningham 在他的論文“The WyCash Portfolio Management System”中提出的,之後被軟件工程界接受並推廣,《重構》的作者 Martin Fowler 也在其 網站上對技術債務有所介紹。其實原理可以理解為“出來混早晚要還的”,當前不規范的代碼,會對以後產品修改的成本造成影響。
Soanr 的 Technical Debt 插件提供了默認的計算公式,通過對其中的權重參數進行配置,可以適應不同公司和項目對技術債務的計算。
以上的各項數據指標,可以根據自己公司和項目的不同情況進行設置,如圖所示:
例如默認參數下同一個項目的技術債務指標如下:
修改了參數後的結果為:
可見將 Average time to cover complexity of one (in hours) 從 0.2 修改為 0.01 後,Coverage 的權重變小了,從而達到忽略單元測試覆蓋率的作用。不同的公司和項目可以根據需要調整各自的參數,參數的調優和策略不在本文的討論范圍之內。
通過以上的示例可以看出,Sonar 使用不同類型的圖表顯示給用戶代碼質量的結果,並且這些圖表不是簡單地對單元測試覆蓋率或者靜態檢測工具的結果進行顯示,而是根據軟件工程理論進行了二次加工後的結果,更加科學和直觀。
更多詳情見請繼續閱讀下一頁的精彩內容:
http://xxxxxx/Linuxjc/1147456.html TechArticle