持续集成Jenkins+sonarqube部署教程

Posted 金阳光测试

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了持续集成Jenkins+sonarqube部署教程相关的知识,希望对你有一定的参考价值。

1 引言

1.1 文档概要

本文主要介绍jenkins,sonar的安装与集成,基于ant,maven构建。用一个例子介绍jenkins的编译打包部署,代码检查。最后集成jenkins。(现阶段只是简易的集成,后续需要修改accio源码做深度集成)

1.2 预计读者

系统配置管理员:要懂得搭建持续集成环境,有问题可以排查;
架构师:了解持续集成实现原理,协助项目接入持续集成。项目在持续集成环境运行中,进行维护、分析构建异常等;
维护人员:重启服务、排查环境问题、项目接入支持;

1.3 关于持续集成

提供一套可以持续集成项目流程。能够给接入的项目提供每日构建、自动化测试的支持,提高项目质量、节省项目成本。

2 预装软件

软件名称 平台 备注
jdk1.7.0_17 Win7 操作系统
apache-ant-1.9.6 Win7 Ant
apache-tomcat-6.0.13 Win7 Tomcat容器

3 安装列表

软件名称 平台 备注
Jenkins Win7 端口 8080
sonarqube-5.1.2 Win7 端口 9000
sonar-runner-2.4 Win7 
nexus-2.7.1-01 Linux Maven私有服务

4 jenkins安装步骤

4.1 安装Jenkins服务端

从jenkins官网下载jenkins:https://wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkins点击“download jenkins.war”

下载的为jenkins.zip将其更改为jenkins.war包,有两种运行方式
1. 运行 java -jar jenkins.war,采用内置jetty服务器。
2. 将下载的war包文件部署到 servlet 容器,然后启动容器(推荐这种方式)。
用浏览器打开http://localhost:8080/ jenkins,访问Jenkins主页。

安装成功!

4.2 修改jenkins工作空间

Jenkins的默认工作间在C:Usersxxxxxx.jenkins,修改工作空为间D:jenkins,只需要添加环境变量
JENKINS_HOME=D:jenkins
持续集成Jenkins+sonarqube部署教程
重启jenkins;

4.3 基本配置

用浏览器打开http://localhost:8080/ ,访问Jenkins主页。
点击“系统管理”页面
持续集成Jenkins+sonarqube部署教程
1. Utf-8编码
Your container doesn't use UTF-8 to decode URLs. If you use non-ASCII characters as a job name etc, this will cause problems. See Containers and Tomcat i18n for more details.

Jenkins建议在tomcat中使用utf-8编码,配置tomcat下conf目录的server.xml文件

2.系统设置
在已运行的Jenkins主页中,点击左侧的系统管理—>系统设置进入如下界面:
持续集成Jenkins+sonarqube部署教程

3.JDK、Ant配置
持续集成Jenkins+sonarqube部署教程
持续集成Jenkins+sonarqube部署教程
4.Jenkins Location配置
持续集成Jenkins+sonarqube部署教程
5.邮件通知配置
持续集成Jenkins+sonarqube部署教程
注意:如果使用qq邮箱需要开通SMTP服务,打开邮箱点击“设置”》“账户”
持续集成Jenkins+sonarqube部署教程
持续集成Jenkins+sonarqube部署教程

4.4 邮件插件安装

等待插件安装完成后,登录到服务器上,重启Jenkins服务!
服务重启后,用浏览器打开http://localhost:8080/ ,访问Jenkins主页。
点击“系统管理”-》“系统设置”
看到“Extended E-mail Notification”主题配置单元,就证明配置成功。
持续集成Jenkins+sonarqube部署教程
持续集成Jenkins+sonarqube部署教程
email-ext插件允许使用变量来动态插入数据到邮件的主题和内容主体中。变量是一个以$(美元符号)开始,并以空格结束的字符串。当一个邮件触发时,主题和内容主体字段的所有变量都会通过真实的值动态地替换。同样,变量中的“值”能包含其它的变量,都将被替换成真实的内容。

邮件的内容如下:

项目名称:$PROJECT_NAME



构建编号:$BUILD_NUMBER



svn版本号:${SVN_REVISION}



构建状态:$BUILD_STATUS



触发原因:${CAUSE}





变更集:${JELLY_SCRIPT,template="html"}



持续集成Jenkins+sonarqube部署教程

详细配置可以参考 

4.5 权限插件安装

点击“系统管理”-》“管理插件”》“可选插件” 在搜索框输入“Role-”点“直接下载”
持续集成Jenkins+sonarqube部署教程
持续集成Jenkins+sonarqube部署教程
持续集成Jenkins+sonarqube部署教程

