SonarQube的使用


一.簡單介紹

SonarQube是一種自動代碼審查工具,用於檢測代碼中的錯誤,漏洞和代碼異味。它可以與您現有的工作流程集成,以便在項目分支和拉取請求之間進行連續的代碼檢查,在很多企業中都會使用到,進行代碼質量分析展示與管理。目前支持java,C#,C/C++,Python,PL/SQL,Cobol,JavaScrip,Groovy等二十幾種編程語言的代碼質量管理與檢測。
另外SonarQube自動分析是常見的持續集成自動部署的環節。

二.部署安裝

2.1 安裝環境

這里說明下基礎環境的版本

  • SonarQube版本:7.7
  • 操作系統:Centos7.x
  • JDK 1.8
  • 數據庫:Mysql-5.6

2.2 SonarQube簡單介紹

SonarQube整個架構包含4個組件:
1.SonarQube服務端:包含web服務界面、elasticsearch搜索引擎、計算引擎三個主要部分。
2.SonarQube數據庫存儲端。
3.SonarQube插件,包括語言、SCM、集成、身份驗證和治理插件等。
4.SonarScanner客戶端,開發人員或持續集成服務器通過SonarScanner進行項目代碼分析。

對於開發過程常用的流程為:開發人員開發完代碼后,提交到Git等代碼版本管理工具,然后觸發jenkins等持續集成工具進行代碼分析檢測,並將數據傳到SonarQube服務端存儲在數據庫中,相應的代碼問題則展示在web頁面上,通知開發人員進行解決,以此循環來保證代碼質量。

2.3 安裝

2.3.1 安裝java 11

[root@centos7 ~]# yum install java-11-openjdk.x86_64 java-11-openjdk-devel.x86_64 -y 

2.3.2 安裝postgresql數據庫

安裝

# 安裝yum 倉庫
[root@centos7 ~]# yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm -y
# 查看postgresql的版本
[root@centos7 ~]# yum list |grep postgresql
# 安裝postgresql11版本
[root@centos7 ~]# yum install -y postgresql11-contrib postgresql11-server

初始化數據庫

[root@centos7 ~]# /usr/pgsql-11/bin/postgresql-11-setup initdb

啟動並設置開機啟動

[root@centos7 ~]# systemctl start postgresql-11
[root@centos7 ~]# systemctl enable postgresql-11

登錄postgresql設置密碼

[root@centos7 ~]# su - postgres
psql
# 將密碼設置為yuhaohao
ALTER USER postgres WITH PASSWORD 'yuhaohao';
# 輸入exit退出postgres用戶
exit

修改pg_hba.conf和postgresql.conf支持遠程登錄
修改pg_hba.conf

# 注意這里使用postgres用戶執行
vi /var/lib/pgsql/11/data/pg_hba.conf
# 注意將三行帶有replication注釋掉,並新增一行運行其它主機登錄的配置,具體修改如下:
local   all             all                                     md5
host    all             all             127.0.0.1/32            md5
host    all             all             ::1/128                 md5
host    all             all             0.0.0.0/0               md5
#local   replication     all                                     peer
#host    replication     all             127.0.0.1/32            ident
#host    replication     all             ::1/128                 ident

修改postgresql.conf

vi /var/lib/pgsql/11/data/postgresql.conf
# 增加如下行
listen_addresses = '*'

退出postgres用戶,重啟服務

exit 
[root@centos7 ~]# systemctl restart postgresql-11

這里數據庫已經可以遠程訪問

創建數據庫

[root@centos7 ~]# su - postgres
psql
create user sonar with password 'yuhaohao';
create database sonar owner sonar;
grant all on database sonar to sonar;
create schema my_schema;
exit
exit

創建sonarqube用戶

[root@centos7 ~]# useradd sonarqube

2.3.3 優化系統參數

