centos搭建代码代码检测平台(1):sonar+Jenkins+maven搭建篇

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 本文搭建的代码自动化测试平台:sonar+Jenkins+maven是在centos6.8版本上进行的,本章主要介绍sonar+Jenkins+maven环境的搭建,项目配置集成将在接下来的章节进行详细介绍。

本文搭建的代码自动化测试平台:sonar+Jenkins+maven是在centos6.8版本上进行的,本章主要介绍sonar+Jenkins+maven环境的搭建,项目配置集成将在接下来的章节进行详细介绍。

搭建的过程中需要的各软件版本如下:

sonar:7.2.1

MySQL:5.7.22

Apache tomcat :8.5.32

jenkins:2.134

jdk8

maven:3.5.4

git:采用yum安装


一、安装配置sonar

1、sonar介绍

Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具,比如pmd-cpd、checkstyle、findbugs、Jenkins。sonar最大的特点就是插件化,可以根据不同的场景需求进行插件化安装,以Java代码检测为,但同时可以检测Python、C++等多种语言。


通过客户端插件分析源代码,sonar客户端可以采用IDE插件、Sonar-Scanner插件、Ant插件和Maven插件方式,并通过各种不同的分析机制对项目源代码进行分析和扫描,并把分析扫描后的结果上传到sonar的数据库,通过sonar web界面对分析结果进行管理,架构图为:

5d781d7d1366c7eff334df4861d087ac5f2dd572

sonar架构图

可以从七个维度检测代码质量:

(1)复杂度分布(complexity):代码复杂度过高将难以理解
(2) 重复代码(duplications):程序中包含大量复制、粘贴的代码而导致代码臃肿,sonar可以展示源码中重复严重的地方

(3) 单元测试统计(unit tests):统计并展示单元测试覆盖率,开发或测试可以清楚测试代码的覆盖情况
(4) 代码规则检查(coding rules):通过Findbugs,PMD,CheckStyle等检查代码是否符合规范
(5) 注释率(comments):若代码注释过少,特别是人员变动后,其他人接手比较难接手;若过多,又不利于阅读
(6) 潜在的Bug(potential bugs):通过Findbugs,PMD,CheckStyle等检测潜在的bug

(7) 结构与设计(architecture & design):找出循环,展示包与包、类与类之间的依赖、检查程序之间耦合度


2、sonar安装配置

本文介绍的Sonar以官网最新的版本:sonar-7.2.1版本为演示依据,sonar各版本下载可以参考sonar官网:https://www.sonarqube.org/

82dab2c431ecd15c60bd6c97603b7188d13c269b

将下载的sonar-7.2.1.zip上传至服务器的/iyunwen/server/下面,重命名为:sonarqube。

ec9a81c5f8dbe2ae9580fb2c302876c89e3b93a7

jdk8所在目录为:/iyunwen/server/jdk8,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

8f657d7481898b1195b9e4dddb0a4c5019ee68fd


snoar需要将代码检测上传至数据库,此处用MySQL,数据库MySQL安装在/iyunwen/server/mysql,MySQL采用5.7.22版本,下载链接为:https://dev.mysql.com/downloads/mysql/5.7.html#downloads


e0d4cd80b37c239cb7d2df7ad9eff5dd311859a4

(1)、修改启动jdk

修改文件路径:/iyunwen/server/sonarqube/conf/wrapper.conf,需要制定Java的jdk版本,sonar启动采用jetty启动,为Java容器

5388db69d3961f2e041552586307ad76b0ec7247

注意:wrapper.java.command=/iyunwen/server/jdk8/bin/java一定要指定到jdk下面的Java,不能只指定/iyunwen/server/jdk8,否则启动的时候报如下错误:

--> Wrapper Started as Daemon

Launching a JVM...

Unable to start JVM: Permission denied (13)

JVM exited while loading the application.

JVM Restarts disabled.  Shutting down.

(2)、MySQL中创建sonar数据库账号密码:

032376314447da768107c0d45db505b1f4768978

