sonar mysql svn_Tomcat+Jenkins+SonarQube+SVN+Maven 集成自动化环境搭建(Windows10环境下)

说在前面的话: 从接到任务到完成共用了7天的时间。正常人用不到这个时间。 此时的功能表现是: 登录本地JenKins对项目进行构建,能够自动从SVN读取最新代码并按照Maven项目构建,构建完成能够自动使用SonarQube分析代码质量,并将构建的War包部署到指定容器中。

版权声明:此博客纯手打,个人创作,转载请注明出处

导图:

cf3a2eadfdf34c48a88864ff6673241b.png

环境准备:MySQL5.7、 Tomcat7.0.93、Tomcat8.5.30、JenKins2.160、SonarQube7.6+Sonar Scanner3.3.0、Maven3.3.3、SVN1.8.22、Window10

环境需要注意的地方:SonarQube对数据库的版本要求相对比较严格,请配置版本对应的SonararQube+MySQL,其他的版本搭建过程中暂没有发现异常。

查看SonarQube支持的MySQL版本:在SonarQube的解压缩文件夹中的conf文件夹中打开sonar.properties配置文件,找到带有MySQL字样的注释,会看到“#----- MySQL >=5.6 && <8.0” 或者 “#----- MySQL 5.6 or greater”。 意思是版本在5.6和8.0或者5.6以上。 这里建议尽量将MySQL版本靠近但不是下限的版本,我的之前装的8.3的后来不能用又卸载重新安装的5.7;  如果自己不想装数据库,SonarQube自带的有MySQL数据库,自带的没有用过,过程请另找资料。 其他数据库与此类似。

MySQL配置

第一步:用工具或者控制台创建MySQL用户并给权限(表和视图的创建、用户的创建、索引的创建等权限,这里推荐使用Navicat工具比较方便)。

第二步:用第一步创建的用户登录MySQL并创建名为sonar(可以自定义)的数据库。

至此MySQL配置完成!

SonarQube安装

第一步:进入SonarQube解压缩文件夹的bin文件夹运行StartSonar.bat文件,打开浏览器输入localhost:9000  出现如下图表示安装成功

37395ef0a71a21dc59ae627caacd0a6b.png

下面就是配置SonarQube

SonarQube配置

第一步:配置SonarQube数据库连接参数--> 在SonarQube解压缩的conf文件夹中找到sonar.properties配置文件,在有MySQL注释的下方添加如下配置

sonar.jdbc.url=jdbc:mysql://192.168.163.120:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance

sonar.jdbc.username=sonar

sonar.jdbc.password=sonar

sonar.sorceEncoding=UTF-8

sonar.login=admin

sonar.password=admin

sonar.jdbc.url是数据库了解的驱动;其中的sonar指的是上面创建的MySQL数据库的数据库,其他参数不变

sonar.jdbc.username和sonar.jdbc.userpassword指的是上面创建的数据库用户和密码, 注意:不要试图去用MySQL数据库的root用户配置连接参数,这里告诉你行不通。

sonar.login和sonar.password指的是一会儿启动SonarQube之后登陆用的账号密码;可以自定义

第二步:进入SonarQube解压缩文件夹下的bin目录找到对应系统的文件夹进去之后分别执行 InstallNTService.bat(以管理员身份运行)、StartNTService.bat(以管理员身份运行)、StartSonar.bat对数据库进行初始化;第一次运行StartSonar.bat时可能会秒退,如果没有秒退那就更好;如果秒退那么进入SonarQube解压缩文件夹下的logs文件夹打开sonar.log日志文件看是否有报错,如果没有报错那么说明SonarQube已经启动,接下来查看MySQL数据库SonarQube连接的用户下是否有一下表

1ee44786917a36de3dff3152ee8b07d1.png

如果上述一切正常,这时候就可以打开浏览器输入地址 localhost:9000 来登录SonarQube了。第一次登录时需要初始化数据库需要等待一会儿。

