天天看點

代碼品質管理工具-SonarQube

一、前期準備

1.1 JDK 11.0安裝

可參考JDK 1.8的安裝教程:https://blog.csdn.net/weixin_41668084/article/details/111147667

1.2 PostgreSQL安裝

參考連結:https://blog.csdn.net/weixin_41668084/article/details/113865237

**注意:**SonarQube 7.9起不再支援MySQL資料庫。

1.3 SonarQube下載下傳

下載下傳連結:https://www.sonarqube.org/downloads/
代碼品質管理工具-SonarQube

1.3.1 數庫庫添加

# 建立使用者
create user sonar with password '123456';   
# 建立資料庫
create database sonar owner sonar;
# 授權
grant all privileges on database sonar to sonar;   			
# 切換到sonar資料庫
\c sonar
# 建立schema指定owner
create schema my_schema authorization sonar;
           

1.4 Sonar-Scanner下載下傳

下載下傳連結:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/
代碼品質管理工具-SonarQube

1.5 檔案上傳

代碼品質管理工具-SonarQube

二、SonarQube安裝

2.1 使用者添加

#添加使用者
useradd sonar
#使用者密碼添加
passwd sonar
           

2.2 檔案解壓

#建立檔案
mkdir /usr/local/sonar
# 解壓檔案
unzip sonarqube-7.9.5.zip
# 移動檔案并重命名
mv sonarqube-7.9.5 /usr/local/sonar/sonarqube
           

2.3 修改sonarqube使用者組

chown -R sonar:sonar/usr/local/sonar/sonarqube
           

2.4 優化系統的參數

2.4.1 臨時優化

sysctl -w  vm.max_map_count=262144
sysctl -w fs.file-max=65536
ulimit -u 4096 sonar
ulimit -n 65536 sonar
           

2.4.2 持久優化

2.4.2.1 修改最大線程數
#修改/etc/security/limits.conf檔案,增加配置,使用者退出後重新登入生效
vim /etc/security/limits.conf
           
代碼品質管理工具-SonarQube

2.4.2.2 修改系統配置檔案

vim /etc/sysctl.conf
           
代碼品質管理工具-SonarQube

2.5 更改配置檔案

2.5.1 配置資料庫登入使用者和密碼

# 修改配置檔案
vim /usr/local/sonar/sonarqube/conf/sonar.properties
sonar.jdbc.username=sonar
sonar.jdbc.password=123456
           
代碼品質管理工具-SonarQube

2.5.2 配置資料庫連結池相關屬性

sonar.jdbc.maxActive=60
sonar.jdbc.maxIdle=5
sonar.jdbc.minIdle=2
sonar.jdbc.maxWait=5000
sonar.jdbc.minEvictableIdleTimeMillis=600000
sonar.jdbc.timeBetweenEvictionRunsMillis=30000
           
代碼品質管理工具-SonarQube

2.5.3 配置web通路相關

sonar.web.host=0.0.0.0
sonar.web.port=9000
           
代碼品質管理工具-SonarQube

2.6 啟動SonarQube

#切換使用者(sonar),必須以sonar使用者啟動
su - sonar
#啟動SonarQube
./usr/local/sonar/sonarqube/bin/linux-x86-64/sonar.sh console	#控制台啟動
./usr/local/sonar/sonarqube/bin/linux-x86-64/sonar.sh start		#背景啟動
./usr/local/sonar/sonarqube/bin/linux-x86-64/sonar.sh status	#啟動狀态
./usr/local/sonar/sonarqube/bin/linux-x86-64/sonar.sh restart	#重新啟動
./usr/local/sonar/sonarqube/bin/linux-x86-64/sonar.sh stop		#系統停止
           
代碼品質管理工具-SonarQube

2.6.1 資料表檢視

代碼品質管理工具-SonarQube

2.6.2 頁面登入

預設登入賬号:admin,密碼:admin
代碼品質管理工具-SonarQube

2.7 SonarQube漢化

2.7.1 插件中心下載下傳

代碼品質管理工具-SonarQube

2.7.2 漢化插件離線安裝