创建sonar访问数据库:robot3_sonar

指定sonar访问数据库的账号:sonar,密码:Sonar2018

sonar创建的数据库和账号可以根据实际情况指定,此处不用导入数据库,表明sonar数据库是在启动的过程中自动创建数据库

(3)、修改sonar配置文件,指定数据库

修改配置文件所在目录:/iyunwen/server/sonarqube/conf/sonar.properties

设置sonar连接数据库的连接信息,如下图

0d09e2f425229765d7e8e841dc04ef7ba7836388

(4)启动sonar:

进入/iyunwen/server/sonarqube/bin/linux-x86-64------部署的服务器为centos6.8,所以进入sonar/bin/linux-x86-64下执行start.sh,执行命令为:

./start.sh start,会有如下报错(日志路径为:/iyunwen/server/sonarqube/logs/sonar.log)


sonar启动不能使用root权限启动,创建sonar用户启动:

fa9300c5d9a0fe87caeb2d01d76b40b4bd7b4f45

加入开启启动项:vim /etc/rc.local,su sonar -lc "/iyunwen/server/sonarqube/bin/linux-x86-64/sonar.sh start"


(5)访问sonar后台服务:地址为ip:9000,本文为192.168.1.160::9000,账号和密码默认为:admin/admin

a1312f934435af656a0f1a5ced8a4cb82ad22927

(6)、汉化语言包:在administration--->marketplace--->plugins中找到chinese packet

76ba12c417e7b9b1d2aba7c25326203fb0cdafa5

install之后提示重启后,整个界面就变成了中文显示



3、jenkins安装

jenkins官网地址为:https://jenkins.io/,下载了最新的2.134版本,采用war的方式利用tomcat容器发布:


159c8f57dd20e8634d54c42494ea7b7715e4112e

tomcat下载可以通过官网:https://tomcat.apache.org/download-80.cgi,tomcat解压可以直接使用,此处tomcat解压到/iyunwen/server/下命名为tomcat_jenkins

需要修改tomcat_jenkins一些参数,包括如下设置:

(1)、修改bin/catalina.sh文件,指定jdk和内存大小:


 
 


(2)指定tomcat启动用户:


 

(3)上传jenkins.war文件至webapps下面,启动tomcat:

 
在webapps下面将解压jenkins文件,将其重命名为ROOT(PS:访问jenkins地址如果不加工程名,需要将jenkins文件重新命名为ROOT,否则地址后面要加jenkins项目名称)

(4)访问配置:

此处的访问地址为:192.168.1.160:8080,如果在tomcat部署war包的过程中没有将jenkins重命名为ROOT,则访问地址为:192.168.1.160:8080/jenkins

解锁jenkins,根据提示获取对应的文件内容,输入即可解锁

2314a5cce7d75fed96231c68a2120108110a6746
解锁jenkins
5c8a5cf0ec9aff81af23e735a9ea1103b6ddad7b
自定义jenkins,此处我选择安装推荐的插件
0e558f7ea90916a87936d27a4d9e5ffd90a840e0
创建jenkins管理账号
da1903e99c675e6d20aaca94a0279b482599adca
配置访问地址
以上过程配置完成之后,即可进入jenkins后台了,如下图:
ac3b91999e96f5a1c42e13fd6ea40ab5c500bfb3


4、maven安装配置

maven的官网下载地址为:http://maven.apache.org/download.cgi,此处下载的是zip文件

e7dd051493e7defa26afe15263bd81c2e4107372

将maven压缩包解压到/iyunwen/server下面,重命名为maven




5、jenkins集成git+maven+sonar配置

(1)插件配置

登录jenkins后台,找到系统管理---->插件管理---->可选插件

eb7ec5d4b94ff6a24372ae04308801f576220141

其中必选安装的插件有git相关、maven相关、sonar相关,详细清单如下:

ec04bbb36824ff6770254d9f827727b8163f1fab

安装完成以后,可以在已安装中查看


(2)全局工具配置