常见异常说明:在启动SonarQube的时候,如果有异常控制台也会秒退,这个时候就要去sonar.log文件查看异常信息,如果异常是“远程主机断开了一个连接”, 那就是SonarQube初始化数据库的时候有异常,这时候就去解压缩文件夹下的logs文件夹中的web.log文件查看具体的报错信息; 我见到的异常是SonarQube执行的SQL语法不对,开什么玩笑sonarqube作者还能把sql写错了?。 实际就是MySQL版本不对导致的。这个时候就要考虑换MySQL了。

第三步:安装常用插件按照下图

4dc1f7c529c3609e5c3e7caa6bf2d554.png

搜索chinese Pack,安装中文语言包, 有的war包已经默认的有中文插件包,那么此步就可以略过了。装完插件重启JenKins即可

重启方法: 在启动的控制台按ctrl+c输入y回车即可停止SonarQube ,再次运行StartSonar.bat文件即可。

bb599316469af73f50c184c8f623420b.png

第四步:进行项目分析

说明: SonarQube项目分析分为两种,一种是用SonarQube本身的命令; 另一种是用SonarQube的Sonar Scanner扫描仪进行分析; 前一种配置太繁琐,我就没有深究;我用的第二种;

1. 下载Sonar Scanner扫描仪

将文件解压缩,可以放置到任意目录下。

2. 配置Sonar Scanner环境变量

在path中添加 D:\Desktop\sonar-scanner-cli-3.3.0.1492-windows\sonar-scanner-3.3.0.1492-windows\bin 此目录指的是Sonar Scanner解压缩文件夹的bin目录。

3. 在要分析的项目中与pom.xml同级目录中创建sonar-project.properties配置文件,文件内容如下

# must be unique in a given SonarQube instance

sonar.projectKey=personnel-data-sys-1

# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.

sonar.projectName=personnel-data-sys

sonar.projectVersion=1.0

# Path is relative to the sonar-project.properties file. Replace "/" by "/" on Windows.

# This property is optional if sonar.modules is set.

sonar.sources=web.dao/src,web.pojo/src,web.service/src,web.vo/src

sonar.java.binaries=D:/Eclipse-jee-2018-09/WorkSpace/HuiMeng(HeNan)/trunk/personnel-data-sys/personnel-data-sys/personnel-data-sys/web.dao/target/classes,

D:/Eclipse-jee-2018-09/WorkSpace/HuiMeng(HeNan)/trunk/personnel-data-sys/personnel-data-sys/personnel-data-sys/web.pojo/target/classes,

D:/Eclipse-jee-2018-09/WorkSpace/HuiMeng(HeNan)/trunk/personnel-data-sys/personnel-data-sys/personnel-data-sys/web.service/target/classes,

D:/Eclipse-jee-2018-09/WorkSpace/HuiMeng(HeNan)/trunk/personnel-data-sys/personnel-data-sys/personnel-data-sys/web.vo/target/classes

# Encoding of the source code. Default is default system encoding

sonar.sourceEncoding=UTF-8

参数说明:

sonar.projectKey: 指的是分析的项目上传到SonarQube之后的唯一凭证, 自定义。

sonar.projectName:  指的是分析的项目上传到SonarQube之后的名称,自定义。

sonar.projectVersion: 版本号,自定义

sonar.sources: 被分析的源码的位置,切记这个路径只能是相对路径,相对此配置文件的路径。 多个路径用英文逗号隔开

sonar.java.binaries: 被分析的源码的class文件的路径。这个可以是绝对路径。就是本地从svn检下来的项目的路径。如果没有,用maven命令编译一下项目生成即可。或者用eclipse编译也行。只要把class文件弄出来就行

sonar.sourceEncoding: 编码

上述参数配置完之后, 打开控制台,将路径切换到项目的pom.xml所在的目录下,执行 sonar-scanner 命令提示成功之后, 登录SonarQube就会看到分析的结果。

其他的扫描仪的用法请参见官方文档: https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner

至此单独的SonarQube就可以使用了。

JenKins篇

JenKins下载安装配置

JenKins的安装有两种形式, 一种是安装包的形式,另一种是war包的形式,这里介绍war包的形式。

从登录官网下载JenKins.war; 将war包原封不动的拷贝到Tomcat的webapps文件夹下,启动Tomcat。访问localhost:8080/jenkins,出现下图即可以正常使用jenkins了

