-
-
潜在缺陷(空指针)
-
糟糕的复杂度(难以理解)
-
重复(通用的方法需要归纳封装)
-
糟糕的注释
-
-
-
SonarQube Scanner
-
SonarQube Server
-
架构图:
-
是需要被分析的代码,例:前端商城html代码,java代码等
-
SonarQube Scanner
用于执行代码分析的工具,在Project的根目录下执行,我们还需要在Project下进行SonarQube配置,其中指定了工程的相关信息,还指定了SonarQube Server的地址,SonarQube Scanner分析完毕之后,会将结果上报到该Server。
-
SonarQube Server
注:因为版本之间的安装要求不同部署时请看一下各版本的 官方文档,在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 |
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官方地址: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)
二进制包下载: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
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;
如果您在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
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
注:这里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
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
判断linux是32位还是64位:uname -a su - sonarqube cd /usr/local/sonarqube/bin/linux-x86-64/ 普通启动:./sonar.sh console 后台启动:./sonar.sh start 通过指令:netstat -tnlp 检查9000端口是否启动成功
方式二:下载插件安装
查看各版本兼容情况:
地址: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
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 -->查看状态
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配置会用到:
sonar-scanner \ -Dsonar.projectKey=jeesns \ -Dsonar.sources=. \ -Dsonar.host.url=http://10.0.0.7:9000 \ -Dsonar.login=5e549a887d69ec7b8130cd56d45b22b738a7af29
5e549a887d69ec7b8130cd56d45b22b738a7af29
java项目检查命令保留:
mvn sonar:sonar \ -Dsonar.projectKey=jeesns \ -Dsonar.host.url=http://10.0.0.7:9000 \ -Dsonar.login=5e549a887d69ec7b8130cd56d45b22b738a7af29
其他源码检查保留:
注:将检查其他代码的命令复制到代码目录下面