[root@centos7 ~]# sysctl -w vm.max_map_count=262144
[root@centos7 ~]# sysctl -w fs.file-max=65536
[root@centos7 ~]# ulimit -u 4096 sonarqube
[root@centos7 ~]# ulimit -n 65536 sonarqube

2.3.4 安裝sonarqube

下載sonarqube並配置數據庫

# 下載sonarqube
[root@centos7 ~]# wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-8.0.zip
# 將文件復制到用戶目錄下
[root@centos7 ~]# cp -p sonarqube-8.0.zip /home/sonarqube/
# 給下載的文件更換用戶和屬組
[root@centos7 ~]# chown -R sonarqube:sonarqube /home/sonarqube/sonarqube-8.0.zip
# 安裝解壓工具
[root@centos7 ~]# yum install -y unzip
[root@centos7 ~]# su - sonarqube
[sonarqube@centos7 ~]$ cd /home/sonarqube/
[sonarqube@centos7 sonarqube]$ unzip sonarqube-8.0.zip
[sonarqube@centos7 sonarqube]$ vi sonarqube-8.0/conf/sonar.properties
sonar.jdbc.username=sonar
sonar.jdbc.password=yuhaohao
sonar.jdbc.url=jdbc:postgresql://127.0.0.1/sonar

更改JDK的配置

[sonarqube@centos7 sonarqube]$ vi sonarqube-8.0/conf/wrapper.conf
wrapper.java.command=/usr/lib/jvm/java-11/bin/java

添加系統服務

#退出sonarqube用戶
[sonarqube@centos7 sonarqube]$ exit
[root@centos7 ~]# ln -s /home/sonarqube/sonarqube-8.0/bin/linux-x86-64/sonar.sh  /usr/bin/sonar
[root@centos7 ~]# vi /etc/init.d/sonar
# 下面是/etc/init.d/sonar內容
#!/bin/sh
#
# rc file for SonarQube
#
# chkconfig: 345 96 10
# description: SonarQube system (www.sonarsource.org)
#
### BEGIN INIT INFO
# Provides: sonar
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 3 4 5
# Default-Stop: 0 1 2 6
# Short-Description: SonarQube system (www.sonarsource.org)
# Description: SonarQube system (www.sonarsource.org)
### END INIT INFO
su sonarqube -c "/usr/bin/sonar $*"
[root@centos7 ~]# chmod 755 /etc/init.d/sonar
[root@centos7 ~]# chkconfig --add sonar
[root@centos7 ~]# service sonar start
# 啟動后我們通過netstat查看服務對應端口是否啟動
[root@centos7 ~]# netstat -tunlp |grep 9000
tcp6       0      0 :::9000                 :::*                    LISTEN      5102/java
# 這里如果上面的服務端口沒有啟動,需要查看/home/sonarqube/sonarqube-8.0/logs目錄下的日志信息進行分析定位
[root@centos7 ~]# ls /home/sonarqube/sonarqube-8.0/logs -al
total 156
drwxr-xr-x  2 sonarqube sonarqube   102 Jun  2 05:45 .
drwxr-xr-x 11 sonarqube sonarqube   141 Oct 15  2019 ..
-rw-r--r--  1 sonarqube sonarqube 30048 Jun  2 05:55 access.log
-rw-r--r--  1 sonarqube sonarqube  1309 Jun  2 05:45 ce.log
-rw-r--r--  1 sonarqube sonarqube 23285 Jun  2 05:45 es.log
-rw-r--r--  1 sonarqube sonarqube    88 Oct 15  2019 README.txt
-rw-r--r--  1 sonarqube sonarqube 11835 Jun  2 05:45 sonar.log
-rw-r--r--  1 sonarqube sonarqube 81238 Jun  2 05:45 web.log

安裝中文插件

[root@centos7 ~]# su - sonarqube
[sonarqube@centos7 ~]$ wget https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-8.0/sonar-l10n-zh-plugin-8.0.jar -P sonarqube-8.0/extensions/plugins
[sonarqube@centos7 ~]$ exit
[root@centos7 ~]# chkconfig --add sonar
[root@centos7 ~]# service sonar restart