点击“系统管理”-》“Configure Global Security”
持续集成Jenkins+sonarqube部署教程
点击“系统管理”-》“Manage and Assign Roles”
持续集成Jenkins+sonarqube部署教程
点击“Manage Role”,Role to add 新增角色。
持续集成Jenkins+sonarqube部署教程
点击点击“系统管理”》“管理用户”新增用户
持续集成Jenkins+sonarqube部署教程
点击“Assign Roles”,User/group to add ,给用户添加相应的权限
持续集成Jenkins+sonarqube部署教程

注意: 如果给anonymous新增admin权限,系统不用登陆也具有admin权限,所以其他的角色权限都是失效状态。

4.6 自动部署插件安装

点击“系统管理”-》“管理插件”》“可选插件”搜索“Deploy to container Plugin”,“直接下载”
持续集成Jenkins+sonarqube部署教程
配置tomcat权限,在tomcat的conf目录下修改tomcat-users.xml,添加一下内容。










4.7 构建一个自由风格的项目

选择项目构建工具,本例中使用ant,ant已经在全局配置中配置。
持续集成Jenkins+sonarqube部署教程

配置构建完成自动部署,部署需要安装deploy插件,安装方法同邮件插件安装。如果是集群部署则需要点击“Add Container”新增需要部署的容器。
持续集成Jenkins+sonarqube部署教程
看到如下日志说明部署成功
持续集成Jenkins+sonarqube部署教程
配置邮件插件
持续集成Jenkins+sonarqube部署教程
点击“保存”。进行项目构建,点击“立即构建”
持续集成Jenkins+sonarqube部署教程
点击构建日期右边的小三角, 
持续集成Jenkins+sonarqube部署教程

点击“Console Output”查看构建日志
持续集成Jenkins+sonarqube部署教程
测试项目自动构建打包,打包完成后部署到远程服务器。

5 Sonar安装

5.1 Sonar安装

下载sonar 
下载完后解压客户端,随意放置一个地方
如 我放置于D:
进入进入D:sonarqube-5.1.2in这里需要注意,选择32或者64是对应你配置的JDK)
持续集成Jenkins+sonarqube部署教程
创建数据库,默认数据库H2,这里我们修改为mysql
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
创建用户
CREATE USER 'sonar' IDENTIFIED BY 'sonar'; 
给用户授权
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar'; 
FLUSH PRIVILEGES;

修改sonar.properties文件
持续集成Jenkins+sonarqube部署教程
添加如下内容,sonar默认自带mysql驱动。
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:mysql://10.10.5.64:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true 
sonar.jdbc.driverClassName=com.mysql.jdbc.Driver

运行“StartSonar.bat”
持续集成Jenkins+sonarqube部署教程
访问9000端口,sonar默认自带了jetty服务器。默认用户名密码 admin、admin。一些设置和菜单只有在登陆之后才能看到。
持续集成Jenkins+sonarqube部署教程
安装sonar汉化包,点击“配置”》“系统”》“更新中心”》“Arailable Plugins”选择“Chinese Pack”,由于我已经安装了汉化包所以没有列出。
持续集成Jenkins+sonarqube部署教程
持续集成Jenkins+sonarqube部署教程
安装完成后在“installed Plugins”可以看到该插件。记得重启后,记得刷新一下浏览器
持续集成Jenkins+sonarqube部署教程

5.2 安装sonar-runner

下载:http://www.sonarqube.org/downloads/
持续集成Jenkins+sonarqube部署教程
下载后解压
持续集成Jenkins+sonarqube部署教程
修改conf目录下的sonar-runner.properties文件,新增如下内容,数据库
持续集成Jenkins+sonarqube部署教程
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:mysql://10.10.5.64:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true 
sonar.jdbc.driverClassName=com.mysql.jdbc.Driver
配置环境变量,将D:sonar-runner-2.4in 添加到Path
持续集成Jenkins+sonarqube部署教程
持续集成Jenkins+sonarqube部署教程

在项目的根目录下添加文件sonar-project.properties
持续集成Jenkins+sonarqube部署教程
文件内容如下
sonar.projectKey=HotelMonitor
sonar.projectName=HotelMonitor
sonar.projectVersion=1.2
sonar.sources=src
sonar.sourceEncoding=UTF-8
sonar.language=java

在“开始”》“运行”中输入cmd切换的项目更目录 输入“sonar-runner”
持续集成Jenkins+sonarqube部署教程
看到如下日志,说明代码校验成功
持续集成Jenkins+sonarqube部署教程

