• 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使用可参考)

  • 相关阅读:
    文本信息检索基本知识【转】
    单纯形【转】
    云飘忽不定?且看多种多样的云存储应用【转】
    海量数据来临 分层存储才是解决之道【转】
    伽玛函数_gamma
    设计模式理解创建模式
    Memory management demo from TCPL
    Welcome to asm!
    Monokai scheme for Qt
    Astyle for qtcreator
  • 原文地址:https://www.cnblogs.com/yuhaohao/p/12900354.html
Copyright © 2020-2023  润新知