插件下載下傳位址:https://github.com/xuhuisheng/sonar-l10n-zh/releases/tag/sonar-l10n-zh-plugin-1.29
代碼品質管理工具-SonarQube
#上傳檔案到指定檔案
cd /usr/local/sonar/sonarqube/extensions/plugins
#改變檔案使用者組
chown sonar:sonar sonar-l10n-zh-plugin-1.29.jar
           
代碼品質管理工具-SonarQube

2.7.3 重新開機系統,檢視頁面

代碼品質管理工具-SonarQube

2.8 SonarQube加入開機自啟動

2.8.1 建立軟連結

ln -s /usr/local/sonar/sonarqube/bin/linux-x86-64/sonar.sh /usr/bin/sonar
           

2.8.2 建立服務

vim /etc/init.d/sonarqube
cat /etc/init.d/sonarqube
#内容如下
#!/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

#export JAVA_HOME=/usr/local/java/

su sonar /usr/bin/sonar $*
           

2.8.3 增加執行權限

chmod +x /etc/init.d/sonarqube
           

2.8.4 添加服務

chkconfig --add sonarqube
           

2.8.5 配置服務啟動時依賴的jdk

vim /usr/local/sonar/sonarqube/conf/wrapper.conf
           
代碼品質管理工具-SonarQube

2.8.6 加入開機啟動

service sonarqube on
           

2.8.6 啟動服務

service sonarqube start		#啟動
service sonarqube restart	#重新開機
service sonarqube console	#控制台啟動
service sonarqube stop		#終止
service sonarqube status	#狀态
           

三、Sonar-Scanner安裝

3.1 檔案解壓

#解壓檔案
unzip sonar-scanner-cli-4.6.0.2311-linux.zip
#移動檔案并重命名
mv sonar-scanner-4.6.0.2311-linux/ /usr/local/sonar/sonarscanner
           

3.2 添加環境變量

#配置環境變量
vim /etc/profile
#檔案末尾添加
export SONAR_SCANNER_HOME=/usr/local/sonar/sonarscanner
export PATH=$PATH:${SONAR_SCANNER_HOME}/bin
           
代碼品質管理工具-SonarQube

儲存後執行下面的指令,使配置生效!

# 使配置生效
source /etc/profile
           

3.3 配置sonar-scanner

#配置檔案
vim /usr/local/sonar/sonarscanner/conf/sonar-scanner.properties
           
代碼品質管理工具-SonarQube

3.4 驗證sonar-scanner

sonar-scanner -h
           
代碼品質管理工具-SonarQube

四、SonarQube項目實踐

4.1 使用工具

idea,maven, sonarqube, sonarscanner

4.2 實踐方式

4.2.1 修改maven添加sonar配置+pom檔案導入sonar插件

4.2.1.1 maven配置檔案修改
<settings>
 <profiles>
   <profile>
        <id>sonar</id>
            <properties>
            <sonar.jdbc.url>jdbc:postgresql://192.168.61.80/sonar?currentSchema=my_schema</sonar.jdbc.url>
            <sonar.jdbc.driver>org.postgresql.Driver</sonar.jdbc.driver>
            <sonar.jdbc.username>sonar</sonar.jdbc.username>
            <sonar.jdbc.password>123456</sonar.jdbc.password>
            <sonar.host.url>http://192.168.61.81:9000/</sonar.host.url>
        </properties>
    </profile>
  </profiles>

  <!-- activeProfiles
   | List of profiles that are active for all builds.
   |
   -->
  <activeProfiles>
    <activeProfile>sonar</activeProfile>
  </activeProfiles>
</settings>
           
4.2.1.2 pom檔案添加sonar插件
<plugin>
  <groupId>org.sonarsource.scanner.maven</groupId>
  <artifactId>sonar-maven-plugin</artifactId>
  <version>3.8.0.2131</version>
</plugin>
           
代碼品質管理工具-SonarQube
4.2.1.3 執行掃描
代碼品質管理工具-SonarQube
4.2.1.4 sonarqube掃描檢視
代碼品質管理工具-SonarQube

4.2.2 pom檔案添加sonar配置和sonar插件

