背景
在平时产品开发过程中,开发人员代码风格和能力参差不齐,提交的代码没有做规范限制,为了防止一些简单的隐藏的问题给产品带来影响,在产品测试开始前进行代码静态质量检查并作出报告,使问题暴露在最前面,减少代码隐藏的问题。
部署准备
环境清单
1.CentOs7.2(我使用的linux系统版本,其他系统未测试)
2.Docker容器环境(安装docker环境这里不赘述,论坛内大把教程,我这里用的是docker+portainer)
组件清单
1.Mysql
2.SonarQube
3.SonarQube Scanner
1、数据库mysql部署
1.拉取mysql镜像:
docker pull mysql:5.7.19
最好用5.7的版本,避免后面出现神奇的问题
2.启动mysql:
docker run --name sonar-mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306 -d mysql:5.7.19
生成的产物:
- 创建了一个名为sonar-mysql的容器(可运行的mysql服务)
- 生成了初始数据库账户
用户名:root
密码:123456
2、创建sonar数据库和sonar用户
进入容器:
docker exec -it sonar-mysql /bin/bash
#登录mysql
mysql -u root -p
密码就是前面的123456
#创建sonar数据库
create database sonar;
#添加远程登录用户sonar(给后面SonarQube服务使用)
CREATE USER 'sonar'@'%' IDENTIFIED WITH mysql_native_password BY 'sonar';
GRANT ALL PRIVILEGES ON *.* TO 'sonar'@'%';
3、获取 sonarqube 的镜像
docker pull sonarqube
4、启动 sonarqube
docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 --link=sonar-mysql:mysql -e SONARQUBE_JDBC_USERNAME=sonar -e SONARQUBE_JDBC_PASSWORD=sonar -e SONARQUBE_JDBC_URL="jdbc:mysql://192.168.1.35:3307/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false" sonarqube
- 创建了一个名为sonarqube的容器(可运行的sonarqube服务)
- 开放两个端口9000和9092,冒号前面表示映射系统主机的端口,后面表示映射容器的端口
- 连接了刚刚上面第2步创建的sonar数据库,并设置了一些字符集等参数
- 这里192.168.1.35:3307是上面第1步中创建的mysql,ip是当前服务器(mysql部署的服务器ip)
成功创建两个容器:
5、登录SonarQube
直接输入所在服务器ip和9000端口即可访问:
访问地址: http://192.168.1.35:9000(使用自己部署的服务器ip)
初始用户名: admin
初始密码: admin
我这里有四个项目了,是之前做测试的,刚创建好这里应该是0.
6、部署Sonar Scanner(扫描客户端)
下载地址: https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
1.下载扫描客户端
我这里下载Linux版本(也可以使用Windows版本)
也可以直接在服务器下载(可选)
[root@kxjl-oralce2 sonarconfig]# wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.3.0.1492-linux.zip
--2019-03-29 17:30:57-- https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.3.0.1492-linux.zip
正在解析主机 binaries.sonarsource.com (binaries.sonarsource.com)... 91.134.125.245
正在连接 binaries.sonarsource.com (binaries.sonarsource.com)|91.134.125.245|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:73866903 (70M) [application/zip]
正在保存至: “sonar-scanner-cli-3.3.0.1492-linux.zip”
下载解压后是这样:
2.修改配置文件
文件目录:sonar-scanner-3.3.0.1492-linux/conf
vim sonar-scanner.properties
写入以下内容:
sonar.host.url=http://192.168.1.35:9000
sonar.web.javaOpts=-server -Xms1G -Xmx521m -XX:+HeapDumpOnOutOfMemoryError
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:mysql://localhost:3307/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
sonar.web.host=0.0.0.0
sonar.web.port=9000
sonar.sourceEncoding=UTF-8
sonar.login=admin
sonar.password=admin
3.修改环境变量
vim /etc/profile
加入以下内容:
export SONAR_RUN_HOME="/home/sonarscanner/sonar-scanner-3.3.0.1492-linux"
export SONAR_RUN_BIN=$SONAR_RUN_HOME/bin;
7、运行代码扫描
1.找一个测试代码(我这里是java编写的maven项目)
2.进入项目目录
3.在项目目录下执行扫描命令
mvn sonar:sonar
看到构建成功就表示扫描完成了
进入SonarQube系统看下测试结果出来了