1301420a1c14b650a4e29480d2b1fb2d.png

第一次登录jenkins时需要解锁jenkins。  就是找到上图红色字体路径的文件复制里面的密匙。到下方文本框,点击ok即进入插件安装界面,如下图。

658119617a58e3551ec21ccab35c9fcd.png

点击安装推荐的插件,进行插件的安装,如果是刚入门难,建议安装推荐的插件。如果不想安装推荐的,那么就选择右边这个自己选择安装的插件。如果安装推荐的插件会进入下图

54a08eab27a4e95778a79394dafbf25b.png

一般情况下推荐的插件中就有中文包,如果没有那么就去“系统管理-->插件管理-->可选插件(第二个),搜索Localization: Chinese(不同版本的jenkins可能名字不同), 选择Localization: Chinese (Simplified)安装即可,”等待所有的插件安装完成,进入创建用户的界面,如下图

745252222d79b331b66dcf94fcb51886.png

创建完用户之后,就进入了首页, 下面开始常用工具的配置, 进行工具配置的前提是要安装了相应的插件, 如Maven等,否则就不会有相应的选项

在“系统管理-->插件管理”的“可选插件”中搜索  Maven Integration plugin  点击进行maven插件的安装。 JDK就搜索 JDK Tools plugin进行JDK插件的安装

af01d69b883994e9422bc9a68e9f8630.png

点击JDK安装

4b7f5ead96b0a959ea2aa733e796a125.png

填写参数

54660968a71f4751ebf576bf28876f94.png

往下找,找到maven配置项,如下图

39a4c6f63ddac201a6a1a737c3f0aba4.png

点击maven安装

5c7041ab05d3488fd28588385a95210e.png

暂时先配置这两个工具。

JenKins的使用

点击新建任务

adb8eea57005faff7e2e4d06b8cff822.png

3c2639d34ccd25db84478a93c4f460b4.png

如果没有“构建maven项目 ”这个选项,说明Maven Integration plugin这个maven插件没有安装,去装一下maven插件即可。

下面进行参数配置,各个参数的详解如下图。

752beb812d466c56f1c4b23d36973f55.png

参数填写完成,保存之后,回到首页, 构建项目,如下

b2e1b760c387b3bed426128725907421.png

在此处查看日志输出。

df805836c5359e0e26b03020a94f3d9d.png

到最后提示  SUCCESS 成功之后,标识项目构建完成,恭喜你jenkins可以正常使用,当然了仅仅完成构建是没有任何意义的,下面要让Jenkins构建完成后可以自动将war包部署到tomcat容器

JenKins自动部署war包到Tomcat配置

思路:在构建之前运行windows命令停掉tomcat,;在构建完成之后,将构建生成的war包拷贝到目标tomcat的webapps目录下,再执行windows命令启动tomcat

说明:这个时候不能把war包部署到jenkins所在的tomcat了,因为在构建之前要停掉tomcat如果与jenkins配置同一个tomcat,那么Jenkins的tomcat停了jenkins就无法工作了

这个时候就要再用一个tomcat,但这时会有一个问题就是,两个tomcat的启动和停止脚本不能各自识别自己的tomcat,会出现运行任一个停止的脚本,就会把启动着的tomcat停掉,而不作区分;如果执行启动脚本,那么第二个启动的会端口冲突。解决办法如下

1.  配置环境变量为:CATALINA_HOME1=D:\Desktop\apache-tomcat-7.0.93(部署war包的tomcat的解压缩文件夹根目录)

CATALINA_BASE1=D:\Desktop\apache-tomcat-7.0.93(部署war包的tomcat的解压缩文件夹根目录), 与CATALINA_HOME1的值相同,

并且要为jenkins所在的tomcat配置CATALINA_BASE=D:\Tomcat\apache-tomcat-8.5.30

所在就会有如下环境环境变量

jenkins所在的tomcat

CATALINA_BASE=D:\Tomcat\apache-tomcat-8.5.30

CATALINA_HOME=D:\Tomcat\apache-tomcat-8.5.30

部署项目的tomcat

CATALINA_BASE1=D:\Desktop\apache-tomcat-7.0.93

