前言
隨着項目團隊規模日益壯大,項目代碼量也越來越多。且不說團隊成員編碼水平層次不齊,即便是老手,也難免因為代碼量的增加和任務的繁重而忽略代碼的質量,最終的問題便是bug的增多和代碼債務的堆積。
因此,代碼review便日益提上了日程。當然人工review的效率還是相當低下的,於是我們采用了自動化代碼review的工具,便是今天的主角:SonarQube。
SonarQube簡介
官方網站:https://www.sonarqube.org/
SonarQube 是一個用於管理源代碼質量開放平台,它可以從多個維度檢測代碼質量,可以快速的定位代碼中潛在的或者明顯的 Bug、錯誤。
它支持包括 Java、Python、Php、C/C++、C#、HTML、JavaScript、PL/SQL、Objective C 等二十多種編程語言的代碼質量管理與檢測。可作為我們日常開發中檢測代碼質量的重要工具。
SonarQube® 可以與您現有的工作流程集成,以便在項目分支和拉取請求之間進行連續的代碼檢查。比如:
- SonarQube集成gitlab,在分支推送的時候自動進行代碼檢查分析,生成代碼報告。
- SonarQube集成jenkins,在代碼構建的時候自動進行代碼分析,生成代碼報告。
總之,SonarQube是可以配合一切好用的CI/CD工具進行自動化分析代碼並生成代碼報告,通過報告我們可以看到代碼中可能存在的bug和代碼債務。
環境、軟件准備
以下是安裝的軟件及版本:
- 服務器:CentOS7
- SonarQube:version 7.7
- Jdk:version 1.8.0_91
- Maven:version 3.5.3
- Mysql: version 5.7.15
注意:下邊我們要演示 Maven 項目如何使用 SonarQube 分析,所以需要先安裝 Maven、Jdk,SonarQube 安裝我們使用 Mysql 作為數據存儲,所以需要先安裝 Mysql,這里 Maven、Jdk、Mysql 的安裝忽略。
SonarQube安裝
本文下載的版本是Sonarqube-7.7
下載地址:https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.7.zip
SonarQube 的安裝包是不分平台的,默認把所有平台的運行命令都下載下來,使用者根據不同環境運行不同的運行腳本。
[root@Zabbix ~]# wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.7.zip
2、解壓SonarQube安裝包
[root@Zabbix ~]# unzip sonarqube-7.7.zip [root@Zabbix ~]# mv sonarqube-7.7 /usr/local/sonarqube
- bin:目錄存放了各個環境的啟動腳本
- conf:目錄存放着sonarqube的配置文件
- logs:目錄存放着啟動和運行時的日志文件
- data:用來存放數據,SonarQube默認使用 h2 數據庫存儲,同時支持其他如Mysql、Orace、Mssql、Postgresql數據庫存儲
3、配置SonarQube
# 我們首先需要通過配置文件修改sonarqube的Mysql連接字符串等信息,打開conf目錄的sonar.properties
[root@Zabbix ~]# vim /usr/local/sonarqube/conf/sonar.properties
端口的配置按照默認配置:
sonar.web.port=9000 sonar.search.port=9001
配置數據庫信息:
sonar.jdbc.username=sonar sonar.jdbc.password=sonar sonar.jdbc.url=jdbc:mysql://MYSQLSERVER_IP:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true
注:Mysql版本需大於或等於5.6且小於8.0
4、創建數據庫及授權
mysql> create database sonarqube; mysql> grant all on sonarqube.* to sonarqube@'%' identified by '123456'; mysql> flush privileges;
5、啟動SonarQube
啟動需要授權給一個非root的用戶,sonarqube及其es等軟件禁止root賬戶啟動,因此需要切換一個非root賬戶,授權的用戶需要有bin目錄及其子目錄的讀取和可執行的權限。
然后我們找到對應平台的腳本,我的系統是64位的linux,進入linux-x86-64目錄
# 授權
[root@Zabbix ~]# chown -R admin.admin /usr/local/sonarqube
# 啟動
[root@Zabbix ~]# su - admin [admin@Zabbix ~]$ /usr/local/sonarqube/bin/linux-x86-64/sonar.sh start
# 查詢端口
[admin@Zabbix ~]$ netstat -lntup
# 啟動之后,我們瀏覽器訪問對應服務器IP地址的9000端口(防火牆要提前放行9000端口)
如果沒有成功,那么就在logs目錄查看啟動日志。一般有幾種:
- 1)es.log # ES或Mysql等數據庫連接報錯,一般是Mysql的連接字符串賬號密碼錯誤或者sonar賬號權限不夠;
- 2)es.log # 數據庫初始化失敗MySQL sonar賬戶權限不足
- 3)sonar.log # sonar服務的啟動日志
- 4)web.log # sonarqube web的啟動日志
6、訪問SonarQube
# 默認賬號密碼admin
# 登錄后界面
7、Plugins 插件安裝
SonarQube 插件安裝非常簡單,同時 官網插件庫 提供了很多實用的插件供大家下載使用。SonarQube已經默認給我們安裝了一些很常用的插件,我們可以通過admin登錄,點擊 配置 -> 系統 -> 更新中心 -> Installed 查看。
SonarQube 支持分析的語言有很多,像Java、Python、Php、C/C++、C#、HTML、JavaScript、PL/SQL、Objective C等20+語言,當我們需要支持分析什么語言時,只需要去插件中心安裝對應語言的插件即可,非常方便,可擴展性強。
這里我們演示安裝兩個很實用的插件,一個是 Chinese Pack(SonarQube的漢化包),一個是 Checkstyle(檢測代碼風格)。
# Chinese Pack 插件安裝
登陸之后點擊administration:
安裝完之后看頁面上邊:
之后再次登陸就更新了:
# Checkstyle 插件安裝
在 SonarQube 網頁上直接點擊安裝。admin 登錄,點擊 配置 -> 系統 -> 更新中心 -> Available -> Search,輸入 CheckStyle,
在搜素結果中找到 CheckStyle 插件點擊 Install,等待下載完成后,按照頁面提示點擊 Restart 自動重啟服務即可完成安裝。
SonarQube分析Maven項目
1、在maven的中找到setting配置文件。在setting.xml中增加sonarqube配置。如下:
<settings> <pluginGroups> <pluginGroup>org.sonarsource.scanner.maven</pluginGroup> </pluginGroups> <profiles> <profile> <id>sonar</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <!-- 配置 Sonar Host地址,默認:http://localhost:9000 --> <sonar.host.url>http://myserver:9000/sonar/</sonar.host.url>
<sonar.login>7895sdf8594sdfs65ewfds9854seese65</sonar.login> </properties> </profile> </profiles> </settings>
2、然后就可以在我們 Maven 工程目錄執行:
mvn clean verify sonar:sonar 或 mvn clean install sonar:sonar
注:如果是使用jenkins和maven編譯,還可在jenkins上具體項目中的構建中配置:
clean verify sonar:sonar -Dsonar.projectVersion=$appVersion -Dsonar.projectKey=ups_sas
3、執行完畢之后,可以去 web頁面查看分析結果:
http://myserver:9000/sonar/
SonarQube與Jenkins集成
1. 安裝Jenkins
這里不介紹。
2. 安裝SonarQube Scanner插件
2.1. 安裝插件
https://plugins.jenkins.io/sonar
安裝完后重啟jenkins。
2.2. 配置SonarQube
首先,在SonarQube中生成一個Token(PS:用token代替輸入用戶名和密碼):
然后,在Jenkins中配置連接sonarqube服務器的地址,這里用到的token就是剛才在sonarqube中創建的那個token:
最后,配置全局工具配置:
3. 創建任務
最最重要的是,配置SonarQube analysis properties
sonar.projectKey=ks-cms-unicorn sonar.projectName=ks-cms-unicorn sonar.projectVersion=1.0 sonar.language=java sonar.sourceEncoding=UTF-8 sonar.sources=$WORKSPACE sonar.java.binaries=$WORKSPACE
本例中,創建了兩個任務,方法同上。
可以看到,每次構建任務都會生成一次報告。這種方式比Maven那種方式要好很多,在實際的項目中多用此方式。
引用:
- https://www.yangxingzhen.com/7262.html
- https://www.cnblogs.com/cjsblog/p/10740840.html