SonarQube介紹
SonarQube是一種自動程式碼審查工具,用於檢測程式碼中的錯誤、漏洞和程式碼氣味。它可以與您現有的工作流程整合,以支援跨專案分支和拉取請求的連續程式碼檢查。
Sonar(SonarQube)是一個開源平臺,用於管理原始碼的質量。Sonar 不只是一個質量資料報告工具,更是程式碼質量管理平臺。支援的語言包括:Java、PHP、C#、C、Cobol、PL/SQL、Flex 等。主要特點:程式碼覆蓋:透過單元測試,將會顯示哪行程式碼被選中改善編碼規則搜尋編碼規則:按照名字,外掛,啟用級別和類別進行查詢專案搜尋:按照專案的名字進行查詢對比資料:比較同一張表中的任何測量的趨勢
sonar安裝1,下載sonar
sonar支援跨平臺,如linux,windows等,下載地址:
https://www.sonarqube.org/downloads/
我下載的是6.6的版本,新版本好象不再支援mysql。下載後解壓可以看到如下目錄:
bin目錄放的是啟動檔案,conf放的是配置檔案,extensions/plugins放的是外掛。
2,下載sonar-scanner
下載地址:
https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/
根據你作業系統選擇下載,我下載的是2.8版本,如果上面網址找不到2.8版本,可以試下這個下載地址:
https://binaries.sonarsource.com/Distribution/sonar-scanner-cli
注意:sonerScanner對JDK版本也會有要求的,2.8支援java8
3,配置資料庫
新建一個空庫,資料庫名自己取,比如取sonar,
配置sonar:
開啟conf/sonar.properties檔案,可以看到配置檔案中預設寫了各種資料鏈接的例子,在mysql那塊,加入我們自己的資料庫連線即可,如
sonar.jdbc.username=test
sonar.jdbc.password=test
sonar.jdbc.url=jdbc:mysql://192.168.1.104:13314/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
配置sonar-scanner:
開啟conf/sonar-scanner.properties檔案,同樣加入上面的資料庫連線即可。
4,漢化包(此過程可跳過)
https://github.com/xuhuisheng/sonar-l10n-zh/releases
根據sonar的版本下載對應的漢化包,因為我下載的sonar是6.6版本,所以下載
sonar-l10n-zh-plugin-1.18.jar
將下載jar包放到/extensions/plugins目錄中
5,設定環境變數
為了方便使用sonar-scanner命令,需要為其設定環境變數
將配置好的sonar和sonar-scanner上傳到linux伺服器上,我的是存放路徑是/sterson。
編輯/etc/profile檔案,追加sonar-scanner路徑:
export PATH=$PATH:/sterson/sonar-scanner-4.5.0.2216-linux/bin
然後執行 source /etc/profile 使環境變數配置生效。
使用sonar和sonar-scanner
1,啟動sonar
進入sonar目錄,比如我的路徑是 /sterson/sonarqube-6.6/bin/linux-x86-64
啟動命令: ./sonar.sh start
重啟命令:./sonar.sh restart
停止命令:./sonar.sh stop
在瀏覽器訪問http://192.168.41.164:9000/,看到正在啟動,等啟動完後,
注意:啟動時不能用root使用者,不然會報錯,因為wrapper不能以root來啟動,所以需要建立一個普通使用者來啟動。
2,編輯sonar-project.properties
在需要掃描的原始碼專案的根目錄,建立sonar-project.properties檔案,內容如下:
sonar.projectKey=my:project
sonar.projectName=THCompanyService
sonar.projectVersion=1.0
sonar.sources=/sterson/resource/THCompanyService/trunk/dev/src/main/java
sonar.java.binaries=/sterson/resource/THCompanyService/trunk/dev/target/classes
projectName:專案名稱,自定義即可
projectVersion:專案版本
Sources:原始碼路徑
Binaries:專案編譯後的class檔案的目錄
3,掃描
進入原始碼所在根目錄,執行sonar-scanner,可看到開始掃描。
注意:如果報/bin/sh: sonar-scanner: 未找到命令,則嘗試建立連線,命令如下:
ln -sv /sterson/sonar-scanner-4.5.0.2216-linux/bin/sonar-scanner /usr/local/bin/sonar-scanner
/sterson/sonar-scanner-4.5.0.2216-linux/bin/sonar-scanner,這個是我的路徑,需要改成你實際的路徑
掃描結束後,返回到瀏覽器sonar檢視結果:
安裝sonar-pdf-plugin
到此網址下載
https://gitee.com/zzulj/sonar-pdf-plugin
注意:這裡只提供原始碼,下載後需要用maven編譯生成jar包,所以如果你還沒安裝maven,要先安裝maven,然後執行命令:
mvn clean package -Dmaven.test.skip=true
編譯後會生成sonar-pdfreport-plugin-3.0.3.jar
將jar包放到sonar的extensions/plugins目裡,重啟sonar。
然後在sonar的配置中就可以看到pdf了。
注意:需要每個配置項都設定並儲存。Username和Password我設定的是與sonar的一樣。
否則掃描過程會報如下錯誤:
INFO: Can't get Compute Engine task status.Retry.........
ERROR: Problem generating PDF file.
org.sonar.report.pdf.entity.exception.ReportException: Can't get Compute Engine task status
設定sonar web 記憶體
修改/conf/sonar.properties檔案,在文中搜索這兩項,去掉前面的#號。
注間:javaOpts的設定的值不能大於ce的值,否則啟動報錯。
sonar.web.javaOpts=-Xmx1024m -Xms512m -XX:+HeapDumpOnOutOfMemoryError
sonar.ce.javaOpts=-Xmx1024m -Xms128m -XX:+HeapDumpOnOutOfMemoryError
設定sonara-scanner記憶體
修改/etc/profile檔案,追加如下配置:
export SONAR_SCANNER_OPTS="-Xms256m -Xmx2048m -XX:MaxPermSize=1024m -XX:ReservedCodeCacheSize=256m"