基於docker搭建SonarQube代碼檢測工具

SonarQube代碼質量檢查工具

Sonar (SonarQube)是一個開源平臺,用於管理源代碼的質量。
Sonar 不只是一個質量數據報告工具,更是代碼質量管理平臺。
支持Java, C#, C/C++, PL/SQL, Cobol, JavaScrip, Groovy 等等二十幾種編程語言的代碼質量管理與檢測。
官網地址:https://www.sonarqube.org
中文文檔地址:https://revolyw.gitbooks.io/sonarqube/content/

SonarQube代碼檢測的七個維度

  1. 不遵循代碼標準(Coding Standards Breach)

    sonar可以通過PMD,CheckStyle,Findbugs等等代碼規則檢測工具規範代碼編寫。

  2. 潛在的缺陷(Bugs and Potential Bugs)

    sonar可以通過PMD,CheckStyle,Findbugs等等代碼規則檢測工具檢 測出潛在的缺陷。

  3. 糟糕的複雜度分佈(Bad Distribution of Complexity)

    文件、類、方法等,如果複雜度過高將難以改變,這會使得開發人員 難以理解它們, 且如果沒有自動化的單元測試,對於程序中的任何組件的改變都將可能導致需要全面的迴歸測試。

  4. 重複(Duplications)

    顯然程序中包含大量複製粘貼的代碼是質量低下的,sonar可以展示 源碼中重複嚴重的地方。

  5. 註釋不足或者過多(Not Enough or Too Many Comments)

    沒有註釋將使代碼可讀性變差,特別是當不可避免地出現人員變動 時,程序的可讀性將大幅下降 而過多的註釋又會使得開發人員將精力過多地花費在閱讀註釋上,亦違背初衷。

  6. 缺乏單元測試(Lack of Unit Tests)

    sonar可以很方便地統計並展示單元測試覆蓋率。

  7. 糟糕的設計

    通過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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章