赞
踩
如果转载,还请注明我文章的链接,书写不易,互相珍重,期待技术交流
sonar用于进行代码的质量分析
系统环境:centos7.8
sonarqube:8.5.1
postgresql:postgresql-12.5
jre:openjdk-11
Yu
2020年11月
系统环境配置ip 主机名 关闭防火墙 selinux等,不再演示
官方说明
https://docs.sonarqube.org/8.5/requirements/requirements/
openjdk-11:http://jdk.java.net/java-se-ri/11
postgresql-12:https://www.postgresql.org/download/linux/redhat/
postgresql yum方式安装:
Install the repository RPM:
# sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Install PostgreSQL:
# sudo yum install -y postgresql12-server
Optionally initialize the database and enable automatic start:
# sudo /usr/pgsql-12/bin/postgresql-12-setup initdb
# sudo systemctl enable postgresql-12
# sudo systemctl start postgresql-12
从7.9版本开始 sonar不再建议使用mysql,当前其建议的三个数据库,仅剩postgresql是开源的。所以直接选postgresql
另外需要注意,如果是物理机,内存不要低于2G,如果是虚拟机,那内存不要低于3G,不然会出现启动失败或者jvm运行中宕机
IP | 主机名 | 作用 | 备注 |
---|---|---|---|
192.168.80.151 | node1 | gitlab | 访问url:http://local.gitlab.com |
192.168.80.152 | node2 | sonarqube | 访问url:http://local.sonar.com |
配置好hosts(集群内所有主机均需配置)
[root@node* ~]# vim /etc/hosts
192.168.80.151 node1
192.168.80.152 node2
192.168.80.153 node3
192.168.80.151 local.gitlab.com
192.168.80.152 local.sonar.com
[root@node2 ~]# ls openjdk-11+28_linux-x64_bin.tar.gz
openjdk-11+28_linux-x64_bin.tar.gz
解压并移动目录
[root@node2 ~]# tar xf openjdk-11+28_linux-x64_bin.tar.gz -C /usr/local/
配置环境变量
[root@node2 jdk-11]# vi /etc/profile
# 文件的最后位置添加
# java11 /usr/local/jdk-11环境变量
export JAVA_HOME=/usr/local/jdk-11
export JRE_HOME=\$JAVA_HOME/
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
生效环境变量
[root@node2 jdk-11]# source /etc/profile
验证版本
[root@node2 jdk-11]# java --version
openjdk 11 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)
配置yum源
[root@node2 ~]# yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
安装
[root@node2 ~]# yum install -y postgresql12-server
......
Complete!
初始化
[root@node2 ~]# /usr/pgsql-12/bin/postgresql-12-setup initdb
Initializing database ... OK
配置
这里有个大坑,postgresql-12默认的验证是 ident,但是sonar调用postgresql登录时,是利用的md5验证,这个坑困扰了我2个多小时。。。。启动不起来,看日志的话web.log日志里会记录一个数据库连接失败,不好排查
[root@node2 ~]# vi /var/lib/pgsql/12/data/pg_hba.conf
host all all 127.0.0.1/32 md5
# 复制这一行,如上将ident修改为md5 并且注释掉原本的那一行
启动
[root@node2 ~]# systemctl start postgresql-12
[root@node2 ~]# systemctl enable postgresql-12
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-12.service to /usr/lib/systemd/system/postgresql-12.service.
验证版本
[root@node2 ~]# psql --version
psql (PostgreSQL) 12.5
修改密码
PostgreSQL安装成功后,会在Linux系统中默认创建一个postgres用户,必须切换到postgres才可以访问PostgreSQL数据库,root用户无权访问 切换用户 [root@node2 ~]# su - postgres -bash-4.2$ -bash-4.2$ psql psql (12.5) Type "help" for help. postgres=# alter user postgres with password '123456'; ALTER ROLE
下载链接:https://www.sonarqube.org/downloads/
[root@node2 ~]# yum -y install unzip
[root@node2 ~]# unzip sonarqube-8.5.1.38104.zip
切换至postgres用户 登录数据库 root@node2 ~]# su - postgres Last login: Fri Dec 4 10:27:02 CST 2020 on pts/1 -bash-4.2$ psql psql (12.5) Type "help" for help. postgres=# 创建sonar数据库命名为sonar(随意) postgres=# create database sonar; CREATE DATABASE 创建一个sonar使用的用户(用户名随意) postgres=# create user sonar; CREATE ROLE 给sonar用户赋予密码 postgres=# alter user sonar with password '123456'; ALTER ROLE 给sonar用户授权 postgres=# alter role sonar createdb;alter role sonar superuser;alter role sonar createrole; ALTER ROLE ALTER ROLE ALTER ROLE 将sonar库所有者赋权给sonar用户 postgres=# alter database sonar owner to sonar; ALTER DATABASE
查看数据库 postgres=# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | sonar | sonar | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (4 rows) 查看用户 postgres=# \du List of roles Role name | Attributes | Member of -----------+------------------------------------------------------------+----------- postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} sonar | Superuser, Create role, Create DB | {} postgres=#
复制一个窗口,使用root用户 [root@node2 ~]# vi /etc/sysctl.conf # 文末追加 vm.max_map_count=262144 fs.file-max=65536 [root@node2 ~]# vi /etc/profile # 文末追加 ulimit -n 65536 应用生效 [root@node2 ~]# sysctl -p vm.max_map_count = 262144 fs.file-max = 65536 [root@node2 ~]# source /etc/profile [root@node2 ~]# ulimit -n 65536 [root@node2 ~]# vi /etc/security/limits.conf # 文末追加 * soft nofile 65536 * hard nofile 65536
max_map_count 文件包含限制一个进程可以拥有的VMA(虚拟内存区域)的数量
file-max 系统级别的能够打开的文件句柄的数量
ulimit 用户级别能够打开的文件句柄的数量
ElasticSearch组件不允许使用root启动
[root@node2 ~]# useradd sonar
[root@node2 ~]# passwd sonar
Changing password for user sonar.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@node2 ~]# mv sonarqube-8.5.1.38104 /usr/local/
[root@node2 ~]# chown -R sonar. /usr/local/sonarqube-8.5.1.38104
先来创建两个目录,用以存储数据
[root@node2 ~]# mkdir /data/sonarqube/data -p
[root@node2 ~]# mkdir /data/sonarqube/temp -p
赋权
[root@node2 ~]# chown -R sonar. /data/sonarqube
[root@node2 ~]# vi /usr/local/sonarqube-8.5.1.38104/conf/sonar.properties
18 sonar.jdbc.username=sonar
19 sonar.jdbc.password=123456
36 sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonar
102 sonar.web.host=0.0.0.0
108 sonar.web.port=9000
407 sonar.path.data=/data/sonarqube/data
408 sonar.path.temp=/data/sonarqube/temp
配置java路径
[root@node2 ~]# vi /usr/local/sonarqube-8.5.1.38104/conf/wrapper.conf
4 wrapper.java.command=/usr/local/jdk-11/bin/java
将sonar启动脚本链接到系统命令路径
[root@node2 ~]# ln -s /usr/local/sonarqube-8.5.1.38104/bin/linux-x86-64/sonar.sh /usr/bin/sonar
创建启动脚本
[root@node2 ~]# vi /etc/init.d/sonar
# 写入以下内容
# !/bin/bash
# rc file for SonarQube
/usr/bin/sonar $*
赋权
[root@node2 ~]# chmod 755 /etc/init.d/sonar
切换到sonar用户!!,否则Es启动会报错的
[root@node2 ~]# su - sonar
[sonar@node4 ~]$
[sonar@node2 ~]$ service sonar start
Starting SonarQube...
Started SonarQube.
或者配置域名hosts
修改C:\Windows\System32\drivers\etc\hosts文件
192.168.80.152 local.sonar.com
然后访问 http://local.sonar.com:9000 即可了
默认账户:admin
默认密码:admin
会提示重启
点击网页的 restart server 重启 等待一会就好了
如果遗忘了admin密码,可以直接去sonar库中,sql更新一下密码即可
默认sonar所有用户都可匿名访问web界面和内容,如果要设置为强制用户访问模式,按下图操作
默认情况下,有两个组:
sonar-administrators:默认仅有admin属于该组,但如果想要添加其他用户为管理员,也是可以的,可以在用户配置及组配置中添加进该组或者勾选用户到该组
sonar-users(默认):默认情况下,所有创建的新用户均属于该组
其实前面已经安装过一次插件了,即语言包
这里再来演示下
需要注意的是,有些插件开源版是是用不了的,会有提示的
不联网手动安装插件
如果不方便直接联网下载插件,也可以手工方式更新插件
前往官方插件下载界面,根据版本下载好插件后,将jar包放置到 ${sonar_home}/extensions/plugins目录下,
而且同一个插件的老版本和新版本是不能同时存在该目录的
[root@node2 ~]# cd /usr/local/sonarqube-8.5.1.38104/extensions/plugins/
[root@node4 plugins]# ls
README.txt sonar-l10n-zh-plugin-8.5.jar
也就是放在这个目录下,根据自己的安装位置而定
放置完成后,重启sonar服务即可
服务端安装完成了,但是sonar还需要客户端(扫描端)来完成整体的工作
扫描器扫描代码,然后发送到服务器端,sonar才能进行代码的分析
目前有以下几种扫描端形式:
命令行
构建工具(比如:Maven,gradle,ant等的sonarqube扫描器)
持续集成平台 (比如jenkins的sonarqube扫描器)
本地扫描器 (比如intelliJ Idea, eclipse的sonarqube扫描器)
但是不论哪种方式,都是将代码通过sonar的9000端口发送至sonar服务端来实现服务
我这里演示一下 Visual Studio Code 的 SonarLint
VScode也是近几年极为热门的一款开发工具,算是比较有代表性的
也可以直接快捷键 “ctrl + shift + x打开”
需要注意的是,如果本地缺JRE运行环境,会报错让你安装的
可以选择工具内下载,也可以自己安装,然后配置一下环境变量,然后再来vscode中,配置一下JRE路径
(我这里是windows10系统环境)
如上图,我写错一个地方,会根据错误程度有不同颜色波浪线提示,点击错误处出现小黄灯,然后就可以看到 sonatlint的错误提示
下载地址,https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/
比如我这里是centos7,下载对应的linux x64即可
[root@node3 ~]# ls sonar-scanner-cli-4.5.0.2216-linux.zip
sonar-scanner-cli-4.5.0.2216-linux.zip
配置域名解析
[root@node3 ~]# vim /etc/hosts
192.168.80.151 node1
192.168.80.152 node2
192.168.80.153 node3
192.168.80.151 local.gitlab.com
192.168.80.152 local.sonar.com
解压
[root@node3 ~]# unzip sonar-scanner-cli-4.5.0.2216-linux.zip
[root@node3 ~]# mv sonar-scanner-4.5.0.2216-linux/ /usr/local/
修改配置文件
[root@node3 ~]# cd /usr/local/sonar-scanner-4.5.0.2216-linux/
[root@node3 sonar-scanner-4.5.0.2216-linux]# vim conf/sonar-scanner.properties
#----- Default SonarQube server
sonar.host.url=http://local.sonar.com:9000
#----- Default source code encoding
sonar.sourceEncoding=UTF-8
sonar.jdbc.url=jdbc:postgresql://local.sonar.com:5432/sonar
sonar.jdbc.username=sonar
sonar.jdbc.password=123456
因为我们采用的postgresql默认是禁止远程登录的,所以我们还要去配置一下postgresql的远程访问权限
[root@node2 plugins]# vi /var/lib/pgsql/12/data/pg_hba.conf
host all all 0.0.0.0/0 md5
[root@node2 plugins]# vi /var/lib/pgsql/12/data/postgresql.conf
listen_addresses = '*'
生产环境一定不能全允许,要记得只限定某个IP或者IP段
重启postgresql
[root@node2 log]# systemctl restart postgresql-12
配置环境变量
[root@node3 bin]# pwd /usr/local/sonar-scanner-4.5.0.2216-linux/bin [root@node3 bin]# [root@node3 bin]# vim /etc/profile #文末追加 export PATH=$PATH:/usr/local/sonar-scanner-4.5.0.2216-linux/bin 环境变量生效 [root@node3 bin]# source /etc/profile 验证 [root@node3 bin]# sonar-scanner -v INFO: Scanner configuration file: /usr/local/sonar-scanner-4.5.0.2216-linux/conf/sonar-scanner.properties INFO: Project root configuration file: NONE INFO: SonarScanner 4.5.0.2216 INFO: Java 11.0.3 AdoptOpenJDK (64-bit) INFO: Linux 3.10.0-1127.13.1.el7.x86_64 amd64
[root@node3 tmp]# mkdir php_test
[root@node3 tmp]# mv Z-BlogPHP_1_6_5_2140_Valyria.zip php_test/
[root@node3 tmp]# cd php_test/
[root@node3 php_test]# unzip Z-BlogPHP_1_6_5_2140_Valyria.zip
[root@node3 php_test]# rm -rf Z-BlogPHP_1_6_5_2140_Valyria.zip
复制web页面上的命令
直接在代码目录下执行以上命令即可
执行的过程中,web页面会显示
执行完成后,会显示耗费的时间和资源
web端会自动刷新出结果
点开每一项,还会有说明
打开 问题 可以看到问题的汇总说明
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。