登陆http://localhost:9000/ 查看代码扫描结果
持续集成Jenkins+sonarqube部署教程
点击项目名称查看校验详情
持续集成Jenkins+sonarqube部署教程

6 Jenkins与sonar集成

6.1 Jenkins配置

点击点击“系统管理”》“系统设置”
配置sonar-runner有两种方式
第一种jenkins自动安装sonar-runner
持续集成Jenkins+sonarqube部署教程
第二种 使用现有安装
持续集成Jenkins+sonarqube部署教程

6.2 sonar配置

持续集成Jenkins+sonarqube部署教程
点击“保存”。
在项目中配置sonar代码分析
点击项目名称进入项目配置,选择“新增构建步骤”,选择“invoke Standalone Sonar Analysis”
持续集成Jenkins+sonarqube部署教程
作如下配置
持续集成Jenkins+sonarqube部署教程
点击“保存”

将项目根目录下的sonar-runner.properties提交svn,
执行“立即构建”
看到jenkins的控制台输出如下日志,校验成功
持续集成Jenkins+sonarqube部署教程
持续集成Jenkins+sonarqube部署教程
访问http://localhost:9000/dashboard/index/HotelMonitor
查看校验结果。

若果本地安装了sonar-runner,可以运行本地bat脚本的方式运行sonar-runner,配置如下,前提是必须将sonar-runner加入的环境变量, 选择“增加构建步骤”
持续集成Jenkins+sonarqube部署教程
输入bat脚本
持续集成Jenkins+sonarqube部署教程
修改sonar配置,做如下配置,打开sonar配置页面,配置“disable the SCM Sensor”为“是”
持续集成Jenkins+sonarqube部署教程
否则会报如下错误
持续集成Jenkins+sonarqube部署教程

7 Maven安装与maven私服的搭建

7.1 Maven安装

在maven官网下载maven

下载apache-maven-3.1.1-bin.zip并解压
持续集成Jenkins+sonarqube部署教程
配置环境变量
持续集成Jenkins+sonarqube部署教程

打开cmd窗口数据 mvn –v 查看maven版本,打印如下表示安装成功。
持续集成Jenkins+sonarqube部署教程

7.2 Maven私服nexus安装

下载nexus 

nexus-latest-bundle.tar.gz
将安装包复制到需要安装的机器,我安装在/opt/soft/nexus
tar –zxvf nexus-latest-bundle.tar.gz
解压后会出现两个目录
持续集成Jenkins+sonarqube部署教程
cd nexus-2.7.7-01/bin
./nexus 
输出如下:
持续集成Jenkins+sonarqube部署教程
列出了nexus的各种命令
./nexus start 启动服务
然后在本机访问http://localhost:8081/nexus,默认用户名密码:admin,admin123
持续集成Jenkins+sonarqube部署教程
如果是远程机访问还需要开通8081端口,操作如下:
/sbin/iptables -I INPUT -p tcp --dport 8081 -j ACCEPT #开启8081端口 
/etc/rc.d/init.d/iptables save #保存配置 
/etc/rc.d/init.d/iptables restart #重启服务 
查看端口是否已经开放 
/etc/init.d/iptables status

7.3 Nexus配置

hosted 类型的仓库,内部项目的发布仓库
releases 内部的模块中release模块的发布仓库
snapshots 发布内部的SNAPSHOT模块的仓库
3rd party 第三方依赖的仓库,这个数据通常是由内部人员自行下载之后发布上去
proxy 类型的仓库,从远程中央仓库中寻找数据的仓库
group 类型的仓库,组仓库用来方便我们开发人员进行设置的仓库
点击“Repositories”》“central”》“configuration”
持续集成Jenkins+sonarqube部署教程
设置“Download Remote Indexes”为true 
设置“Remote Storage Location”为:http://repo1.maven.org/maven2/
持续集成Jenkins+sonarqube部署教程
配置完成保存之后,在“central”中右键“repair index”,下载索引
持续集成Jenkins+sonarqube部署教程
在“browse Index”查看下载的索引
持续集成Jenkins+sonarqube部署教程
注意:如果没有下载到索引可能是因为nexus安装的目录下sonatype-work目录没有修改权限,给文件夹赋权即可;
Chmod 777 –R sonatype-work

修改maven安装目录conf下的settings.xml文件添加如下代码
1.在profiles节点下添加



nexus
nexus


true


true




在settings节点下添加

central

  </activeProfiles>

在services节点下添加

releases 
admin 
admin123 


