持续集成之代码质量管理-Sonar [三]

Sonar 介绍
Sonar 是一个用于代码质量管理的开放平台。通过插件机制, Sonar 可以集成不同的测试工
具,以及持续集成工具。与持续集成工具(例如 Hudson/Jenkins 等)不同, Sonar
并不是简单地把不同的代码检查工具结果(例如 FindBugs, PMD 等)直接显示在 Web 页面上,而
是通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方
便地对不同规模和种类的工程进行代码质量管理。
在对其他工具的支持方面, Sonar 不仅提供了对 IDE 的支持,可以在 Eclipse 和 IntelliJ
IDEA 这些工具里联机查看结果;同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方
便地在持续集成中使用 Sonar。
此外, Sonar 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化
也有良好的支持。

Sonar 部署

Sonar 的相关下载和文档可以在下面的链接中找到: http://www.sonarqube.org/downloads/
需要注意最新版的 Sonar 需要至少 JDK 1.8 及以上版本。
上篇文章我们已经可以成功的使用 git 进行拉去, Sonar 的功能就是来检查代码是否有 BUG。除了
检查代码是否有 bug 还有其他的功能,比如说:你的代码注释率是多少,代码有一些建议,编写语
法的建议。所以我们叫质量管理
Sonar 还可以给代码打分,并且引用了技术宅的功能(告诉你有很多地方没改)
Sonar 部署

   89  cd /usr/src/sonar
   90  rz  上传所需软件包
软件包我们通过 wget 或者下载, rz 上传到服务器

#软件包下载: https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-5.6.zip
jenkins代码管理

   95  unzip sonarqube-5.6.zip   解压软件包
   96  mv sonarqube-5.6 /usr/local/sonarqube
   97  cd /usr/local/sonarqube/
98  ln -s /usr/local/sonarqube/bin/linux-x86-64/sonar.sh  /usr/local/bin/ 链接命令目录

准备 Sonar 数据库
如果没有数据库请执行 yum install -y mariadb mariadb-server

  102  cd /usr/src/ MySQl5.7RPM
  103  rz  上传所需rpm包
  105  cd MySQl5.7RPM/
  107  ls

jenkins代码管理

  108  yum -y localinstall mysql-community-*  安装此目录的MySQL包
  109  systemctl  start  mysqld              开启mysql 
100 systemctl enable mariadb         设置开机自启

登录数据库并操作
110 mysqladmin -u root password 123 设置MySQL数据库密码
jenkins代码管理
可以看到这里有问题。解决:
111 grep password /var/log/mysqld.log
jenkins代码管理
红框中的就是密码
112 mysql -u root -p'yq%9XsyE:r&g' 登陆数据库
alter user 'root'@'localhost' identified by '123.com'
jenkins代码管理
alter user 'root'@'localhost' identified by 'Xgp@123.com';
jenkins代码管理

create database sonar character set utf8 collate utf8_general_ci;   创建数据库
grant all on sonar.* to 'sonar'@'%' identified by 'Sonar@123.com';    设置授权用户
grant all on sonar.* to 'sonar'@'localhost' identified by 'Sonar@123.com';  设置授权用户

配置 Sonar

  113  cd /usr/local/sonarqube/bin/
  115  ls 

jenkins代码管理

  116  ln -s /usr/local/sonarqube/bin/linux-x86-64/sonar.sh /usr/local/bin/ 链接命令目录
  117  vim conf/sonar.properties   修改sonar配置文件
sonar.jdbc.username=sonar            #14用户名
sonar.jdbc.password=Sonar@123.com     #15密码

sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance   #23去注释
sonar.web.host=0.0.0.0   #99去注释
sonar.web.port=9000    #106去注释

配置 Java 访问数据库驱动(可选)
默认情况 Sonar 有自带的嵌入的数据库,那么你如果使用类是 Oracle 数据库,必须手动复制驱动类到${SONAR_HOME}/extensions/jdbc-driver/oracle/目录下,其它支持的数据库默认提供了驱动。其它数据库的配置可以参考官方文档:
http://docs.sonarqube.org/display/HOME/SonarQube+Platform
启动 Sonar并查看端口
你可以在 Sonar 的配置文件来配置 Sonar Web 监听的 IP 地址和端口,默认是 9000 端口。
118 sonar.sh start 启动sonar
119 netstat -anpt | grep 9000 查看端口
jenkins代码管理
120 tailf /usr/local/sonarqube/logs/sonar.log 查看sonar日志
#端口是 9000 哦!
Web 登陆: IP:9000
提示:
sonar 跟 jenkins 类似,也是以插件为主
sonar 安装插件有 2 种方式:第一种将插件下载完存放在 sonar 的插件目录,第二种使用 web 界面来使用安装存放插件路径[/usr/local/sonarqube/extensions/plugins/]
jenkins代码管理
安装中文插件
登陆:用户名: admin 密码: admin
jenkins代码管理
jenkins代码管理
sonar安装‘中文’和php插件

  132  cd /usr/local/sonarqube/extensions/plugins/    进入sonar宿主目录  
  133  cp /usr/src/sonar/sonar-l10n-zh-plugin-1.11.jar   ./  拷贝中文插件到sonar目录
134 cp /usr/src/sonar/sonar-php-plugin-2.9-RC1.jar  ./  拷贝php插件到sonar目录需要重启才会生效
  134  sonar.sh restart                                重启sonar
  135  netstat -anpt | grep 9000             查看端口

生效后如下图:
jenkins代码管理

