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

Posted 当初的当初

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tomcat+Jenkins+SonarQube+SVN+Maven 集成自动化环境搭建(Windows10环境下)相关的知识,希望对你有一定的参考价值。

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

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

导图:

 

环境准备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  出现如下图表示安装成功

 

下面就是配置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连接的用户下是否有一下表

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

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

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

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

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

 

 

 

 

 第四步:进行项目分析

说明: 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了

 

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

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

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

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

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

点击JDK安装

填写参数

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

点击maven安装

暂时先配置这两个工具。

 JenKins的使用

点击新建任务

 

 

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

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

 

 

 

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

在此处查看日志输出。 

到最后提示  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配置如下;

 项目构建之前执行命令

 

 

项目构建完成后执行命令

 

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

配置此参数的原因是,如果单单的配置构建完成之后执行启动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进行生成, 并保存好。

 

 

安装SonarQube Scanner for Jenkins 插件

对jenkins进行配置

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

 

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

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

 

点击安装,如下图

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

对项目进行配置

 

 

 

 

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

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

以上是关于Tomcat+Jenkins+SonarQube+SVN+Maven 集成自动化环境搭建(Windows10环境下)的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins——Jenkins+SonarQube代码审查

Jenkins——Jenkins+SonarQube代码审查

Jenkins集成sonarQube 8.2

Jenkins+SonarQube代码审查

Jenkins集成Sonarqube

我如何在 jenkins 上发布 sonarqube 报告?使用 sonarqube portlet