当前位置: 首页 > 后端技术 > Python

Sonar+Jenkins搭建代码质量自动化分析平台

时间:2023-03-25 22:06:21 Python

1.Sonar介绍Sonar是一个开源的代码质量管理工具,可以分析代码中的bug和漏洞以及CodeSmells,支持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.声纳安装2.1.安装环境介绍注意:sonarserver至少需要2G内存才能有效运行,而操作系统需要1GB可用内存。Centos7.2安装JDK1.8安装Jenkins2.89安装maven3.5.2(非必须,用于编译一些插件)mysql5.6数据库(要求版本,不低于5.6)安装mysql后,创建sonar数据库和账号,as如下:CREATEDATABASEsonarCHARACTERSETutf8COLLATEutf8_general_ci;GRANTALLPRIVILEGESONsonar.*TO'sonar'@'localhost'IDENTIFIEDBY'123456'WITHGRANTOPTION;FLUSHPRIVILEGES;2.2.SonarQube安装cd/data/package/wgethttps://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-6.6.zipmkdir/data/service/sonar/unzipsonarqube-6.6.zip-d/data/service/sonar/配置启动脚本:[root@c7-node1~]#cat/etc/init.d/sonar#!/bin/sh##SonarQube的rc文件##chkconfig:3459610#description:SonarQubesystem(www.sonarsource.org)####BEGININITINFO#Provides:sonar#Required-Start:$network#Required-Stop:$network#Default-Start:345#Default-Stop:0126#Short-Description:SonarQube系统(www.sonarsource.org)#描述ription:SonarQubesystem(www.sonarsource.org)###ENDINITINFO/usr/bin/sonar$*授权启动脚本执行权限,并配置路径chmod+x/etc/init.d/sonarln-s/data/service/sonar/sonarqube-6.6/bin/linux-x86-64/sonar.sh/usr/bin/sonarchkconfigsonaron修改配置文件[root@c7-node1~]#cd/data/service/sonar/sonarqube-6.6/conf/[root@c7-node1conf]#cpsonar.properties{,.bak}sonar.jdbc.username=sonarsonar.jdbc.password=123456sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false2.3.sonarQubeScanner安装cd/data/package/wgethttps://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-2.8.zipunzipsonar-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-node1conf]#cpsonar-scanner.properties{,.bak}[root@c7-node1conf]#vimsonar-scanner.propertiessonar.jdbc.username=sonarsonar.jdbc.password=123456sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf82.4.sonarQuberunner安装cd/data/service/wgethttp://repo1.maven.org/maven2/org/codehaus/sonar/runner/sonar-runner-dist/2.4/sonar-runner-dist-2.4.zipunzipsonar-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-node1conf]#cpsonar-runner.properties{,.bak}[root@c7-node1conf]#vimsonar-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.shexportSONAR_HOME=/data/service/sonar/sonarqube-6.6exportSONAR_RUNNER_HOME=/data/service/sonar/sonar-runner-2.4exportPATH=$SONAR_RUNNER_HOME/bin:$PATH[root@c7-node1~]#source/etc/profile.d/声纳。sh2.5。启动sonar注意:sonar默认不允许root用户启动,所以我们需要创建一个sonar用户,以sonar用户启动[root@c7-node1~]#useraddsonar[root@c7-node1~]#chown-Rsonar:sonar/data/service/sonar/[root@c7-node1~]#susonar[sonar@c7-node1root]$/etc/init.d/sonarstartsonar启动成功后,访问服务器的9000端口可以打开sonar的web界面。默认帐号和密码为admin:admin。注意:sonar默认不允许以root用户启动,所以我们需要创建一个sonar用户,并以sonar用户启动。出现以下页面说明sonar安装成功。如果sonar安装失败,根据日志中的错误内容进行检查。3、Sonar插件的使用和汉化Sonar可以通过安装插件来扩展自身的功能。具体可以访问sonar插件库,里面提供了很多代码分析插件、认证授权插件、外部分析插件、语言插件、可视化/报表插件等。接下来,我们将通过安装sonar等中文插件来演示sonar插件的安装。Sonar的插件库:https://docs.sonarqube.org/di...3.1。后台安装中文插件登录sonar后,在Administration-->System-->UpdateCenter-->Available中搜索Chinese即可看到中文插件包,点击install进行安装。但是,安装时间很慢,甚至可能会失败。建议手动安装。3.2.手动安装插件中文插件github地址:https://github.com/SonarQubeC...我安装的6版本需要切换到1.18tag),编译gitclonehttps://github.com/SonarQubeCommunity/sonar-l10n-zh.gitcdsonar-l10n-zh/gitcheckoutsonar-l10n-zh-plugin-1.18mvnpackagecptarget/sonar-l10n-zh-plugin-1.18-SNAPSHOT.jar/data/service/sonar/sonarqube-6.6/extensions/plugins/将中文插件复制到sonar插件目录后,重启sonar生效重启sonar后,访问web验证效果,可以看到汉化成功这样我们的中文插件就安装好了。如需安装其他插件,可直接访问官方插件库查找安装。4、Sonar分析Python代码的一个小例子中文安装完成后就可以使用Sonar来实际分析代码了。我准备了一个分析python代码的小例子来演示sonar分析代码的过程。例子:我的python项目是用3.0版本开发的,但是使用了2.0的语法。我们试试sonar能不能解析(sonar内置了python3.0的解析插件,不需要另外安装)。demo脚本只有一个,功能是发送邮件,里面的print是2.0的语法,在3.0的环境下不能正常运行。我们将通过分析这个脚本来演示sonar的解析代码过程。[sonar@c7-node1~]$catpython_test/sendEmail.py#!/usr/bin/python#-*-编码:UTF-8-*-importsysimportsmtplibfromemail.mime.textimportMIMETextfromemail.headerimportHeader#第三方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"Mailsentsuccessful"exceptsmtplib.SMTPException:print"Error:Unabletosendmail"在创建配置项目根目录文件sonar-project.properties,如果项目不是在sonar中创建的,首先会自动解析lly根据配置文件中填写的name和key创建[sonar@c7-node1~]$catpython_test/sonar-project.propertiessonar.projectKey=python_testsonar.projectName=python_testsonarr.projectVersion=1.0sonar.sources=.sonar.sourceEncoding=UTF-8在项目根目录运行如下命令开始分析sonar-scanner扫描完成后可以看到我们的sonar是按照配置的内容填写的文件中自动创建python_test项目,分析两个bug。点击项目名称进入项目,查看项目的详细分析信息。点击bugs可以看到具体的bug信息。我们可以看到bug的信息是python的print语句有问题。Sonar不仅能找到bug,还能告诉我们为什么错了,还能给出正确的例子;查看bug的具体信息:说是python3.0删除了print语句,应该使用内置函数,给出了正确的实例。5.Sonar集成Jenkins使用5.1。在sonar中设置token以admin用户登录sonarQube,【配置】->【权限】->【用户】5.2.Jenkins安装sonar相关插件,安装红框5.3的两个插件。Jenkins配置sonar插件点击【系统管理】->【系统设置】配置Sonar认证信息,保存设置后点击【系统管理】->【全局工具配置】,配置sonar扫描仪信息5.4.在Jenkinsjob中配置sonar为了操作方便,我就不把刚才的代码放到git里面拉取了,直接把工作目录配置为刚才的python_test目录。在生产环境中,可以根据公司实际情况选择从svn或者git获取分析。在代码中添加一个build步骤,选择ExecuteSonarQubeScanner,选择一个jdk进行分析,Analysisproperties填写为刚才手动扫描的sonar-project.properties配置文件。这样我们Jenkins的sonar部分就配置好了,我们就可以省去构建的工作了。构建完成后可以直接跳转到sonar通过构建历史分析页面,如下图,附上Jenkinsjob的完整内容和构建视频。6.后记本文到此结束。虽然文中没有提到sonar的一些内容,比如项目管理、安全、监控、邮件通知等,但是我觉得汉化后的sonar管理还是比较方便易操作的。这里可以登录后台自行探索。另外,sonar+Jenkins的工作不是很全面,缺少自动代码获取和发布的配置,但是sonar的配置还是正确的,你只需要在你的代码获取后的第一个操作中添加即可,或者编译之前的操作都可用。文章为作者原创投稿。作者:西门飞冰,90后IT男,一直在北京工作,热爱运动、探险、旅行。