• 部署SonarQube代码质量检查7.7版本


    概述

    官方地址:https://www.sonarqube.org/

    SonarQube检查功能

    1. 不遵循代表标准(checkstyle)

    2. 潜在缺陷(空指针)

    3. 糟糕的复杂度(难以理解)

    4. 重复(通用的方法需要归纳封装)

    5. 糟糕的注释

    6. 糟糕的设计(耦合度检查)

    SonarQube框架

    • Project

    • SonarQube Scanner

    • SonarQube Server

    • SonarQube Database

    架构图:

    • Project

      是需要被分析的代码,例:前端商城html代码,java代码等

    • SonarQube Scanner

      用于执行代码分析的工具,在Project的根目录下执行,我们还需要在Project下进行SonarQube配置,其中指定了工程的相关信息,还指定了SonarQube Server的地址,SonarQube Scanner分析完毕之后,会将结果上报到该Server。

    • SonarQube Server

      显示分析结果的Web Server,在SonarQube Scanner第一次将一个工程的分析结果上报给SonarQube Server后,Server上会自动创建一个工程显示分析的结果,可以在Server上设置代码质量管理相关的各种配置,如设置代码检查规则(Rule)和质量门限(Quality Gate)等。

    注:因为版本之间的安装要求不同部署时请看一下各版本的 官方文档,在7.8版本及以后JVM环境不在支持 jdk8,而是改为 jdk11+,数据库也不在支持MySQL,数据库字符集为utf8

    环境准备

      环境规划:

    主机 公网ip 系统版本 jdk版本 sonarqube版本 数据库 内存
    web01 10.0.0.7 CentOS-7.6.1810 1.8.0_241 7.7 社区版 mysql 5.7 3G+

      阿里镜像:

    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

    安装jdk8

    jdk8官方地址:https://www.oracle.com/java/technologies/javase-jdk8-downloads.html

    1.8.0_241版本rpm包:https://pan.baidu.com/s/1QyWPJ84Oh6dLQfI6-svD1g 提取码:kogd

    yum  localinstall jdk-8u241-linux-x64.rpm -y
    java -version
    java version "1.8.0_241"
    Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
    Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)

    安装MySQL

    官方网站:https://www.mysql.com/

    二进制包下载:https://pan.baidu.com/s/1xxq1r8alOfRt86sMMxbgxA 提取码:srbs

    检查历史环境

    rpm -qa |grep mariadb
    rpm -qa | grep mysql

    创建用户和组

    #用户不登录系统
    id mysql
    useradd mysql -s /sbin/nologin
    uid=1000(mysql) gid=1000(mysql) groups=1000(mysql)

    注:如果mysql id为27,就是以前创建过。

    创建相关目录

    #创建软件目录
    mkdir -p /app/database/
    #创建数据目录
    mkdir -p /data/3306/
    #创建日志目录
    mkdir -p /binlog/3306/
    
    #目录授权
    chown -R mysql.mysql /app/ /data/ /binlog

    上传并解压

    cd /app/database/   
    tar xf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
    ln -s mysql-5.7.28-linux-glibc2.12-x86_64 mysql

    设置环境变量

    vim /etc/profile
    export PATH=/app/database/mysql/bin:$PATH
    source /etc/profile
    mysql -V
    mysql  Ver 14.14 Distrib 5.7.28, for linux-glibc2.12 (x86_64) using  EditLine wrapper

    初始化系统表

    #安装依赖包
    yum install -y libaio-devel
    #初始化
    mysqld --initialize-insecure --user=mysql --basedir=/app/database/mysql --datadir=/data/3306/

    配置文件设置

    cat > /etc/my.cnf <<EOF
    [mysqld]
    user=mysql
    basedir=/app/database/mysql
    datadir=/data/3306
    server_id=6
    port=3306
    socket=/tmp/mysql.sock
    [mysql]
    socket=/tmp/mysql.sock
    EOF

    准备启动脚本

    cd /app/database/mysql/support-files/
    cp mysql.server /etc/init.d/mysqld

    centos7启动方式

    chkconfig --add mysqld
    service mysqld stop
    Shutting down MySQL.. SUCCESS! 
    systemctl start mysqld

    数据库创建用户并授权

    #创建用户
    create user 'sonar' identified by '123455';
    #创建sonar数据库
    create database sonar character set utf8 collate utf8_general_ci;
    #授权10网段主机登录
    grant all on sonar.* to 'sonar'@'10.0.0.%' identified by '123456';
    #授权本地主机登录
    grant all on sonar.* to 'sonar'@'localhost' identified by '123456'
    flush privileges;

    配置elasticsearch需要的环境

    如果您在Linux上运行,则必须确保:

    • vm.max_map_count 大于或等于262144

    • fs.file-max 大于或等于65536

    • 运行SonarQube的用户可以打开至少65536个文件描述符

    • 运行SonarQube的用户可以打开至少2048个线程

    您可以使用以下命令查看值:

    sysctl vm.max_map_count
    sysctl fs.file-max
    ulimit -n
    ulimit -u

    临时修改

    您可以通过运行以下命令来为当前会话动态设置它们 root

    sysctl -w vm.max_map_count=262144
    #CentOs7默认值都比这个大
    sysctl -w fs.file-max=65536
    ulimit -n 65536
    ulimit -u 2048

    永久修改

    vim  /etc/security/limits.conf
    *        hard    nofile           65536
    *        soft    nofile           65536
    
    vim /etc/sysctl.conf
    vm.max_map_count=262144
    fs.file-max=65536
    
    #命令行同时输入,这样我们不用重启,下次重启也能生效
    sysctl -w vm.max_map_count=262144
    #CentOs7默认值都比这个大
    sysctl -w fs.file-max=65536
    ulimit -n 65536
    ulimit -u 65536

    seccomp过滤器

    注:这里Centos7系统默认开启

    默认情况下,Elasticsearch使用seccomp filter。在大多数发行版中,此功能已在内核中激活,但是在诸如Red Hat Linux 6的发行版中,此功能已停用。如果使用不具有此功能的发行版,并且无法在激活seccomp的情况下升级到较新版本,则必须通过sonar.search.javaAdditionalOpts$ SONARQUBE HOME / conf / sonar.properties_中进行更新来显式停用此安全层:

    sonar.search.javaAdditionalOpts=-Dbootstrap.system_call_filter=false

    您可以使用以下方法检查seccomp在内核上是否可用:

    grep SECCOMP /boot/config-$(uname -r)

    如果您的内核具有seccomp,您将看到:

    CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
    CONFIG_SECCOMP_FILTER=y
    CONFIG_SECCOMP=y

    安装Sonarkuube服务端

    7.7版本官方文档:https://docs.sonarqube.org/7.7/requirements/requirements/

    创建用户、解压、创建目录

    注:es启动时不能使用root 用户启动

    useradd sonarqube
    echo "sonarqube:123456" |chpasswd
    
    
    #下载并解压
    wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.7.zip
    unzip sonarqube-7.7.zip
    mv sonarqube-7.7 /usr/local/sonarqube
    chown  sonarqube:sonarqube -R  /usr/local/sonarqube/
    
    mkdir -p /data/sonarqube/{data,temp}
    chown sonarqube:sonarqube -R /data/sonarqube/

    修改配置文件

    vim /usr/local/sonarqube/conf/sonar.properties
    
    sonar.jdbc.username=sonar
    sonar.jdbc.password=123456
    sonar.login=admin
    sonar.password=admin
    sonar.jdbc.url=jdbc:mysql://10.0.0.7:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
    sonar.web.javaOpts=-server
    sonar.path.data=/data/sonarqube/data
    sonar.path.temp=/data/sonarqube/temp

    启动sonarqube

    判断linux是32位还是64位:uname -a
    su - sonarqube
    cd /usr/local/sonarqube/bin/linux-x86-64/
    普通启动:./sonar.sh console
    后台启动:./sonar.sh start   
    通过指令:netstat -tnlp     检查9000端口是否启动成功

    web登录

    进入ip+端口9000。使用admin/admin登录

    sonarqube汉化

    方式一:直接安装插件(网络慢会下载失败)

     方式二:下载插件安装

    查看各版本兼容情况:

    地址:https://github.com/SonarQubeCommunity/sonar-l10n-zh

    旧版本下载地址:https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases/latest

    #插件下载地址
    wget https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-1.27/sonar-l10n-zh-plugin-1.27.jar
    
    cp sonar-l10n-zh-plugin-1.27.jar  /usr/local/sonarqube-7.7/extensions/plugins/
    #重启sonarqube

    开机自启动

    1. 创建任务

    vi /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  
    /usr/local/sonarqube/bin/linux-x86-64/sonar.sh $* 

    2.增加执行权限

    chmod +x /etc/init.d/sonar

    3.添加任务

    chkconfig --add sonar

    4.配置服务启动时的jdk

    注:这里我们使用的是二进制jdk,路径默认是/usr/bin下

    # which java
    /usr/bin/java
    
    vi /opt/sonarqube/conf/wrapper.conf
    修改wrapper.java.command=java,配置为jdk中java命令的绝对路径
    wrapper.java.command=/usr/bin/java

    5. 管理命令

    service sonar start        -->开启
    service sonar stop        -->关闭        
    service sonar restart    -->重启
    service sonar status    -->查看状态

    安装sonar-scaner扫描器

    安装jdk

    注:扫描器需要部署在有Jenkins的主机上面,扫描器也需要java环境

    yum localinstall jdk-8u241-linux-x64.rpm -y
    java -version

    安装扫描器

    官方文档:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/

    sonar-scaner下载地址:https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/

    https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.3.0.2102.zip
    unzip sonar-scanner-cli-4.3.0.2102.zip
    mv sonar-scanner-4.3.0.2102 /usr/local/sonar-scanner
    ln -s /usr/local/sonar-scanner/bin/sonar-scanner /usr/bin/
    sonar-scanner

    配置文件

    注:如果扫描器和服务不在一个主机请看配置文件

    vim  /usr/local/sonar-scanner/conf/sonar-scanner.properties
    #连接主机使用,这里在一个主机我们默认
    sonar.host.url=http://localhost:9000
    
    #----- Default source code encoding
    #sonar.sourceEncoding=UTF-8

    项目实例

    创建项目:

    配置:

    创建token保留,后期Jenkins配置会用到:

    5e549a887d69ec7b8130cd56d45b22b738a7af29

    java项目检查命令保留:

    mvn sonar:sonar 
      -Dsonar.projectKey=jeesns 
      -Dsonar.host.url=http://10.0.0.7:9000 
      -Dsonar.login=5e549a887d69ec7b8130cd56d45b22b738a7af29

    其他源码检查保留:

    检查html代码结果(这里代码自己查找):

    注:将检查其他代码的命令复制到代码目录下面

    Jenkins集成sonarqube

    请看这篇文章下面演示:https://www.cnblogs.com/Mercury-linux/p/12661786.html#autoid-2-3-0

  • 相关阅读:
    报错apachectl restart
    报错apachectl -t
    LAMP 1.6 Discuz安装
    LAMP 1.4 PHP编译安装
    LAMP 1.2 Apache编译安装
    java时间操作
    URL参数中文乱码解决
    python | mongodb 常用命令
    python | Linux的上的MongoDB的安装与卸载
    python | 对 Flask 蓝图(Blueprint)的理解
  • 原文地址:https://www.cnblogs.com/Mercury-linux/p/12688120.html
Copyright © 2020-2023  润新知