下载扫描器插件

  140  cd /usr/src/sonar/  进入刚刚上传sonar包的目录
  141  unzip sonar-scanner-cli-3.3.0.1492-linux.zip  解压扫描插件
  142  mv sonar-scanner-3.3.0.1492-linux/ /usr/local/sonar-scanner  移动解压文件到sonar宿主目录
  143  cd /usr/local/sonar-scanner/  进入sonar宿主目录
  145  ln -s /usr/local/sonar-scanner/bin/sonar-scanner  /usr/local/bin/ 链接命令目录
  146  ln -s /usr/local/sonar-scanner/bin/sonar-scanner  /usr/bin/ 链接命令目录

我们要将扫描器和 sonar 关联起来

143  cd /usr/local/sonar-scanner/
144  vim conf/sonar-scanner.properties  修改sonar配置文件
sonar.host.url=http://localhost:9000  #去注释  sonar 地址
sonar.sourceEncoding=UTF-8  #8去注释  字符集
以下四行来自/usr/ldocal/sonarqube/conf/sonar.properties   
sonar.jdbc.username=sonar   #数据库账号
sonar.jdbc.password=Sonar@123.com  #数据库密码
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance   #数据库连接地址

#打开注释即可

我们现在需要找一个代码进行分析。

sonar 插件提供了一个代码的库
github:https://github.com/SonarSource/sonar-examples
我们下载软件包: https://github.com/SonarSource/sonar-examples/archive/master.zip
解压
150 unzip testalyzer-master.zip 解压测试文件
151 cd /usr/src/sonar/testalyzer-master/projects/languages/php/php-sonar-runner-unit-tests 进入测试文件
jenkins代码管理
163 sonar-scanner 测试代码文件
jenkins代码管理
提示: 我们什么都不指定就会在当面目录下扫描 sonar-project.properties 文件,根据配置文件进行扫描工作。扫描之后我们在 web 界面上就可以看到代码的扫描结果这里的名字,版本 都是在 sonar-project.properties 文件中定义的
jenkins代码管理
质量阈帮我们设定好一个阈值,超过相应的阈值就算有 bug
jenkins代码管理
测试第二个文件
cd /usr/src/sonar/testalyzer-master/projects/languages/javascript/javascript-sonar-runner
sonar-scanner 测试
jenkins代码管理
jenkins代码管理

为了让 jenkins 可以在构建项目的时候执行 sonar,所以我们需要在 jenkins 上安装插件

现在就可以进行配置,让 jenkins 和 sonar 结合在一起。这样我们构建项目的时候就会进行代码检测
http://192.168.1.40:8081/ jdk安装插件SonarQube Scanner. Gerrit Tr igge 需要一个一个来
jenkins代码管理
安装完毕之后:现在就可以进行配置,让 jenkins 和 sonar 结合在一起。这样我们构建项目的时候就会进行代码检测
系统管理---系统设置---- add sonarqube server---name随意写 url sonarqube的路径http://192.168.1.40: 9000

jenkins代码管理
jenkins代码管理
点击保存

系统管理---全局工具配置---新增SonarQube Scanner--- 取消勾选自动安装----name随意写--- SONAR_RUNNER_HOME /usr/local/sonar- scanner
jenkins代码管理

配置
jenkins代码管理
配置上次课的web- demo项目----构建--- Execute SonarQube Scanner ----Analysis properties 内容在cat /usr/src/sonar/testalyzer-master/projects/languages/php/php-sonar-runner-unit-tests/sonar-project.properties(每个人安装目录不一样)
jenkins代码管理

编辑我们的项目,选择最下放。找到构建
jenkins代码管理
cat /usr/src/sonar/testalyzer-master/projects/languages/php/php-sonar-runner-unit-tests/sonar-project.properties
jenkins代码管理

填写完毕后,我们点击保存

217 cd /usr/src/sonar/testalyzer-master/projects/languages/php/php-sonar-runner-unit-tests
  219  cp -r *  /root/xgp-demo/    
  220  cd /root/xgp-demo/  进入xgp项目
  221  git add *            上传到缓存
  222  git commit -m "sonar"   上传到版板库
  223  git push  origin  master  上传到远程库
提示: 此时的 SonarQube 是无法点击的

浏览器JDK查看

jenkins代码管理

点击 Console Output 可以查看构建输出的内容
jenkins代码管理
#提示:只要没有 error 就可以
jenkins代码管理
Gielab查看并修改名字
jenkins代码管理

再次修改一下并把密钥修改一下
jenkins代码管理
jenkins代码管理

在sonar上查看添加了一个xgpa

jenkins代码管理

Jenkins邮件告警

登陆QQ邮箱获取授权码
jenkins代码管理
1、需要开启 POPE3/SMTP 服务
2、在 jenkins 上配置的密码我们需要点击生成授权码进行使用

回到jdk
系统管理---系统设置---Jenkins Location---- 系统管理员邮件地址
-----邮件通知---SMTP服务器smtp . qq. com
---用户默认邮件后缀@qq. com
---勾选使用smtp认证
用户名密码 (生成的授权码)
---勾选使用ssl
--- smtp端口 465
---勾选通过发送测试邮件测试配置

jenkins代码管理
jenkins代码管理
jenkins代码管理

配置web- demo项目---构建后操作- --添加E -mail Notification---Recipient收件 人地址
---- Editable Email Notification---Project From填写项目名称----Project Recipient Lis t收件人邮箱地址-
Triggers---add Triggers----always-- Send To只保留Recipient List

失败邮件

jenkins代码管理
jenkins代码管理
jenkins代码管理
测试:关闭git(失败邮件)
gitlab-ctl stop

jenkins代码管理

jenkins代码管理

成功邮件

jenkins代码管理
jenkins代码管理
jenkins代码管理
测试:成功邮件
启动gitlab-ctl start
jenkins代码管理