CATALINA_HOME1=D:\Desktop\apache-tomcat-7.0.93

找到部署项目的tomcat的bin文件夹下的startup.bat和shutdown.bat文件,将其中的CATALINA_HOME替换为CATALINA_HOME1

找到部署项目的tomcat的bin文件夹下的catalina.bat文件,将其中的CATALINA_HOME替换为CATALINA_HOME1移机CATALINA_BASE替换为CATALINA_BASE1保存即可,

这时候即可同时启动两个,并且停的时候也只停相应的。

在path环境变量中添加  %CATALINA_HOME1%\bin      因为jenkins所在的tomcat不需要经常的启动和停止,如果需要停止和启动,手动就行了, 所以这里配成了部署项目的tomcat

JenKins配置如下;

7342cd3c5579d5839d7d0a40615667b9.png

5cf890759c144efa73151c2dd7e18053.png

项目构建之前执行命令

66e956b66fe6348ae8f77ba22fabe582.png

项目构建完成后执行命令

b611080c89da100645a1c4bf23fcf93b.png

2dddfe4da648fa3ebbddb708b696595f.png

配置完命令,之后再去配置 构建参数如下图

f2a8103154efd2414682f9a28c634a6f.png

53c1a09541b0f22304d60837081ea47d.png

配置此参数的原因是,如果单单的配置构建完成之后执行启动tomcat的命令,那么jenkins就会以衍生线程来开启控制台执行命令,但是当jenkins构建完成,默认就会把当前线程和所有的衍生线程全部杀掉,那么这时候就会导致启动的tommcat被杀掉,那么tomcat还是没有启动起来。  添加此参数的作用就是,改变衍生线程的ID, 让jenkins在构建完成之后,无法识别启动tomcat的线程是自己的衍生线程就可以了。  此参数不能再“系统管理-->节点管理”添加环境变量中配置,在那配置的话会导致jenkins一直等待启动tomcat的线程结束,并且Jenkins认为这个不是衍生线程也不会杀掉,就会一直等待,直到构建失败。

只是做这些还是不够,如果编译报出 此处不应有=2048"" 字样,原因是jenkins执行脚本的时候把一个双引号会转义为两个双引号。 打开tomcat下的bin目录中的catalina.bat文件,搜索2048, 将2048的引号去掉,如下

if not "%JSSE_OPTS%" == "" goto gotJsseOpts

set JSSE_OPTS="-Djdk.tls.ephemeralDHKeySize=2048"

:gotJsseOpts

set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%"

变为

if not '%JSSE_OPTS%' == '' goto gotJsseOpts

set JSSE_OPTS=-Djdk.tls.ephemeralDHKeySize=2048

:gotJsseOpts

set JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%  即可。

如果没有报错,那就不用做此修改。

到此jenkins自动部署项目完成。

JenKins集成SonarQube

集成之后的效果是,当构建完成之后,自动检测代码质量,并上传检测结果到sonarqube。这里也使用Sonar Scanner扫描仪进行集成

登录sonarqube生成token

点击Administrator->security->user,点击token按钮,输入key后再点击generate进行生成, 并保存好。

ee927b19dbaff1a6d4ef864df0445f0a.png

对jenkins进行配置

安装完成后,在 系统管理->系统设置中,找到SonarQube servers模块,填写服务器信息:

a0f1bf8174e192724155a3d79fac1376.png

其中Server authentication token 就是上面登录sonarqube生成的token. 拷贝进来即可。

“系统管理-->全局工具配置”

53edf2480ed6b10c8d857d49583d3e53.png

点击安装,如下图

d8324fb2b6d0d32502f0d36f4ca2a207.png

注意配置的是Sonar Scanner扫描仪的路径,可不是Sonarqube的路径。

对项目进行配置

29b9cc0d8f04856d27d61cb11272d1a1.png

6a08ca4dcc9fee2da569b8365fa78e42.png

配置完成之后,保存。 构建项目,如下

388809960e80b5656e610cba55118908.png

43dab0b829dd98688f270f1ba748e722.png

构建成功之后,如下图点击即可查看检测结果,如果没有这个选项,说明集成失败。

8d9cf0813dbae70c53a7bbf942423200.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值