2.3.5 登錄sonarqube

這里登錄地址是http://${IP}:9000,初始賬戶名密碼為:admin和admin

2.3.6 安裝sonar-scanner

  • 下載sonar-scanner
[root@centos7 ~]# wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.2.0.1873-linux.zip
  • 安裝sonar-scanner
[root@centos7 ~]# mv sonar-scanner-cli-4.2.0.1873-linux.zip /usr/local/
[root@centos7 ~]# cd  /usr/local/ && unzip sonar-scanner-cli-4.2.0.1873-linux.zip
  • 修改配置文件
[root@centos7 local]# vi sonar-scanner-cli-4.2.0.1873-linux/conf/sonar-scanner.properties
# 修改成以下內容
sonar.host.url=http://localhost:9000
sonar.sourceEncoding=UTF-8
  • 配置環境變量
[root@centos7 ~]# vi /etc/profile
export SONARRUNNER_HOME=/usr/local/sonar-scanner-4.2.0.1873-linux
export PATH=$SONARRUNNER_HOME/bin:$PATH
# 配置生效
[root@centos7 ~]# source /etc/profile
  • 查看版本
[root@centos7 ~]# sonar-scanner -v
INFO: Scanner configuration file: /usr/local/sonar-scanner-4.2.0.1873-linux/conf/sonar-scanner.properties
INFO: Project root configuration file: NONE
INFO: SonarQube Scanner 4.2.0.1873
INFO: Java 11.0.3 AdoptOpenJDK (64-bit)
INFO: Linux 3.10.0-862.el7.x86_64 amd64

2.3.7 具體使用

這里,我們下載一份Java的代碼進行測試,代碼路徑為/home/test-service。
具體步驟如下:
1.代碼根目錄下新建配置文件sonar-project.properties

[root@centos7 ~]# cat /home/test-service/sonar-project.properties 
# 項目的key
sonar.projectKey=test-service
# 項目的名字,這里可以隨便寫,是在sonar中顯示
sonar.projectName=test-service
# 項目版本
sonar.projectVersion=1.0
#要掃描的代碼路徑,sonar-project.properties文件的相對路徑。【配成.或src】
sonar.sources=.
# 編碼格式
sonar.sourceEncoding=UTF-8
# java語言
sonar.language=java
sonar.java.binaries=./test-api-gateway/src
  1. 執行掃描
[root@centos7 ~]# cd /home/test-service/
# 在代碼根目錄下執行sonar-scanner
[root@centos7 test-service]# sonar-scanner
INFO: Scanner configuration file: /usr/local/sonar-scanner-4.2.0.1873-linux/conf/sonar-scanner.properties
INFO: Project root configuration file: /home/test-service/sonar-project.properties
INFO: SonarQube Scanner 4.2.0.1873
INFO: Java 11.0.3 AdoptOpenJDK (64-bit)
INFO: Linux 3.10.0-862.el7.x86_64 amd64
INFO: User cache: /root/.sonar/cache
INFO: SonarQube server 8.0.0
INFO: Default locale: "en_US", source code encoding: "UTF-8"
INFO: Load global settings
INFO: Load global settings (done) | time=85ms
INFO: Server id: 5AB7DE06-AXJ0a4iQdCx2Ays4Yl2O
INFO: User cache: /root/.sonar/cache
INFO: Load/download plugins
.....................
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 1:11.022s
INFO: Final Memory: 17M/60M
INFO: ------------------------------------------------------------------------

3.查看掃描結果
這里登錄sonarqube,可以查看具體的掃描詳情:

參考文章:
1.http://blog.luamas.com/2019/08/28/INSTALLATION-SONARQUBE
2.http://blog.luamas.com/2018/08/29/JENKINS-INTEGRATION-SONAR-SCANNER(具體配置jenkins使用可參考)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM