1. 程式人生 > 其它 >記錄docker 安裝sonarqube和安裝的一些坑

記錄docker 安裝sonarqube和安裝的一些坑

sonarqube

基於本地服務和mvn命令進行的程式碼分析,並將分析結果推送到sonar伺服器中

一、Sonar可以從以下七個維度檢測程式碼質量,而作為開發人員至少需要處理前5種程式碼質量問題。

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檢測單個任務規則的應用情況, 檢測藕合。

下面通過以下介紹SonarQube的安裝、使用說明。

二、為什麼要選擇sonarQube?

個人使用之後認為 : sonarQube的優勢如下(相比於阿里編碼規約這種市面上常見的類似軟體):

1. 更加優秀的圖形化介面

基本上通過介面就可以對自己專案的程式碼狀況一目瞭然

2. 可以查詢出其它軟體難以定位到的問題

比如 : 可能導致空指標異常的問題 (物件在進行使用前沒有加空的判斷)

可能導致記憶體洩漏的問題, 在try catch 塊裡面,直接使用e.printStackTrace()將堆疊資訊列印到記憶體的

可能導致的漏洞 : 成員變數使用public定義的

還有諸如 : 流等未關閉或者是非正常關閉都能夠檢測出來!

功能非常強大!!

三. docker 安裝sonarqube

docker pull postgres 拉取資料庫

docker pull sonarqube 拉取sonarqube

啟動postgres資料庫建立sonar使用者

docker run --name db -p 5432:5432 -e POSTGRES_USER=sonar -e POSTGRES_PASSWORD=sonar -d postgres

進入容器

docker exec -it db /bin/bash

進入命令列

psql -U sonar

create database sonar;建立sonar資料庫

alter role sonar createdb;alter role sonar superuser;alter role sonar createrole;給sonar授權

alter database sonar owner to sonar;更改sonar資料庫擁有者(這一步是必須的,否則會sonarqube會連線失敗)

/p

exit退出

啟動sonarqube

docker run --name sq -e sonar.jdbc.password=sonar -e sonar.jdbc.username=sonar -e sonar.jdbc.url=jdbc:postgresql://postgres/sonar --link db:postgres -p 9000:9000 -d sonarqube

如果啟動報vm.max_map_count錯誤的話是給elasticsearch分配的數量不夠

進入配置檔案最後一行新增配置

vi /etc/sysctl.conf

vm.max_map_count=262144

啟動成功後登入ip:9000埠就可以訪問了 預設賬號密碼:admin

四. 通過maven使用

輸入maven命令:

mvn sonar:sonar \ -Dsonar.projectKey=test \ -Dsonar.host.url=http://172.16.1.83:9000 \ -Dsonar.login=4dd2e88ac9587b02c03edb8185f307a3e8dd1ccc

這個命令是sonarqube 幫我們生成的

完成後就可以在頁面中看到了