snapshots 
admin 
admin123 

在项目的pom文件中添加

 <distributionManagement>     
     <repository>         
         <id>releases</id>         
         <name>Nexus Release Repository</name>         
         <url>http://10.10.152.174:8081/nexus/content/repositories/releases/</url>     
     </repository>     
     <snapshotRepository>         
         <id>snapshots</id>         
         <name>Nexus Snapshot Repository</name>         
         <url>http://10.10.152.174:8081/nexus/content/repositories/snapshots/</url>     
     </snapshotRepository> 
 </distributionManagement>

然后执行clean deploy
持续集成Jenkins+sonarqube部署教程
或者在eclipse中输入命令执行
持续集成Jenkins+sonarqube部署教程
查看私服部署的jar包
持续集成Jenkins+sonarqube部署教程

7.4 Nexus上传jar包

右键“3rd party”
持续集成Jenkins+sonarqube部署教程

在索引中查看上传的jar包
持续集成Jenkins+sonarqube部署教程
如果要引用该jar包只需要将描述中的xml添加到项目引用的opm文件中
持续集成Jenkins+sonarqube部署教程

7.5 Maven相关命令

help:system可以打印所有可用的环境变量和Java系统属性。
help:effective-pom用于查看当前生效的POM内容,指合并了所有父POM(包括Super POM)后的XML,所以可用于检测POM中某个配置是否生效
help:effective-settings可用于查看当前生效的settings.xml文件内容,所以可用于判断某个settings配置是否生效
mvn help:describe 你是否因为记不清某个插件有哪些goal而痛苦过,你是否因为想不起某个goal有哪些参数而苦恼,那就试试这个命令吧,它会告诉你一切的. 参数: 1. -Dplugin=pluginName 2. -Dgoal(或-Dmojo)=goalName:与-Dplugin一起使用,它会列出某个插件的goal信息,如果嫌不够详细,同样可以加-Ddetail.(注:一个插件goal也被认为是一个 “Mojo”) 下面大家就运行mvn help:describe -Dplugin=help -Dmojo=describe感受一下吧!
mvn archetype:generate 你是怎么创建你的maven项目的?是不是像这样:mvn archetype:create -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=com.ryanote -Dartifact=common,如果你还再用的话,那你就out了,现代人都用mvn archetype:generate了,它将创建项目这件枯燥的事更加人性化,你再也不需要记那么多的archetypeArtifactId,你只需输入archetype:generate,剩下的就是做”选择题”了.
mvn tomcat:run 用了maven后,你再也不需要用eclipse里的tomcat来运行web项目(实际工作中经常会发现用它会出现不同步更新的情况),只需在对应目录(如/ryanote)里运行 mvn tomat:run命令,然后就可在浏览器里运行http://localhost:8080/ryanote查看了.如果你想要更多的定制,可以在pom.xml文件里加下面配置: 01 02 03 04 org.codehaus.mojo 05 tomcat-maven-plugin 06 07 /web 08 9090 09 10 11 12 当然你也可以在命令里加参数来实现特定的功能,下面几个比较常用: 1. 跳过测试:-Dmaven.test.skip(=true) 2. 指定端口:-Dmaven.tomcat.port=9090 3. 忽略测试失败:-Dmaven.test.failure.ignore=true 当然,如果你的其它关联项目有过更新的话,一定要在项目根目录下运行mvn clean install来执行更新,再运行mvn tomcat:run使改动生效.
mvnDebug tomcat:run 这条命令主要用来远程测试,它会监听远程测试用的8000端口,在eclipse里打开远程测试后,它就会跑起来了,设断点,调试,一切都是这么简单.上面提到的那几个参数在这里同样适用.
mvn dependency:sources 故名思义,有了它,你就不用到处找源码了,运行一下,你项目里所依赖的jar包的源码就都有了

8 Jenkins,maven,sonar集成

8.1 集成




(转自互联网,感谢作者分享)



长按二维码-识别图中二维码




加入免费公益分享的大家庭吧!


让我们一起学习,快速成长。



长按二维码-识别图中二维码



小编:Luna

以上是关于持续集成Jenkins+sonarqube部署教程的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins+Ant+Gitlab+Sonarqube+Docker实现持续集成,质量管理

Jenkins+GitLab+Sonarqube+Shell持续集成CI/CD

持续代码质量管理-SonarQube-7.3部署

持续集成高级篇之Jenkins Pipeline 集成sonarqube

利用Jenkins和SonarQube集成对代码进行持续检测

(十三)devops持续集成开发——jenkins流水线发布一个sonar qube质量检查项目