系列目錄
SonarQube 系列之 — 01 安裝和掃描
SonarQube 系列之 — 02 配置與管理
SonarQube 系列之 — 03 集成CI
SonarQube 系列之 — 04 插件擴展
一、sonar簡介
SonarQube(簡稱Sonar)是管理代碼質量的開放平台,它可以快速地對代碼質量進行分析,並給出合理的解決方案,提高管理效率,保證代碼質量。支持Java, Python, C#, JavaScript, PHP, VB.NET, TypeScript, Flex等等二十幾種編程語言的代碼質量管理與檢測。 SonarQube可以從以下七個維度檢測代碼質量,而作為開發人員至少需要處理前5種代碼質量問題。官網,文檔
- a. Web 服務器
- b. 基於 Elasticsearch 的搜索服務器
- c. 計算引擎服務器負責處理代碼分析報告並保存在 SonarQube 數據庫
Sonar Scanners:是用於將項目發布到Sonar進行審查的工具。也可以不用該工具。官網
SonarLint:是Eclipse,IDEA中的Sonar插件
SonarQube工作流程如上圖:
- 開發人員在本地使用 SonarLint 運行分析 IDEs 上的代碼;
- 開發者將自己的代碼上傳到持續集成服務器上,例如:git,SVN,TFVC,……;
- 持續集成服務器觸發自動構建,SonarQube 掃描儀執行代碼分析;
- 分析報告發送到 SonarQube 服務器進行處理;
- SonarQube 服務器分析和存儲分析報告結果到 SonarQube 數據庫中,並顯示結果在 UI 界面中;
- 開發人員通過修改、評審代碼來管理和減少他們 SonarQube UI 頁面上的問題;
- 項目經理收到分析報告
運維使用 api 來從 SonarQube 自動化配置和提取數據
運維使用 JMX 監控 SonarQube 服務器
二、部署安裝
1. 環境准備
-
jdk 1.8版本
-
sonarqube 7.6 downloads
-
SonarQube+Scanner downloads
-
數據庫,Sonarqube支持Mysql、PostgreSQL,SqlServer、Oracle等,選擇合適的數據庫,創建相應sonar庫,設置用戶名、密碼,設置用utf-8編碼
2. 安裝包解壓,並修改配置文件
將安裝包上傳到服務器,並且解壓到/data目錄下:
#cd /data
#unzip sonarqube-7.6.zip -d /data/sonarqube
#cd /data/sonarqube/sonarqube-7.6/conf
#vi sonar.properties
修改:數據庫配置,以及數據庫用戶名,密碼,這里用的數據庫是PostgreSQL,具體內容如下
3. 啟動Sonar,並驗證
chmod -R 755 /data/sonarqube/sonarqube-7.6/
cd /data/sonarqube/sonarqube-7.6/bin/linux-x86-64
./sonar.sh start
#如果未完成啟動可以使用console命令查看啟動過程中的問題
./sonar.sh console
#sonar支持的啟動參數: console | start | stop | restart | status | dump
#如果啟動完成,但是依然不能訪問,可以通過以下命令查看啟動日志
cat $SONAR_HOME/logs/web.log
瀏覽器訪問:http://localhost:9000(管理員:admin,密碼:admin)。如訪問失敗,則可以在 ../logs/sonar.log 文件中查看日志。
4. 常用插件安裝,漢化包Plugin Library
- 常用插件
Chinese Pack -- 中文語言包,有兼容列表說明,這里是:sonar-l10n-zh-plugin-1.26.jar
JaCoCo -- Java 代碼覆蓋率
PMD -- Java 靜態代碼掃描
Checkstyle -- Java 代碼規范檢查
Crowd -- Crowd 插件,實現統一登錄
ShellCheck Analyzer -- Shell 代碼規范檢查
SonarCSS、SonarHTML、SonarJS等 -- Sonar 針對不同編程語言代碼分析
可百度雲下載,鏈接:https://pan.baidu.com/s/1LhI_aoL0ZBXFAeVTBOqVDQ ,提取碼:wlzj
-
放入sonar如下目錄: sonarqube-7.6\extensions\plugins
-
然后重啟sonar就可以了。
其他補充
安裝服務
如果是windows機器,可以打開 StartSonar.bat 文件所在目錄,運行文件 InstallNTService.bat 將Sonar安裝為服務
找回sonarqube管理員密碼、
update users set crypted_password = '$2a$12$uCkkXmhW5ThVK8mpBvnXOOJRLd64LJeHTeCkSuB3lfaR2N0AYBaSi', salt=null, hash_method='BCRYPT' where login = 'admin'
三、SonarQube的掃描
從官網可以看到,SonarQube支持以下方式來進行項目的掃描;
1. 直接使用SonarQube scanner即掃描儀來進行分析
如果本地未搭建開發環境,此時使用SonarQube scanner就很方便
-
修改配置文件
在sonar-scanner.properties中配置對應的sonar.host.url 、sonar.sourceEncoding -
修改環境變量
export SCAN_HOME=/data/sonarqube/sonar-scanner
export PATH=$PATH:$SCAN_HOME/bin -
修改項目配置文件
在項目根路徑下創建sonar-project.properties、配置信息如下:
sonar.projectKey=sonarScannerTest
sonar.projectName=sonarScannerTest
sonar.version=1.0
sonar.sources=src
sonar.binaries=bin
sonar.language=java
sonar.sourceEncoding=UTF-8
- 執行和查看
在項目根目錄下執行命令,執行sonar-scanner/sonar-scanner -X命令
執行成功的話,訪問SonarQube查看項目掃描結果。
2. 使用SonarQube掃描儀分析Maven
- 找到位置 $MAVEN_HOME/conf下的settings.xml,添加如下配置:
<settings>
<pluginGroups>
<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
</pluginGroups>
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- Optional URL to server. Default value is http://localhost:9000 -->
<sonar.host.url>http://loaclhost:9000</sonar.host.url>
<!-- 具有執行分析權限的用戶名和密碼 -->
<sonar.login>analysis</sonar.login>
<sonar.password>123456</sonar.password>
</properties>
</profile>
</profiles>
</settings>
注意:直接加進去會報錯,將<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>添加到文件原有的<pluginGroups></pluginGroups>中,將
-
運行編輯器的命令窗口,在項目根目錄下執行:
mvn clean verify sonar:sonar
或者
mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.6.0.1398:sonar -Dsonar.scm.provider=git -
執行成功的話,訪問SonarQube查看項目掃描結果。
遇到報錯:SCM provider autodetection failed. Both svn and git claim to support this project. Please use sonar.scm.provider to define SCM of your project.
在命令中添加參數 -Dsonar.scm.provider=git就好啦~
3. 使用SonarQube掃描儀分析ant
- 下載sonarqube-antjar包,放到ant的/lib目錄下,在項目的build.xml中添加一個 sonar Ant target:
<!-- build.xml -->
<project name="My Project" default="all" basedir="." xmlns:sonar="antlib:org.sonar.ant">
...
<!-- Define the SonarQube global properties (the most usual way is to pass these properties via the command line) -->
<property name="sonar.host.url" value="http://localhost:9000" />
<!-- Define the SonarQube project properties -->
<property name="sonar.projectKey" value="org.sonarqube:sonarqube-scanner-ant" />
<property name="sonar.projectName" value="Example of SonarScanner for Ant Usage" />
<property name="sonar.projectVersion" value="1.0" />
<property name="sonar.sources" value="src" />
<property name="sonar.java.binaries" value="build" />
<property name="sonar.java.libraries" value="lib/*.jar" />
...
<!-- Define SonarScanner for Ant Target -->
<target name="sonar">
<taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
<!-- Update the following line, or put the "sonarqube-ant-task-*.jar" file in your "$HOME/.ant/lib" folder -->
<classpath path="path/to/sonar/ant/task/lib/sonarqube-ant-task-*.jar" />
</taskdef>
<!-- Execute SonarScanner for Ant Analysis -->
<sonar:sonar />
</target>
-
在項目根目錄下執行如下命令
ant sonar -
執行成功的話,訪問SonarQube查看項目掃描結果。
4. 其他類型
使用SonarQube掃描儀分析Gradle
配置 gradle 全局屬性~/.gradle/gradle.properties.
systemProp.sonar.host.url=http://localhost:9000
gradle clean compileJava sonarqube -x test -Dsonar.projectKey=[my analysis token] -Dsonar.java.binaries=[basedir]
sonar.java.binaries 等屬性也可配置在項目的 build.gradle 或構建機器的 gradle.properties 里。
詳見官方文檔:
maven:https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Maven
gradle:https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Gradle
使用SonarQube掃描儀分析MSBuild
使用SonarQube掃描儀分析Azure DevOps
沒用過,待補充
5. Eclipse+ SonarLint插件(連接到SonarQube平台)
- 打開Eclipse,選擇Help->Eclipse Marketplace,在Find里面輸入SonarQube,點擊install
- 在SonarQube平台新建項目
- 在項目上右鍵—> Run as—>Run configuration—>Maven Build 下面新建 sonar:sonar