4.2.2.1 添加sonar配置
<profiles>
    <profile>
      <id>sonar</id>
      <properties>
        <sonar.jdbc.url>jdbc:postgresql://192.168.61.80/sonar?currentSchema=my_schema</sonar.jdbc.url>
        <sonar.jdbc.driver>org.postgresql.Driver</sonar.jdbc.driver>
        <sonar.jdbc.username>sonar</sonar.jdbc.username>
        <sonar.jdbc.password>123456</sonar.jdbc.password>
        <sonar.host.url>http://192.168.61.81:9000/</sonar.host.url>
      </properties>
      <activation>
          <activeByDefault>true</activeByDefault>
      </activation>
    </profile>
  </profiles>
           
4.2.2.2 添加sonar配置
<plugin>
  <groupId>org.sonarsource.scanner.maven</groupId>
  <artifactId>sonar-maven-plugin</artifactId>
  <version>3.8.0.2131</version>
</plugin>
           
掃描項目與檢視同上

4.2.3 使用sonar-scanner掃描

4.2.3.1 項目根目錄下添加 sonar-project.properties
#項目的key
sonar.projectKey=jenkins-gitlab-key
#項目的名字
sonar.projectName=jenkins-gitlab-sonar-scanner
#項目的版本
sonar.projectVersion=1.0.0
#需要分析的源碼的目錄,多個目錄用英文逗号隔開
sonar.sources=/app/jenkins-gitlab
#二進制檔案
sonar.java.binaries=/app/jenkins-gitlab/target/classes
           

4.2.3.2 sonar-scanner掃描

sonar-scanner
           
代碼品質管理工具-SonarQube
4.2.3.3 SonarQube頁面驗證
代碼品質管理工具-SonarQube

4.2.4 Maven指令執行

4.2.4.1 SonarQube建立掃描項目
代碼品質管理工具-SonarQube
4.2.4.2 idea建立項目,并執行掃描

掃描指令:

mvn sonar:sonar \
  -Dsonar.projectKey=Jenkins-SonarQube \
  -Dsonar.host.url=http://192.168.61.81:9000 \
  -Dsonar.login=2ddec215c10e5aa8c552bef3c37f32de9c32019a
           

掃描記錄:

E:\PATS\Projects\JavaLearn\jenkins-sonarqube>mvn sonar:sonar -Dsonar.projectKey=Jenkins-SonarQube -Dsonar.host.url=http://192.168.61.81:9000 -Dsonar.login=2ddec215c10e5aa8c552bef3c37f32
de9c32019a
[INFO] Scanning for projects...
[INFO]
[INFO] -----------------------< com.jenkins:sonarqube >------------------------
[INFO] Building sonarqube 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- sonar-maven-plugin:3.7.0.1746:sonar (default-cli) @ sonarqube ---
[INFO] User cache: C:\Users\Administrator\.sonar\cache
[INFO] SonarQube version: 7.9.5
[INFO] Default locale: "zh_CN", source code encoding: "UTF-8"
[WARNING] SonarScanner will require Java 11 to run starting in SonarQube 8.x
[INFO] Load global settings
[INFO] Load global settings (done) | time=63ms
[INFO] Server id: 48F3CEBB-AXe5bCYaWLFD_1L1uUGJ
[INFO] User cache: C:\Users\Administrator\.sonar\cache
[INFO] Load/download plugins
[INFO] Load plugins index
[INFO] Load plugins index (done) | time=34ms
[INFO] Plugin [l10nzh] defines 'l10nen' as base plugin. This metadata can be removed from manifest of l10n plugins since version 5.2.
[INFO] Load/download plugins (done) | time=68ms
[INFO] Process project properties
[INFO] Execute project builders
[INFO] Execute project builders (done) | time=6ms
[INFO] Project key: Jenkins-SonarQube
[INFO] Base dir: E:\PATS\Projects\JavaLearn\jenkins-sonarqube
[INFO] Working dir: E:\PATS\Projects\JavaLearn\jenkins-sonarqube\target\sonar
[INFO] Load project settings for component key: 'Jenkins-SonarQube'
[INFO] Load project settings for component key: 'Jenkins-SonarQube' (done) | time=18ms
[INFO] Load quality profiles
[INFO] Load quality profiles (done) | time=45ms
[INFO] Load active rules
[INFO] Load active rules (done) | time=421ms
[INFO] Indexing files...
[INFO] Project configuration:
[INFO] 3 files indexed
[INFO] Quality profile for java: Sonar way
[INFO] Quality profile for xml: Sonar way
[INFO] ------------- Run sensors on module sonarqube
[INFO] Load metrics repository
[INFO] Load metrics repository (done) | time=14ms
[INFO] Sensor JavaSquidSensor [java]
[INFO] Configured Java source version (sonar.java.source): 8
[INFO] JavaClasspath initialization
[INFO] JavaClasspath initialization (done) | time=15ms
[INFO] JavaTestClasspath initialization
[INFO] JavaTestClasspath initialization (done) | time=3ms
[INFO] Java Main Files AST scan
[INFO] 1 source files to be analyzed
[INFO] Load project repositories
[INFO] Load project repositories (done) | time=13ms
[INFO] 1/1 source files have been analyzed
[WARNING] Classes not found during the analysis : [javax.annotation.meta.When]
[INFO] Java Main Files AST scan (done) | time=420ms
[INFO] Java Test Files AST scan
[INFO] 1 source files to be analyzed
[INFO] 1/1 source files have been analyzed
[INFO] Java Test Files AST scan (done) | time=38ms
[INFO] Sensor JavaSquidSensor [java] (done) | time=893ms
[INFO] Sensor JaCoCo XML Report Importer [jacoco]
[INFO] Sensor JaCoCo XML Report Importer [jacoco] (done) | time=5ms
[INFO] Sensor SurefireSensor [java]
[INFO] parsing [E:\PATS\Projects\JavaLearn\jenkins-sonarqube\target\surefire-reports]
[INFO] Sensor SurefireSensor [java] (done) | time=7ms
[INFO] Sensor JaCoCoSensor [java]
[INFO] Sensor JaCoCoSensor [java] (done) | time=3ms
[INFO] Sensor JavaXmlSensor [java]
[INFO] 1 source files to be analyzed
[INFO] Sensor JavaXmlSensor [java] (done) | time=101ms
[INFO] 1/1 source files have been analyzed
[INFO] Sensor HTML [web]
[INFO] Sensor HTML [web] (done) | time=11ms
[INFO] Sensor XML Sensor [xml]
[INFO] 1 source files to be analyzed
[INFO] Sensor XML Sensor [xml] (done) | time=81ms
[INFO] 1/1 source files have been analyzed
[INFO] ------------- Run sensors on project
[INFO] Sensor Zero Coverage Sensor
[INFO] Sensor Zero Coverage Sensor (done) | time=9ms
[INFO] Sensor Java CPD Block Indexer
[INFO] Sensor Java CPD Block Indexer (done) | time=10ms
[INFO] SCM Publisher is disabled
[INFO] 1 file had no CPD blocks
[INFO] Calculating CPD for 0 files
[INFO] CPD calculation finished
[INFO] Analysis report generated in 44ms, dir size=84 KB
[INFO] Analysis report compressed in 47ms, zip size=15 KB
[INFO] Analysis report uploaded in 25ms
[INFO] ANALYSIS SUCCESSFUL, you can browse http://192.168.61.81:9000/dashboard?id=Jenkins-SonarQube
[INFO] Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report
[INFO] More about the report processing at http://192.168.61.81:9000/api/ce/task?id=AXe-hjYigf7k25Y1Cy_3
[INFO] Analysis total time: 3.117 s
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  6.423 s
[INFO] Finished at: 2021-02-20T16:20:03+08:00
[INFO] ------------------------------------------------------------------------

E:\PATS\Projects\JavaLearn\jenkins-sonarqube>
           
4.2.4.3 頁面驗證
代碼品質管理工具-SonarQube

以上,請參考!

參考連結

  1. 【環境搭建】SonarQube 8.0 部署到CentOS 6.8下
  2. CentOS安裝SonarQube7.9.1
  3. SonarQube - 中文插件安裝
  4. Sonar+IDEA + Maven的內建
  5. sonar安裝及使用篇
  6. SonarQube開機自啟動