介紹篇
SonarQube 介紹
SonarQube 是 一個開源的代碼質量分析平臺,便於管理代碼的質量,可檢查出項目代碼的漏洞和潛在的邏輯問題。同時,它提供了豐富的插件,支持多種語言的檢測,
如 Java、Python、Groovy、C、C++等幾十種編程語言的檢測。它主要的核心價值體現在如下幾個方面:
- 檢查代碼是否遵循編程標準:如命名規範,編寫的規範等。
- 檢查設計存在的潛在缺陷:SonarQube 通過插件 Findbugs、Checkstyle 等工具檢測代碼存在的缺陷。
- 檢測代碼的重複代碼量:SonarQube 可以展示項目中存在大量複製粘貼的代碼。
- 檢測代碼中註釋的程度:源碼註釋過多或者太少都不好,影響程序的可讀可理解性。
- 檢測代碼中包、類之間的關係:分析類之間的關係是否合理,複雜度情況。
SonarQube 平臺是由 4 個部分組成:
- SonarQube Server
- SonarQube Database
- SonarQube Plugins
- SonarQube Scanner
SonarQube 工作流程
SonarQube 在進行代碼質量管理時,會從下圖 所示的七個緯度來分析項目的質量。
SonarQube 需要數據庫的支持,用於存儲檢測項目後的分析數據,同時爲了實現可持續監測,還需要持續集成工具(如Jenkins)的支持,在構建版本前,通過Jenkins+Sonar 插件執行項目分析指令,最終的結果會通過SonarQube 服務器的Web 頁面展示。下圖是使用SonarQube做代碼持續審查的流程圖:
開發人員把代碼push到SCM(如gitlab)【上圖第2步】,jenkins構建定義好的job,然後通過jenkins 插件(sonar scanner)分析源碼【上圖第3步】,jenkins把分析報告發到sonarqube server【上圖第4步】。
安裝篇
環境準備
- Sonarqube 5.5
- Sonarqube Scanner 2.4
- MySQL 5.6
- jenkins 2.53
- JDK 1.7.0_79
- CentOS release 6.5 (Final) 2.6.32-431.el6.x86_64
版本說明:
- sonarqube5.6+ 必須要JDK1.8,所以JDK1.7下只能安裝sonar5.5 .
- sonar scanner 2.5+後也要使用JDK1.8,所以JDK1.7下就要用scanner 2.4。
- 爲安全起見,sonar的安裝和啓動不用root用戶,而是用低權限的linux用戶。
SonarQube安裝
1、數據庫配置
MySQL的安裝這裏不作介紹。並且本示例MySQL和SonarQube安裝在同一臺機器
創建SonarQube 服務所需的數據庫:
mysql> CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql> CREATE USER 'sonar' IDENTIFIED BY 'sonarpassword';
mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonarpassword';
mysql> GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonarpassword';
mysql> FLUSH PRIVILEGES;
2、SonarQube配置
下載 SonarQube5.5 後解壓。按如下配置修改 $SONAR_HOME/conf/sonar.properties
文件:
sonar.jdbc.username=sonar
sonar.jdbc.password=sonarpassword
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
sonar.web.host=0.0.0.0
sonar.web.context=/
sonar.web.port=9000
3、啓動SonarQube
進入sonar的bin目錄($SONAR_HOME/bin/linux-x86-64
),執行腳本 sonar.sh start
瀏覽器中訪問 http://192.168.212.82:9000/ ,界面如下:
默認登錄賬戶 admin 密碼 admin,可登錄後修改密碼。
3.A 配置sonarqube開機啓動
(1)添加sonar環境變量
修改 ~/.bash_profile
SONAR_HOME=/data/sonar/sonarqube-5.5
PATH=PATH:$SONAR_HOME/bin/linux-x86-64
export PATH SONAR_HOME
(2)/etc/init.d 下增加sonar 文件
#!/bin/sh
# chkconfig: 345 96 10
# description: SonarQube system
#
# Provides: sonar
# Default-Start: 3 4 5
# Default-Stop: 0 1 2 6
# Short-Description: SonarQube system
# Description: SonarQube system
/usr/bin/sonar $*
(3)加入開機啓動列表
sudo ln -s $SONAR_HOME/bin/linux-x86-64/sonar.sh /usr/bin/sonar
sudo chmod 755 /etc/init.d/sonar
sudo chkconfig --add sonar
4、漢化
下載 sonarqube5.5 漢化包 ,是個jar包,放到$SONAR_HOME/extensions/plugins
,重啓sonarqube (sonar.sh restart)
Jenkins集成SonarQube Scanner
安裝 SonarQube Scanner插件
jenkins界面 系統管理->管理插件->高級 ,手動上傳hpi插件(因自動安裝scanner插件是大於2.4版本,要求JDK1.8,所以這裏手動安裝)
先下載 SonarQube Scanner 2.4 for Jenkins ,再上傳。安裝後重啓jenkins。成功安裝後展示如下:
配置SonarQube Server
告訴Jenkins: SonarQube Server在哪
Jenkins 系統管理 -> 系統設置:
其中Server authentication token 是sonarqube Server的登錄憑證,在SonarQube後臺生成。只需登錄到sonarqube,創建一個用戶token:
添加Jenkins全局配置 - SonarQube Scanner
Jenkins 系統管理->全局配置(Global Tool Configuration)
選擇自動安裝, Install from Maven Central ,sonarqube Scanner 2.4版本。
使用篇
使用SonarQube Scanner 分析源碼
這裏採取構建後分析源碼
Analysis properties 填寫配置
- sonar.projectKey=apigateway
- sonar.projectName=apigateway #這個可自定義,報告發送到sonarqube後,sonarqube將創建以此命名的project
- sonar.language=java #表示分析java源代碼
- sonar.java.source=1.7 #表示jdk版本爲1.7
- sonar.sources=${WORKSPACE}/src/main/java #表示源代碼的目錄
查看分析結果
構建jenkins job後,分析結果將發送到sonarqube。
jenkins job構建結果
sonarqube 分析結果
小結
本文介紹了sonarqube的安裝、配置,以及結合jenkins來做持續的自動CodeReview。其中的安裝配置過程都是筆者親自試驗過的,可供讀者在參考。安裝配置時需注意各個軟件的版本。如果跟本文的版本有差異,安裝過程也會不盡相同。