jenkins中,系统管理--->全局工具配置   全局工具配置主要配置maven、git、sonar、jdk等的环境变量,非常重要,对于存有疑问的地方,可以点击每一个选项中的问号(?)会出现相关提示。

a、maven配置

0528a01d5594607d76d40b6362de64b840d26dc7

此处maven安装在/iyunwen/server/maven下面

b、jdk配置

8b2fb91cbf2da854c3e9d2cf61626978a9075fcf

jdk采用的jdk8,路径为/iyunwen/server/jdk8

c、git配置

d9e8af3e04ead93d07d53b90a0c0b69807e05289

git是在服务器端采用yum安装:yum -y install git,git路径为/usr/bin/git


d、sonar-scanner配置

由第一章的架构图知,sonar-scanner为客户端,jenkins通过sonar调用检测代码

sonar-scanner下载地址为:https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner

下载Linux版本的sonar-scanner,上传服务器至/iyunwen/server下面,重命名为sonar-scanner,对于sonar在jenkins的配置为

bb59b5a3d4d372b65c6bbe5e53928b2ab7615ada

e、maven配置

0c6f58ca9353ea2adf4fe2b457ef2255621ac07f

(3)、系统设置

在jenkins中,系统管理---->系统配置中

a、maven项目内存配置

a962031d3e6d151abcb31eb09373077025031764

b、sonar的server端信息配置

sonar server的配置有2项,一个为server的地址信息,一个为通信的token,如下图

c7ed36c7772989538ed942a447657124713e6fd6

对于sonar的token生成方式,需要admin登录sonar,右上角--->我的账号---->安全---->生成令牌,令牌的名字可以任意填写,将生成的token填写至jenkins server配置信息中




6、开始构建项目进行代码检测

jenkins后台---->新建任务,如下图

78230463d1fb1ea13af9896d897ee65089312a14

点击完成之后,进入配置界面,此处的配置需要额外注意,有一些特别需要注意的点,否则会出现问题


(1)源码管理

指定项目的git地址

e128ff77798e9b0c2798a5741b4d3dde42b32c29

此处,如果git没有安装或者没有将jenkins的用户key文件添加到git服务器中,则会报以下错误

8bc372feac35709c1215883b0a3924c0ca6ae454

此处需要注意的点有:


a、生成key文件添加git服务器

由于jenkins使用的tomcat用户启动,所以添加到git服务中的Key文件必须是tomcat的,如果添加的是root的key文件,此处仍然有问题


 

e70e23358507c3a026376cc7f9be2d4845c9cb53
生成的key文件在:/iyunwen/server/tomcat_jenkins//.ssh/id_rsa.pub,将id_rsa.pub添加到git服务器的SSH文件中即可

b、系统中存在git服务,并确保用tomcat用户,可以git clone项目

(2)构建
2688a914d2ee6ab69116d4c0f4dcae83a3a4b73c
采用sonar-scan扫描代码,构建中需要执行shell命令

/iyunwen/server/sonar-scanner/bin/sonar-scanner -X -Dsonar.host.url=http://192.168.1.160:9000  -Dsonar.language=java -Dsonar.projectName=Task -Dsonar.projectVersion=1.0 -Dsonar.projectKey=Task -Dsonar.sources=src -Dsonar.projectBaseDir=/iyunwen/server/tomcat_jenkins/.jenkins/workspace/task
其中,sonar-scanner指定了sonar的信息,因为需要修改好/iyunwen/server/sonar-scanner/conf/sonar-scanner.properties,修改内容如下:

#----- Default SonarQube server
sonar.host.url=http://192.168.1.160:9000

#----- Default source code encoding
sonar.sourceEncoding=UTF-8
sonar.jdbc.url=jdbc:mysql://192.168.1.160:3306/robot3_sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.jdbc.username=sonar
sonar.jdbc.password=Sonar2018


保存以上配置,开始进行构建即完成了task项目的代码检测过程,检测的结果,登录sonar后台,可以查看到
7a72d349b9f6d00ad5b28e70075810c87e896833



