Docker+SonarQube+Mysql+Jenkins部署+阿里p3c标准

一、背景及目的

1、公司的后台项目基本上都是Java开发的,但是缺少代码code review流程,有些bug(比如:空指针)能在代码层面就能发现,就可以有效地缩短功能测试时间,提高交付效率。

2、重构工厂后端项目(企业云saas平台),在代码层面扫描测试 ,可以尽可能减少或杜绝一些基本、低级的bug流转到功能测试阶段,而且有些可能是功能测试发现不了的bug。

 

二、项目链接

待部署到阿里云服务器

 

三、命令行创建mysql容器

1、创建mysql_sonar的目录,cd mysql_sonar,执行docker命令:

      docker run -p 33846:3306 --name mysql -v $PWD/conf/my.cnf:/etc/mysql/my.cnf -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=asdf -d mysql:5.7

      $PWD 就是mysql_sonar目录的路径;

      conf目录下面创建my.cnf文件,配置 文件写入mysql数据太大报错的问题。

写入MySQL报错超出 max_allowed_packet 的问题(扫描订单系统的报告超过了10Mb,报错):

配置可写入mysql最大数据为100Mb

show variables like '%max_allowed_pack%';

(100 * 1024 * 1024 = 104857600,手动修改后,需要重启mysql容器)

2、docker exec -it mysql bash

3、mysql -u root -p

4、create database sonar;

#添加远程登录用户
5、CREATE USER 'sonar'@'%' IDENTIFIED WITH mysql_native_password BY 'sonar';

6、GRANT ALL PRIVILEGES ON *.* TO 'sonar'@'%';

如果报错:ERROR 1396 (HY000): Operation CREATE USER failed for 'sonar'@'%'
delete from mysql.user where user='sonar'; 删除用户
flush privileges;

再创建远程登录用户

 

四、创建本地已经安装好插件(包括中文、p3c插件)的sonarqube(优先安装)

1、docker run --name sonarqube --link=mysql:mysql \
-v /opt/sonarqube/logs:/opt/sonarqube/logs \
-v /opt/sonarqube/conf:/opt/sonarqube/conf \
-v /opt/sonarqube/data:/opt/sonarqube/data \
-v /opt/sonarqube/extensions:/opt/sonarqube/extensions \
-v /opt/sonarqube/lib/bundled-plugins:/opt/sonarqube/lib/bundled-plugins \
-v /opt/sonarqube/extensions/plugins:/opt/sonarqube/extensions/plugins \
-v /opt/sonarqube/lib/common:/opt/sonarqube/common \
-e SONARQUBE_JDBC_URL="jdbc:mysql://mysql:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false" -e SONARQUBE_JDBC_USERNAME=sonar -e SONARQUBE_JDBC_PASSWORD=sonar \
-p 33848:9000 \
-d sonarqube:7.4-community

2、创建好本地对应的目录,/opt/sonarqube/extensions/plugins 放相关必要的插件;

3、jdbc:mysql://mysql 的端口不用宿主机的端口33846,还是需要用端口3306(容器之间通讯没有通过宿主机,所以这样是对的,猜想)

注:直接创建sonarqube(如果没有本地插件,安装这个)

docker run -d --name sonarqube -p 9001:9000 -p 9092:9092 --link=mysql:mysql -e SONARQUBE_JDBC_USERNAME=sonar -e SONARQUBE_JDBC_PASSWORD=sonar -e SONARQUBE_JDBC_URL="jdbc:mysql://mysql:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false" sonarqube:7.1

启动ok,查看控制台进行访问IP:9001,默认账号密码:admin/admin

 

五、mvn命令分析maven框架的Java项目

/projects/create 创建新项目,选择 Java → maven  , 最钟会出现如下提示:

把操作命令复制保存下来,在项目目录(pom.xml的当前目录)运行sonar命令:

mvn sonar:sonar \
-Dsonar.host.url=http://10.3.254.158:33848 \
-Dsonar.login=a2dafbbf138ef6688ac24c0b6455e87d2a146a90

(login的token是sonar初始化的时候生成的,需要记录下来,容器删除重新建,会重新生成token)

如果报错:

解决方案:mvn install (执行 install 将 maven 打成 jar 包) ,再运行sonar命令即可

 

六、Jenkins 集成 SonarQube Scanner 分析maven框架的Java项目

1、安装SonarQube Scanner插件

2、Jenkins中配置连接sonarqube服务器的地址,这里用到的token就是刚才在sonarqube中创建的那个token

3、配置全局工具配置,选自动安装即可

4、创建任务

5、构建选择:Execute SonarQube Scanner

这里我们只需要在Analysis properties中配置sonar扫描的参数即可

参数说明:

参数项

说明

sonar.projectKey

项目Key,需要唯一,建议使用GroupId+ArtifactId

sonar.projectName

项目名称,跟ArtifactId保持一致即可

sonar.projectVersion

项目版本,跟pom.xml保持一致即可

sonar.java.sourcejdk的版本号

sonar.sources

源码目录,Java项目默认就是src,如果项目有多个module,那就需要配置为{moduleDirectory}/src

sonar.java.binaries

编译产出的classes目录,如果项目有多个module,那就需要配置为{moduleDirectory}/target/classes

如果发现构建log有报错:
Caused by: net.sourceforge.pmd.lang.java.ast.ParseException: Line 34, Column 73: Cannot use lambda expressions when running in JDK inferior to 1.8 mode!
解决方案:加上sonar.java.source这个参数即可

6、构建&扫描

完成以上SonarQube Scanner配置,就可以进行项目构建,构建成功后,访问SonarQube,将在项目列表看到扫描的结果:

七、附上相关中文、p3c插件,注意,公司的定制maven的settings配置需要

1、sonar的相关插件

2、maven安装路径的settings.xml需要替换成公司的配置,不然下载不了

3、公司的settings.xml的配置的本地respository需要修改成本机的路径

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飘凛枫叶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值