• 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:Desktopsonar-scanner-cli-3.3.0.1492-windowssonar-scanner-3.3.0.1492-windowsin 此目录指的是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:Desktopapache-tomcat-7.0.93(部署war包的tomcat的解压缩文件夹根目录)

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

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

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

    jenkins所在的tomcat

    CATALINA_BASE=D:Tomcatapache-tomcat-8.5.30

    CATALINA_HOME=D:Tomcatapache-tomcat-8.5.30

    部署项目的tomcat

    CATALINA_BASE1=D:Desktopapache-tomcat-7.0.93

    CATALINA_HOME1=D:Desktopapache-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%in      因为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的路径。

    对项目进行配置

     

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

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

      

  • 相关阅读:
    jquery 获取select框选中的值示例一则
    jsp的三种自定义标签 写法示例
    通过 SQL Server 视图访问另一个数据库服务器表的方法
    [转]SQLServer跨服务器访问数据库(openrowset/opendatasource/openquery)
    JS 禁用和重新启用a标签的点击事件
    JS原生父子页面操作
    为什么我们有时不用配置java环境变量?
    Android -- ViewPager多页面滑动切换以及动画效果
    Android -- 程序启动画面 Splash
    apache 伪静态 .htaccess
  • 原文地址:https://www.cnblogs.com/qiaoyutao/p/10437118.html
Copyright © 2020-2023  润新知