天天看點

Sonar 內建Jenkins進行代碼審查

一  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使用者

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';      

2)編輯${SONAR_HOME}/conf/sonar.properties配置資料庫:

sonar.jdbc.username:                       sonar
sonar.jdbc.password:                       sonar
sonar.jdbc.url:                             jdbc:mysql://${db_host}: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 列舉了一些常用的配置及預設值.

三  安裝、配置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

$ vi $HOME/.bash_profile      

修改成如下内容:

export SONAR_HOME=/data/sonar/sonarqube-4.5.7      

使環境變量生效

Source ~/.bash_profile      

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_HOME}/bin/linux-x86-64/sonar.sh start      

四  安裝插件

采用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插件進行配置,如下圖:

Sonar 內建Jenkins進行代碼審查

配置建構項目,增加Post Build Action:

Sonar 內建Jenkins進行代碼審查
Sonar 內建Jenkins進行代碼審查

應用程式建構時就會自動觸發Sonar對代碼的檢查。

TIPS

  1.  可以在sonar的web管理界面(通用設定->排除中),排除不需要掃描的檔案或者不需要報告的問題。     
  2. 建立job時,jdk應該明确指定版本,而不是采用system version!!