SonarQube 代碼質量管理平台搭建
SonarQube簡介
SonarQube 是一個開源的代碼分析平台, 用來持續分析和評測項目源代碼的質量。 通過SonarQube我們可以檢測出項目中重復代碼, 潛在bug, 代碼規范,安全性漏洞等問題, 並通過SonarQube web UI展示出來。
通過插件機制,Sonar 可以集成不同的測試工具,代碼分析工具,以及持續集成工具。比如pmd-cpd、checkstyle、findbugs、Jenkins。通過不同的插件對這些結果進行再加工處理,通過量化的方式度量代碼質量的變化,從而可以方便地對不同規模和種類的工程進行代碼質量管理。同時 Sonar 還對大量的持續集成工具提供了接口支持,可以很方便地在持續集成中使用 Sonar。
此外,Sonar 的插件還可以對 Java 以外的其他編程語言(支持的語言包括:Java、PHP、C#、C、python 、Cobol、PL/SQL、Flex等)提供支持,對國際化以及報告文檔化也有良好的支持。可以說Sonar是目前最強大的代碼質量管理工具之一。
環境依賴
1.Centos7(自行安裝搭建)
2.JDK1.8及以上
首先使用Java -version 查詢本機是否已安裝JDK環境,Centos7自帶OpenJDK的環境,但是需要手動配置/etc/profile文件,在此之前需要開始找java的安裝路徑..每個人路徑不一樣。
下面提供尋找Java安裝路徑方法,(注意:which ,whereis找到的並不是Java環境的地址)
[root@localhost local]#which java
usr/bin/java
[root@localhost local]# ls -lrt /usr/bin/java
lrwxrwxrwx. 1 root root 22 2020/08/06 15:28:44 /usr/bin/java -> /etc/alternatives/java
[root@localhost local]#ls -lrt /etc/alternatives/java
lrwxrwxrwx. 1 root root 73 2020/08/06 15:28:44 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-2.el7_6.x86_64/jre/bin/java
此時拿到你的Java安裝路徑后 進入 /etc/profile 開始配置
vim /etc/profile 在末尾添加一下配置
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-2.el7_6.x86_64 #(本機Java安裝目錄)
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
export TIME_STYLE='+%Y/%m/%d %H:%M:%S'
保存退出 source /etc/profile
3.mysql5.7及以上
注意:不要使用MySQL8.0版本。
需要Mysql數據庫支持;雖然SonarQube自帶了H2數據庫,但是為了方便管理數據推薦使用Mysql數據庫
3.1下載MySQL源安裝包:
wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
3.2安裝MySql源:
yum -y install mysql57-community-release-el7-11.noarch.rpm
3.3安裝MySQL服務器
yum install mysql-community-server
3.4啟動MySQL服務
systemctl start mysqld.service
3.5初始化數據庫密碼
新安裝的mysql數據庫 root用戶 密碼查詢
grep "password" /var/log/mysqld.log (密碼為最后的不規則字符串)
獲取密碼后第一次登錄請及時修改密碼
命令如下:
update user set authentication_string = password('這里輸入新密碼'),password_last_changed=now() where user='root';
3.6 數據庫配置
mysql -u root -p
mysql> CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql> CREATE USER 'sonar' IDENTIFIED BY 'sonar_1234';
mysql> GRANT ALL ON sonar. TO 'sonar'@'%' IDENTIFIED BY 'sonar_1234';
mysql> GRANT ALL ON sonar. TO 'sonar'@'localhost' IDENTIFIED BY 'sonar_1234';
mysql> FLUSH PRIVILEGES;
注意:如數據庫配置錯誤可參考https://blog.csdn.net/zq_zhang/article/details/77444753?utm_source=blogxgwz5
3.7退出數據庫 quit
注意踩坑之處特別說明:
安裝完成數據庫並拿到初始密碼出現無法登入的情況,造成出現的原因可能是隨機的字符串密碼出現轉義造成無法登錄,(此坑文檔小哥遇到過太坑了),解決辦法如下:
修改配置文件
vim /etc/my.cnf
在 pid 開頭的下一句加入
skip-grant-tables
保存退出,重啟mysql服務
service mysqld restart
此時可以無密登錄mysql 並修改密碼(修改密碼命令如上)
密碼修改完成后請再次進入 vim /etc/my.cnf 將加入的語句直接刪除
4.安裝sonarqube和 sonarqube-runner或者sonar-scanner
在安裝之前,介紹一下SonarQube和SonarQube Runner之間的關系。
SonarQube是服務器端,它主要有兩個功能:1.分析源代碼;2.因為它內嵌了Apache模塊,所以提供Web端的界面訪問。
SonarQube Runner是一個利用SonarQube服務端分析代碼的命令行工具,可以把它簡單理解為客戶端。
所以,為了安裝和調試方便,建議SonarQube和SonarQube Runner都下載。
建議安裝后並解壓到 usr/local
sonarqube下載地址: https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-6.7.5.zip
sonarqube-runner下載地址
wget http://repo1.maven.org/maven2/org/codehaus/sonar/runner/sonar-runner-dist/2.4/sonar-runner-dist-2.4.zip
sonar-scanner下載地址 (與sonar-runner 效果差不多)
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.3.0.1492-linux.zip
sonarqube等插件下載速度賊慢,如有需要建議直接找文檔小哥要安裝包
4.1.下載各安裝包完成后將文件壓縮到/usr/local 如圖所示
4.2配置sonarqube 環境變量 vim /etc/profile 加入如下代碼
export SONAR_HOME=/usr/local/sonarqube-6.7.5
export SONAR_RUNNER_HOME=/usr/local/sonar-scanner-3.0.3.778-linux
export SONAR_RUNNER_HOME=/usr/local/sonar-runner-2.4
PATH=$PATH:$SONAR_HOME/bin:$SONAR_RUNNER_HOME/bin
export PATH
source /etc/profile 使之生效
驗證:
sonar-runner -v
SonarQube Runner 2.4
Java 1.8.0_181 Oracle Corporation (64-bit)
Linux 3.10.0-862.9.1.el7.x86_64 amd64
4.3 修改配置文件
4.3.1配置Sonarqube
進入配置文件mulu:cd /usr/local/sonarqube-6.7.5/conf
修改配置文件:vim sonar.properties,修改內容如下:
sonar.jdbc.username=sonar (第16行)
sonar.jdbc.password=Sonar_1234 #(配置數據庫用戶所用的密碼) (第17行)
sonar.jdbc.url=jdbc:mysql://127.0.0.1:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false (第26行)
sonar.web.host=192.168.31.218 #根據個人ip地址修改 (第105行)
sonar.web.port=9000 (第111行)
4.3.2配置 sonar-runner
進入目錄cd /usr/local/sonar-runner-2.4/conf,修改配置文件:vim sonar-runner.properties
修改內容:
#Configure here general information about the environment, such as SonarQube DB details for example
2 #No information about specific project should appear here
3
4 #----- Default SonarQube server
5 sonar.host.url=http://192.168.31.218:9000 # 根據個人ip地址修改
6
7 #----- PostgreSQL
8 #sonar.jdbc.url=jdbc:postgresql://localhost/sonar
9
10 #----- MySQL
11 sonar.jdbc.url=jdbc:mysql://127.0.0.1:3306/sonar?useUnicode=true&characterEncoding=utf8
12
13 #----- Oracle
14 #sonar.jdbc.url=jdbc:oracle:thin:@localhost/XE
15
16 #----- Microsoft SQLServer
17 #sonar.jdbc.url=jdbc:jtds:sqlserver://localhost/sonar;SelectMethod=Cursor
18
19 #----- Global database settings
20 sonar.jdbc.username=sonar
21 sonar.jdbc.password=Sonar_1234
22
23 #----- Default source code encoding
24 sonar.sourceEncoding=UTF-8
25
26 #----- Security (when 'sonar.forceAuthentication' is set to 'true')
27 sonar.login=admin
28 sonar.password=admin
4.3.3配置 sonar-scanner
#Configure here general information about the environment, such as SonarQube server connection details for example
#No information about specific project should appear here
#----- Default SonarQube server
sonar.host.url=http://192.168.31.218:9000
#----- Default source code encoding
sonar.sourceEncoding=UTF-8
4.3.4修改elasticsearch配置
vim /usr/local/sonarqube-6.7.5/elasticsearch/config
,修改配置為:
network.host: 192.168.31.218
#
# Set a custom port for HTTP:
#
http.port: 9200
4.4創建普通用戶 賦予權限
sonarqube需要普通用戶才能啟動,不能使用root用戶,這個比較好辦,新建用戶和組,更改屬組就可以:
[root@localhost local]# esadmin # 取普通用戶名字
[root@localhost local]# chown -R esadmin /usr/local/sonarqube-6.7.5
4.5啟動sonarqube
[esadmin@localhost local]# /usr/local/sonarqube-6.7.5/bin/linux-x86-64/sonar.sh start
注意:必須是普通用戶啟動,並賦予權限
4.5.1查看啟動狀態
su sonar ./bin/linux-x86-64/sonar.sh status
4.5.2跟蹤日志
tail -f /usr/local/sonarqube-6.7.5/logs/sonar.log
日志內容顯示如下則啟動成功
5.登入web端
登入地址: http://192.168.31.218:9000 # (根據個人ip地址登錄)
5.1創建項目
登入密碼為 配置sonar-runner所配置的賬號及密碼 這里配置的賬號密碼都是 admin
可以開始創建新項目名稱,新項目可以在幫助里面創建。
5.2 下載中文包
可以在sonar的第三方應用市場下載中文包
由於sonar版本問題可能無法在這里下載,可以進入以下地址下載對應的中文包
中文包下載地址:https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases
5.3 下載 sonar-pdfreport (質量分析報告插件)
質量分析報告插件下載地址:https://gitee.com/zzulj/sonar-pdf-plugin/releases
根據sonarqube版本下載相對應的版本,將插件放在 /usr/local/sonarqube-6.7.5/extensions/plugins
並重啟sonar
全局配置sonar-pdfreport
6,配置sonar-runner 或 sonar-scanner掃描工具
6.1 項目配置
在你所需要掃描的項目根目錄下創建配置配置文件
vim sonar-project.properties
#must be unique in a given SonarQube instance
# 為sonarqube中創建的令牌名字
sonar.projectKey= ruichi
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
# 該名字可以隨便取,主要用於結果展示的項目名字
sonar.projectName= cloud_phone
# 項目版本號,有可能一個文件多次掃描
sonar.projectVersion=1.0
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# This property is optional if sonar.modules is set.
# 需要掃描的代碼文件目錄
sonar.sources= src/
#這是target(如果沒編譯可以不寫)
sonar.java.binaries=target/classes (項目路徑)
# 需要掃描的代碼語言 如 Py PHP 等(注意 ,Python只寫py后綴)
sonar.language=java
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8
6.2 開始掃描
注意:需要切換到 sonar-project.properties 配置文件的 上級目錄位置執行,否則可能報錯
[root@localhost local]#/usr/local/sonar-runner-2.4/bin/sonar-runner
或者 (取決於你用何種掃描工具)
[root@localhost local]#/usr/local/sonar-scanner-3.3.0.1492-linux/bin/sonar-scanner
6.3 瀏覽器登陸
http://192.168.31.218:9000 結果如下:
6.4 獲取分析報告結果
找到所掃描的項目,可在“更多” 點擊下載pdf分析報告。