SonarQube代碼質量檢查工具
Sonar (SonarQube)是一個開源平臺,用於管理源代碼的質量。
Sonar 不只是一個質量數據報告工具,更是代碼質量管理平臺。
支持Java, C#, C/C++, PL/SQL, Cobol, JavaScrip, Groovy 等等二十幾種編程語言的代碼質量管理與檢測。
官網地址:https://www.sonarqube.org
中文文檔地址:https://revolyw.gitbooks.io/sonarqube/content/
SonarQube代碼檢測的七個維度
-
不遵循代碼標準(Coding Standards Breach)
sonar可以通過PMD,CheckStyle,Findbugs等等代碼規則檢測工具規範代碼編寫。
-
潛在的缺陷(Bugs and Potential Bugs)
sonar可以通過PMD,CheckStyle,Findbugs等等代碼規則檢測工具檢 測出潛在的缺陷。
-
糟糕的複雜度分佈(Bad Distribution of Complexity)
文件、類、方法等,如果複雜度過高將難以改變,這會使得開發人員 難以理解它們, 且如果沒有自動化的單元測試,對於程序中的任何組件的改變都將可能導致需要全面的迴歸測試。
-
重複(Duplications)
顯然程序中包含大量複製粘貼的代碼是質量低下的,sonar可以展示 源碼中重複嚴重的地方。
-
註釋不足或者過多(Not Enough or Too Many Comments)
沒有註釋將使代碼可讀性變差,特別是當不可避免地出現人員變動 時,程序的可讀性將大幅下降 而過多的註釋又會使得開發人員將精力過多地花費在閱讀註釋上,亦違背初衷。
-
缺乏單元測試(Lack of Unit Tests)
sonar可以很方便地統計並展示單元測試覆蓋率。
-
糟糕的設計
通過sonar可以找出循環,展示包與包、類與類之間的相互依賴關係,可以檢測自定義的架構規則 通過sonar可以管理第三方的jar包,可以利用LCOM4檢測單個任務規則的應用情況, 檢測藕合。
環境準備
- 關閉防火牆
systemctl stop firewalld
systemctl disable firewalld
- 關閉selinux
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
- 關閉swap
swapoff -a
yes | cp /etc/fstab /etc/fstab_bak
cat /etc/fstab_bak |grep -v swap > /etc/fstab
- 修改內核參數
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
sysctl -p
- 創建數據掛載目錄
mkdir -p /data/postgres
mkdir /data/sonarqube_data
mkdir /data/sonarqube_extensions
mkdir /data/sonarqube_logs
chown -R 999 /data/sonarqube_data /data/sonarqube_extensions /data/sonarqube_logs
環境部署
- 安裝postgres
docker run -d -p 5432:5432 --name sonarqube_postgres \
-v /data/postgres:/var/lib/postgresql/data \
-e POSTGRES_USER=sonarqube \
-e POSTGRES_PASSWORD=sonarqube \
-e PGDATA=/var/lib/postgresql/data/pgdata postgres
- 安裝SonarQube
docker run -d -p 9000:9000 -p 9092:9092 --name sonarqube \
-v /data/sonarqube_data:/opt/sonarqube/data \
-v /data/sonarqube_extensions:/opt/sonarqube/extensions \
-v /data/sonarqube_logs:/opt/sonarqube/logs \
-e SONAR_JDBC_USERNAME=sonarqube \
-e SONAR_JDBC_PASSWORD=sonarqube \
-e SONAR_JDBC_URL="jdbc:postgresql://192.168.10.81:5432/sonarqube" \
sonarqube
訪問IP地址+9000,默認賬號密碼都是admin
安裝語言包
我已經裝完了所以顯示的是中文,初始的是英文的,但是位置不變
點擊安裝重啓即可
檢測java代碼
-
安裝java語言包
重啓服務 -
創建項目
-
進入代碼目錄
mvn clean install sonar:sonar \
-Dsonar.projectKey=task \
-Dsonar.host.url=http://192.168.10.81:9000 \
-Dsonar.sourceEncoding=UTF-8 \
-Dsonar.java.binaries=target/classes \
-Dsonar.java.coveragePlugin=jacoco \
-Dsonar.sources=src/main/java \
-Dsonar.login=87474c41ef5532d402a138bf46a746c0acc067de
編譯完成後可以到SonarQube的web頁面查看
利用sonar-scanner檢測代碼
- 獲取sonar-scanner安裝包並配置
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.0.3.778-linux.zip
unzip sonar-scanner-cli-3.0.3.778-linux.zip && mv sonar-scanner-cli-3.0.3.778-linux.zip sonar-scanner && cd sonar-scanner
vim conf/sonar-scanner.properties
sonar.host.url=http://192.168.10.81:9000
sonar.sourceEncoding=UTF-8
sonar.jdbc.username=sonarqube
sonar.jdbc.password=sonarqube
sonar.jdbc.url=jdbc:postgres//192.168.10.81/sonarqube
sonar.login=admin
sonar.password=admin
- 在代碼跟目錄創建一個sonar-project.properties
vim sonar-project.properties
sonar.projectKey=sso
sonar.language=java
sonar.java.binaries=./
sonar.host.url=http://192.168.10.81:9000
sonar.login=sso
sonar.login=admin
sonar.password=admin
- 開始掃描
/app/sonar-scanner/bin/sonar-scanner