sonar是一款静态代码质量分析工具,支持Java、Python、PHP、JavaScript、CSS等25种以上的语言,而且能够集成在IDE、Jenkins、Git等服务中,方便随时查看代码质量分析报告。
安装环境
- HOST:10.129.4.43
- CentOS7.3
- Java-11
- PostgreSQL-13.3
- SonarQube - Community EditionVersion 8.9.1
1. 安装前准备
1.1 JDK
最新的SonarQube-8.9版本运行需要Java11+,CentOS7自带的Java8版本不够时,需要先升级。
# 先升级yum源
$ yum -y update
# 查看是不是有可以在线安装的java11
$ [root@ac3-node03 ~]# yum list | grep java-11-openjdk
# 查看并卸载旧版本的java
$ rpm -qa | grep java
$ rpm -qa | grep jdk
$ rpm -e --nodeps jdk1.8-1.8.0_201-fcs.x86_64
$ rpm -e --nodeps ...
# 安装Java11
$ yum -y install java-11-openjdk
$ java -version
openjdk version "11.0.11" 2021-04-20 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.11+9-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.11+9-LTS, mixed mode, sharing)
$
1.2 数据库
SonarQube的安装包里自带有H2数据库,SonarQube安装完成后,网页会提示"Embedded database should be used for evaluation purposes only",我们生产中,须使用SonarQube支持的其他数据库类型:Oracle, PostgreSQL and Microsoft SQLServer。这里我们选择使用PostgreSQL数据库。
1.2.1 数据库安装
安装数据库
# 安装RPM仓库
$ sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# 安装PostgreSQL
$ sudo yum install -y postgresql13-server
# 初始化数据库
$ sudo /usr/pgsql-13/bin/postgresql-13-setup initdb
# 设置开机自启动
$ sudo systemctl enable postgresql-13
# 启动数据库
$ sudo systemctl start postgresql-13
修改PostgreSQL数据库文件存放路径
$ sudo find / -name postgresql-13.service
/usr/lib/systemd/system/postgresql-13.service
...
$ sudo vi /usr/lib/systemd/system/postgresql-13.service
# 修改下面的路径
[Service]
Environment=PGDATA=/data/pgsql/13/data/
# 保存退出
# 把当前的数据库文件移到要修改的目录下
$ mv /var/lib/pgsql/ /data/
$ cd /data/
$ ls -ltr
drwx------ 3 postgres postgres 37 Jun 21 14:49 pgsql
# 重启数据库
$ sudo systemctl stop postgresql-13.service
$ sudo systemctl start postgresql-13.service
# 检查
# su - postgres
-bash-4.2$ psql
psql (13.3)
Type "help" for help.
postgres=# show data_directory;
data_directory
---------------------
/data/pgsql/13/data
(1 row)
postgres=# \q
-bash-4.2$ exit
logout
修改超级管理员账号初始密码
#修改登录PostgreSQL的密码
$ sudo -u postgres psql
postgres=# ALTER USER postgres WITH PASSWORD 'Pg18sql2021##';
postgres=# \q
#修改linux系统postgres用户的密码
PostgreSQL数据库安装时系统会创建一个默认的linux用户postgres,修改密码步骤如下
$ sudo passwd -d postgres
Removing password for user postgres.
passwd: Success
$ sudo -u postgres passwd
Changing password for user postgres.
New password: Pg18sql2021##
Retype new password: Pg18sql2021##
passwd: all authentication tokens updated successfully.
1.2.2 创建数据库和账号
数据库安装完成以后会自动创建linux用户postgres,用su - postgres切换进去,再用psql进入命令行模式,为SonarQube创建数据库和用户
$ su - postgres
Password: Pg18sql2021##
-bash-4.2$ psql
# 创建sonar数据库
postgres=# create database sonar;
CREATE DATABASE
# 创建sonar用户
postgres=# create user sonar;
CREATE ROLE
# 设置密码
postgres=# alter user sonar with password 'postgres';
ALTER ROLE
# 给soner用户授权
postgres=# alter role sonar createdb;alter role sonar superuser;alter role sonar createrole;
ALTER ROLE
ALTER ROLE
ALTER ROLE
# 更改sonar数据库属主
postgres=# alter database sonar owner to sonar;
ALTER DATABASE
postgres=#
查看数据库\l
查看用户\du
至此,数据库准备完毕。
2. 安装SonarQube服务
单机版SonarQube服务安装(下载.zip压缩包解压安装)。
2.1 下载解压SonarQube
# 下载
$ wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-8.9.1.44547.zip
# 解压到指定路径下
$ unzip -d /home/developer/apps/ sonarqube-8.9.1.44547.zip
$ cd apps
$ ls -ltr
drwxr-xr-x 11 developer developer 4096 Jun 8 09:18 sonarqube-8.9.1.44547
$
2.2 配置数据库
配置SonarQube使用PostgreSQL数据库
$ vi /home/developer/apps/sonarqube-8.9.1.44547/conf/sonar.properties
# 修改如下的配置
# DATABASE
...
# User credentials.
sonar.jdbc.username=sonar
sonar.jdbc.password=postgres
#----- PostgreSQL 9.3 or greater
sonar.jdbc.url=jdbc:postgresql://localhost/sonar
2.3 配置Elasticsearch存储路径
Elasticsearch的默认存储路径在 $SONARQUBE-HOME/data,修改的话配置在这里
$ vi sonarqube-8.9.1.44547/conf/sonar.properties
修改下面的配置
sonar.path.data=/data/sonarqubedata/data
sonar.path.temp=/data/sonarqubedata/temp
2.4 修改web服务配置
Web服务默认的端口号是9000,我们服务器上9000端口被占用,通过配置文件修改成其他的端口。
$ vi sonarqube-8.9.1.44547/conf/sonar.properties
# 修改下面的配置
sonar.web.port=9003
sonar.web.context=/data/sonarqubedata/context
2.5 Linux服务器配置修改
使用root用户,修改下面的配置
vi /etc/sysctl.conf
# 在末尾添加两行
vm.max_map_count=262144
fs.file-max=65536
```
修改/etc/profile文件
```bash
vi /etc/profile
# 在末尾添加一行保存
ulimit -n 65536
# 使配置生效
source /etc/profile
2.6 启动SonarQube服务
# 进到SonarQube家目录下,启动服务
$ pwd
/home/developer/apps/sonarqube-8.9.1.44547
$ bin/linux-x86-64/sonar.sh start
Starting SonarQube...
Started SonarQube.
$
服务成功启动,通过浏览器可以直接访问SonarQube了,初始账号:admin/admin
2.7 汉化(可选)
汉化包下载:https://github.com/xuhuisheng/sonar-l10n-zh,选择自己SonarQube版本匹配的汉化包下载。
将下载下来的jar包拷贝到 $SONARQUBE-HOME/extensions/plugins/ 下
$ pwd
../apps/sonarqube-8.9.1.44547/extensions/plugins
$ ls -ltr
total 68
-rw-r--r-- 1 developer developer 737 Jun 8 09:01 README.txt
-rw-r--r-- 1 developer developer 61903 Jun 22 16:10 sonar-l10n-zh-plugin-8.9.jar
重启SonarQube
$ pwd
../apps/sonarqube-8.9.1.44547
$ bin/linux-x86-64/sonar.sh stop
Gracefully stopping SonarQube...
Stopped SonarQube.
$ bin/linux-x86-64/sonar.sh start
Starting SonarQube...
Started SonarQube.
汉化完成
3. 安装Sonar-scanner客户端
sonar-scanner提供本地的代码扫描,客户端可以安装在与服务端相同的服务器,也可以装在不同的服务器(也可以安装在开发人员本地电脑)。这里我们安装在与web服务端相同的服务器。扫描时,需要将项目代码上传到服务器上完成扫描。
3.1 下载解压
使用浏览器打开刚刚安装好的SonarQube Web UI,新建project时根据指引,可以找到对应OS的sonar-scanner客户端下载地址以及使用命令。
下载解压
# 下载
$ wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.6.2.2472-linux.zip
# 解压
$ unzip -d /data/ sonar-scanner-cli-4.6.2.2472-linux.zip
3.2 修改配置文件
# 修改配置
$ vi /data/sonar-scanner-4.6.2.2472-linux/conf/sonar-scanner.properties
# 打开下面两项配置
sonar.host.url=http://localhost:9003 # 因为是在本地,不用修改了
sonar.sourceEncoding=UTF-8
# 并添加两行,写上登录SonarQube Web UI的账号密码
sonar.login=youraccount
sonar.password=yourpassword
3.3 配置环境变量
使用root账号,修改操作系统环境变量
# 修改环境变量(下面的步骤使用root账号操作)
# vi /etc/profile
# 在最下面添加一行并保存
export PATH="$PATH:/data/sonar-scanner-4.6.2.2472-linux/bin"
# 使配置生效
# source /etc/profile
# 环境变量设置成功,可以在服务器的任何地方执行sonar-scanner命令了
# sonar-scanner -v
INFO: Scanner configuration file: /data/sonar-scanner-4.6.2.2472-linux/conf/sonar-scanner.properties
INFO: Project root configuration file: NONE
INFO: SonarScanner 4.6.2.2472
INFO: Java 11.0.11 AdoptOpenJDK (64-bit)
INFO: Linux 3.10.0-693.2.2.el7.x86_64 amd64
#
4. 代码扫描
4.1 拉取项目代码
从gitlab仓库拉取代码到服务器(实际使用中,按测试要求拉取对应tag的代码)
# 使用root账号操作
# cd /data/sonar_projects/
# git clone http://xxx.xxx.xxx.xxx/test/test.git
4.2 添加扫描配置文件sonar-project.properties
进入项目代码的工程目录,在根目录下面新建一个配置文件sonar-project.properties
# cd test/
# touch sonar-project.properties
# 写入如下的内容
# must be unique in a given SonarQube instance
sonar.projectKey=test
# --- optional properties ---
# defaults to project key
sonar.projectName=test # 修改成实际项目名称
# defaults to 'not provided'
sonar.projectVersion=1.0 # 修改成代码实际的版本号
# Path is relative to the sonar-project.properties file. Defaults to .
sonar.sources=.
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8
4.3 执行扫描
在当前目录执行sonnar-scanner
# sonar-scanner
INFO: Scanner configuration file: /data/sonar-scanner-4.6.2.2472-linux/conf/sonar-scanner.properties
INFO: Project root configuration file: /data/sonar_projects/boss3/sonar-project.properties
......
......
http://localhost:9003/dashboard?id=boss3
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://localhost:9003/api/ce/task?id=AXoyfOjArSHJczayS5bx
INFO: Analysis total time: 39.385 s
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 41.029s
INFO: Final Memory: 8M/30M
INFO: ------------------------------------------------------------------------
扫描结束后,就可以去网页上查看扫描结果了