sonar+Jenkins 构建代码质量自动化分析平台
1.Sonar 介绍
Sonar 是一个用于管理代码质量的开源工具,可以分析代码中的bug和漏洞以及Code Smells,支持20多种编程语言的检测,如java,c/c++,python,php等语言,当前有超过85000家组织在使用sonar。Sonar可以与DevOps工具链完全整合,可以与大多数构建工具进行内置集成,与Jenkins,TFS / VSTS,TeamCity,Bamboo等持续整合引擎轻松集成,支持众多源代码管理配置工具,如git,svn,cvs等。
官方地址:https://www.sonarqube.org/
早在2007年,当创建第一行代码时,Sonar的创始人就梦想有一天能够为每个开发人员提供测量其项目代码质量的能力。他的座右铭:“持续检测必须成为持续整合的主流”。
本文的目的就是安装一个sonar,并集成到Jenkins中,实现代码的一个持续质量监测。
2.Sonar 安装
2.1.安装环境介绍
注意:sonar服务器至少需要2G的内存才能有效运行,而操作系统则需要1GB的可用内存。
- Centos 7.2
- 安装JDK 1.8
- 安装Jenkins 2.89
- 安装 maven 3.5.2(非必需,用于编译一些插件)
- 安装mysql 5.6 数据库 (要求版本,不低于5.6)
安装完mysql后创建sonar数据库和账号,方式如下:
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;
2.2.SonarQube安装
cd /data/package/
wget https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-6.6.zip
mkdir /data/service/sonar/
unzip sonarqube-6.6.zip -d /data/service/sonar/
配置启动脚本:
[root@c7-node1 ~]# cat /etc/init.d/sonar
#!/bin/sh
#
# rc file for SonarQube
#
# chkconfig: 345 96 10
# description: SonarQube system (www.sonarsource.org)
#
### BEGIN INIT INFO
# Provides: sonar
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 3 4 5
# Default-Stop: 0 1 2 6
# Short-Description: SonarQube system (www.sonarsource.org)
# Description: SonarQube system (www.sonarsource.org)
### END INIT INFO
/usr/bin/sonar $*
授权启动脚本执行权限,并配置路径
chmod +x /etc/init.d/sonar
ln -s /data/service/sonar/sonarqube-6.6/bin/linux-x86-64/sonar.sh /usr/bin/sonar
chkconfig sonar on
修改配置文件
[root@c7-node1 ~]# cd /data/service/sonar/sonarqube-6.6/conf/
[root@c7-node1 conf]# cp sonar.properties{,.bak}
sonar.jdbc.username=sonar
sonar.jdbc.password=123456
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
2.3.sonarQube Scanner 安装
cd /data/package/
wget https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-2.8.zip
unzip sonar-scanner-2.8.zip -d /data/service/sonar/
ln -s /data/service/sonar/sonar-scanner-2.8/bin/sonar-scanner /usr/bin/sonar-scanner
修改配置文件
[root@c7-node1 ~]# cd /data/service/sonar/sonar-scanner-2.8/conf/
[root@c7-node1 conf]# cp sonar-scanner.properties{,.bak}
[root@c7-node1 conf]# vim sonar-scanner.propertiessonar.jdbc.username=sonarsonar.jdbc.password=123456sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8
2.4.sonarQube runner 安装
cd /data/service/
wget http://repo1.maven.org/maven2/org/codehaus/sonar/runner/sonar-runner-dist/2.4/sonar-runner-dist-2.4.zip
unzip sonar-runner-dist-2.4.zip -d /data/service/sonar/
ln -s /data/service/sonar/sonar-runner-2.4/bin/sonar-runner /usr/bin/sonar-runner
修改配置文件
[root@c7-node1 ~]# cd /data/service/sonar/sonar-runner-2.4/conf/
[root@c7-node1 conf]# cp sonar-runner.properties{,.bak}
[root@c7-node1 conf]# vim sonar-runner.propertiessonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8sonar.jdbc.username=sonarsonar.jdbc.password=123456
添加环境变量
[root@c7-node1 ~]# vim /etc/profile.d/sonar.sh
export SONAR_HOME=/data/service/sonar/sonarqube-6.6
export SONAR_RUNNER_HOME=/data/service/sonar/sonar-runner-2.4
export PATH=$SONAR_RUNNER_HOME/bin:$PATH
[root@c7-node1 ~]# source /etc/profile.d/sonar.sh
2.5.启动sonar
注意:sonar默认不允许使用root用户启动,所以我们需要创建sonar用户,并以sonar用户启动
[root@c7-node1 ~]# useradd sonar
[root@c7-node1 ~]# chown -R sonar:sonar /data/service/sonar/
[root@c7-node1 ~]# su sonar
[sonar@c7-node1 root]$ /etc/init.d/sonar start
sonar启动成功后,访问服务器的9000端口即可打开sonar的web界面,默认账号和密码为admin:admin注意:sonar默认不允许使用root用户启动,所以我们需要创建sonar用户,并以sonar用户启动。
![img](sonar+Jenkins 构建代码质量自动化分析平台 .assets/640.webp)
出现如下页面说明sonar安装成功,如果sonar安装失败,则根据日志报错内容进行排查即可。
3.Sonar 插件使用及汉化
Sonar可以通过安装插件的方式来扩展自己的功能,具体信息可以访问sonar的插件库,里面提供了众多代码分析插件,认证授权插件,外部分析插件,语言插件,可视化/报告插件等。下面我们就通过安装sonar等中文插件来演示sonar插件的安装。
sonar的插件库:https://docs.sonarqube.org/display/PLUG/Plugin+Library
3.1.后台安装中文插件
登陆sonar后,在Administration–>System–>Update Center–>Available中搜索Chinese就可以看到中文插件包,点击install即可安装。但是安装时间非常慢,甚至还会失败,建议还是手动安装。
![img](sonar+Jenkins 构建代码质量自动化分析平台 .assets/640.webp)
3.2.手动安装插件
中文插件github地址:https://github.com/SonarQubeCommunity/sonar-l10n-zh
我们把中文插件源码下载到我们本地,并且切换到相应的版本(我安装的sonar6.6版本,需要切换到1.18tag),进行编译
git clone https://github.com/SonarQubeCommunity/sonar-l10n-zh.git
cd sonar-l10n-zh/
git checkout sonar-l10n-zh-plugin-1.18
mvn package
cp target/sonar-l10n-zh-plugin-1.18-SNAPSHOT.jar /data/service/sonar/sonarqube-6.6/extensions/plugins/
复制中文插件到sonar插件目录后,重启sonar生效
重启sonar后,访问web验证效果,可以看到汉化成功了
![img](sonar+Jenkins 构建代码质量自动化分析平台 .assets/640.webp)
这样我们的中文插件就完成安装了,如果需要安装其它的插件,可以直接访问官方插件库进行寻找安装。
4.Sonar 分析Python代码小例
Sonar 安装汉化完成就可以用来实际的分析代码了,我准备了一个分析python代码的小例子用来演示sonar分析代码过程。
例:我的python项目是使用3.0版本开发,但是使用了2.0的语法,我们试试sonar能不能分析出来(sonar内置了python 3.0分析插件,我们无须额外安装)。演示脚本就一个,功能为发送邮件,其中的print为2.0语法,在3.0环境下是无法正常运行的,我们通过分析这个脚本,来演示sonar的分析代码过程。
[sonar@c7-node1 ~]$ cat python_test/sendEmail.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 第三方 SMTP 服务
mail_host="xxx" #设置服务器
mail_user="xxx" #用户名
mail_pass="xxx" #口令
sender = 'bigdata_monitor@xueleyun.com'
receivers = sys.argv[1]
content=sys.argv[3]
message = MIMEText(content, 'plain', 'utf-8')
message['From'] = Header(sender, 'utf-8')
message['To'] = Header(receivers, 'utf-8')
subject = sys.argv[2]
message['Subject'] = Header(subject, 'utf-8')
try:
smtpObj = smtplib.SMTP()
smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号
smtpObj.login(mail_user,mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string())
print "邮件发送成功"
except smtplib.SMTPException:
print "Error: 无法发送邮件"
在项目根目录下创建一个配置文件sonar-project.properties,项目如果在sonar中没有创建,首次分析会自动根据填入到配置文件的名称和key自动创建
[sonar@c7-node1 ~]$ cat python_test/sonar-project.properties
sonar.projectKey=python_test
sonar.projectName=python_test
sonar.projectVersion=1.0
sonar.sources=.
sonar.sourceEncoding=UTF-8
在项目根目录下运行下面的命令启动分析
sonar-scanner
扫描完成之后,我们再次打开web页面就可以看到,我们的sonar根据配置文件填入的内容自动创建了python_test的项目,并且分析出来了两个bug
![img](sonar+Jenkins 构建代码质量自动化分析平台 .assets/640.webp)
点击项目名称,可以进入到项目,查看项目的详细分析信息
![img](sonar+Jenkins 构建代码质量自动化分析平台 .assets/640.webp)
点击bugs,可以看到具体的bug信息,我们可以看到bug的信息为python print语句有问题
![img](sonar+Jenkins 构建代码质量自动化分析平台 .assets/640-1567994791386.webp)
sonar不仅可以找到bug,而且还会告诉我们我们这样为什么错误,还会给出正确示例子;
查看bug具体信息:说print语句在python3.0中被删除。应该使用内置函数,并且给出了正确实例。
![img](sonar+Jenkins 构建代码质量自动化分析平台 .assets/640-1567994791393.webp)
5.Sonar 集成Jenkins使用
5.1.设置sonar中的令牌
用 admin 用户登陆 sonarQube,【配置】–>【权限】 –>【用户】
![img](sonar+Jenkins 构建代码质量自动化分析平台 .assets/640-1567994791401.webp)
![img](sonar+Jenkins 构建代码质量自动化分析平台 .assets/640-1567994791409.webp)
5.2.Jenkins 安装sonar相关插件
安装红框中的两个插件即可
![img](sonar+Jenkins 构建代码质量自动化分析平台 .assets/640-1567994791419.webp)
5.3.Jenkins配置sonar插件
点击【系统管理】 –> 【系统设置】 配置 Sonar认证信息,设置完保存
![img](sonar+Jenkins 构建代码质量自动化分析平台 .assets/640-1567994791425.webp)
点击【系统管理】 –> 【全局工具配置】,配置sonar扫描器信息
![img](sonar+Jenkins 构建代码质量自动化分析平台 .assets/640-1567994791434.webp)
5.4.Jenkins job 中配置sonar
为了操作方便我这里就不把刚才的代码放到git中进行拉取了,而且直接配置工作目录为刚才的python_test目录,生产环境你可以根据公司实际情况,选择是从svn或者git获取需要分析的代码
![img](sonar+Jenkins 构建代码质量自动化分析平台 .assets/640-1567994791439.webp)
增加一个构建步骤,选择Execute SonarQube Scanner,选择一个用于分析的jdk,并填入Analysis properties为刚才手动扫描的sonar-project.properties配置文件即可
![img](sonar+Jenkins 构建代码质量自动化分析平台 .assets/640-1567994791448.webp)
这样我们Jenkins中sonar的部分就配置完了,我们可以保存job进行构建,构建完成,可以通过构建历史,直接跳转到sonar到分析页面,如下图所示,并附Jenkins job 完整内容及构建视频。
![img](sonar+Jenkins 构建代码质量自动化分析平台 .assets/640-1567994791453.webp)
6.后记
本文到这里就结束了,虽然sonar的一些内容,比如项目管理,安全,监控,邮件通知等内容文章中并没有提及,但我认为汉化后的sonar管理还是比较方便易操作的,这里大家可以自己登录到后台进行摸索。
还有就是sonar+Jenkins的这个job并不是很全面,缺少代码自动获取和发布的配置,但是sonar的配置还是正确的,你只需要把他加入到你代码获取后的第一个操作,或者编译之前的操作均可。
sonar+Jenkins 构建代码质量自动化分析平台的更多相关文章
- TOP100summit:【分享实录-WalmartLabs】利用开源大数据技术构建WMX广告效益分析平台
本篇文章内容来自2016年TOP100summitWalmartLabs实验室广告平台首席工程师.架构师粟迪夫的案例分享. 编辑:Cynthia 粟迪夫:WalmartLabs实验室广告平台首席工程师 ...
- MDU某产品OMCI模块代码质量现状分析
说明 本文参考MDU系列某产品OMCI模块现有代码,提取若干实例以说明目前的代码质量,亦可作为甄别不良代码的参考. 本文旨在就事论事,而非否定前人(没有前人的努力也难有后人的进步).希望以史为鉴,不破 ...
- Jenkins+SonarQube代码质量检查自动化
基础概念百度百科:Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括:1.持续的软件版本发布/测试项目.2.监控外部调用执行的工作.前面[Sonarqube 代码质量 ...
- 快速构建大数据存储分析平台-ELK平台安装
一.概述 ELK是由Elastic公司开发的Elasticsearch.Logstash.Kibana三款开源软件的缩写(但不限于这三款软件). 为什么使用ELK? 在目前流行的微服务架构中,一个大型 ...
- jenkins+sonarQube代码质量扫描 并排除指定的目录
sonar.projectKey=dev1-news-paymentsonar.projectName=dev1-news-paymentsonar.projectVersion=$BUILD_NUM ...
- Java代码质量监控工具Sonar安装
1. 代码质量七宗罪 Sonar是一个代码质量管理系统.它的帮助文档开篇明义,提出了代码质量的七宗罪.总结的比較到位.最好还是一看: 1. Bug和隐藏Bug(Bugs and Pot ...
- 持续集成之②:整合jenkins与代码质量管理平台Sonar并实现构建失败邮件通知
持续集成之②:整合jenkins与代码质量管理平台Sonar并实现构建失败邮件通知 一:Sonar是什么?Sonar 是一个用于代码质量管理的开放平台,通过插件机制,Sonar 可以集成不同的测试工具 ...
- jenkins在windows平台自动化构建代码
jenkins服务端:centos6.8 客户端:windows server2012 windows10 工具:cwRsync 注:复制为jenkins工作目录到网站目录,无需服务端. 1.安装je ...
- 测试框架:使用SONAR分析代码质量
介绍 Sonar是一个用于代码质量管理的开源平台,用于管理Java源代码的质量.通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具,比如pmd-cpd.checkstyl ...
随机推荐
- Can I prevent the Firefox developer tools network panel from clearing on page reload?
Can I prevent the Firefox developer tools network panel from clearing on page reload? I couldn't fin ...
- python pip settools 安装基于源码 gdal安装需要c++相关库
- linux几种传输方式与拷贝方式的性能分析
本文记录linux系统中文件传输的多种方式,留作备忘.linux中文件传输的方式有ftp,scp,rsync,rz,sz等,但各个工具的功能又有所区别: FTP : FTP是文件服务器,可实现文件的上 ...
- Leetcode: Sum of Two Integers && Summary: Bit Manipulation
Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -. Exam ...
- Error setting null for parameter #10 with JdbcType
转: Error setting null for parameter #10 with JdbcType OTHER . 2014年02月23日 11:00:33 厚积 阅读数 58535 my ...
- flutter的生命周期
大致可以看成三个阶段 初始化(插入渲染树) 状态改变(在渲染树中存在) 销毁(从渲染树种移除) initState 当插入渲染树的时候调用,这个函数在生命周期中只调用一次.这里可以做一些初始化工作,比 ...
- windows下打开binlog
上篇我们介绍了binlog(参见mysql的binlog),配置文件用的是linux下的my.cnf,那么在windows下如何打开binlog呢?道理是相同的,配置文件是不一样的.在windows下 ...
- FastCGI模式下安装Xcache
PHP执行的时候,会被编译成opcode,然后 zend引擎会执行opcode.也就是说,如果你两次执行同一个php程序,每次执行,他都要把php代码编译成opcodexcache的意义在于,当你第一 ...
- 【Leetcode_easy】748. Shortest Completing Word
problem 748. Shortest Completing Word 题意: solution1: class Solution { public: string shortestComplet ...
- CareerCup Questions List 职业杯题目列表
网站 www.careercup.com 上的题库列表 # Title Difficulty Company 1 Guards in a museum Hard F, G 2 Bomberman H ...