到此,centos搭建代码代码检测平台:sonar+Jenkins+maven搭建篇已完成,后续章节我们将进入sonar代码检测的深度集成分析和插件使用方面


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
7月前
|
存储 运维 jenkins
放弃"Jenkins"的种种理由,期待更好赋能研发的"持续交付平台"
Jenkins 很酷,但是不完美,有历史局限性造成的问题。本文仅从“如何更好给研发团队赋能的角度”,剖析Jenkins, 探讨理想的持续交付平台, 不带货无广告~
136 3
|
2月前
|
Java jenkins 持续交付
Centos7下docker的jenkins下载并配置jdk与maven
通过上述步骤,您将成功在CentOS 7上的Docker容器中部署了Jenkins,并配置好了JDK与Maven,为持续集成和自动化构建打下了坚实基础。
125 1
|
4月前
|
Java jenkins Shell
jenkins学习笔记之五:Maven、Ant、Gradl、Node构建工具集成
jenkins学习笔记之五:Maven、Ant、Gradl、Node构建工具集成
|
4月前
|
Java jenkins 持续交付
Jenkins Pipeline 流水线 - 拉代码(SVN) + Maven 编译打包
Jenkins Pipeline 流水线 - 拉代码(SVN) + Maven 编译打包
151 0
Jenkins Pipeline 流水线 - 拉代码(SVN) + Maven 编译打包
|
4月前
|
物联网 应用服务中间件 Linux
CentOS7.9 Nginx+EMQX集群组建MQTTS平台
通过以上步骤,您已成功搭建了一个基于CentOS 7.9、Nginx和EMQX的MQTTS平台。这个平台既能保证数据传输的安全性,又能利用Nginx的负载均衡能力和EMQX的高性能、高并发处理能力,实现稳定高效的消息服务。在部署和配置过程中,务必注意证书、域名以及EMQX配置的正确性,确保系统安全和稳定运行。此外,定期更新软件和系统,以及监控系统性能,也是保证MQTTS平台长期稳定运行的重要环节。
120 4
|
4月前
|
物联网 应用服务中间件 Linux
CentOS7.9 Nginx+EMQX集群组建MQTTS平台
通过以上步骤,您已成功搭建了一个基于CentOS 7.9、Nginx和EMQX的MQTTS平台。这个平台既能保证数据传输的安全性,又能利用Nginx的负载均衡能力和EMQX的高性能、高并发处理能力,实现稳定高效的消息服务。在部署和配置过程中,务必注意证书、域名以及EMQX配置的正确性,确保系统安全和稳定运行。此外,定期更新软件和系统,以及监控系统性能,也是保证MQTTS平台长期稳定运行的重要环节。
141 3
|
4月前
|
Java jenkins 持续交付
jenkins学习笔记之十七:使用插件及maven上传制品到nexus
jenkins学习笔记之十七:使用插件及maven上传制品到nexus
|
4月前
|
Kubernetes jenkins 持续交付
Jenkins + SVN/Git + Maven + Docker + 阿里云镜像 + Kubernetes(K8S)
Jenkins + SVN/Git + Maven + Docker + 阿里云镜像 + Kubernetes(K8S)
181 0
|
5月前
|
Java jenkins 持续交付
Jenkins是开源CI/CD工具,用于自动化Java项目构建、测试和部署。通过配置源码管理、构建触发器、执行Maven目标,实现代码提交即触发构建和测试
【7月更文挑战第1天】Jenkins是开源CI/CD工具,用于自动化Java项目构建、测试和部署。通过配置源码管理、构建触发器、执行Maven目标,实现代码提交即触发构建和测试。成功后,Jenkins执行部署任务,发布到服务器或云环境。使用Jenkins能提升效率,保证软件质量,加速上线,并需维护其稳定运行。
133 0
|
7月前
|
jenkins 持续交付
基于Jeecgboot前后端分离的平台后端系统采用jenkins发布
基于Jeecgboot前后端分离的平台后端系统采用jenkins发布
79 1