jenkins+Gitlab+maven+tomcat实现自动集成、打包、部署
一、前言
首先出于提高自己技术水平和琢磨能做点什么能提高工作效率,上线工作实在无聊、重复(手动编译、打包,传包,重启),于是就想到了jenkins,jenkins持续集成已经不是什么新鲜的话题,网上文章一大堆,俗话说天下文章一大抄,基本上就是那三五篇,相信要是以前没接触过的人没有两三天是弄不出来的,特别是身为运维岗,一些关于开发的东西还是不太懂,在搭建之前什么持续集成、持续构建、持续部署这些概念真是搞不懂,也许是我比较愚笨,在我研究的这段时间里,真是一步一个坑,想想这人品,写这个的目的不为什么,希望后来者少踩坑,也为自己做个记录。
二、环境
1、粘一副从网上看见的我认为好理解的图
2、服务器环境
一台jenkins服务器:192.168.4.117
一台gitlab服务器:192.168.4.81
一台测试服务器:192.168.4.91
三、环境搭建
1、gitlab安装:由于之前已经写过gitlab安装的博客,在此就不重复写了,把地址粘出来:http://www.cnblogs.com/lidong94/p/7161717.html
2、jenkins安装
(1)安装可以用war包也可以用rpm包,但是个人认为还是war包好用方便,首先下载好jenkins的war包,地址:http://mirrors.jenkins.io/war-stable/2.32.3/
(2)安装jdk,建议使用1.8以上的版本,安装好jdk之后执行:vim /etc/profile 在这个文件最后加入如下代码:
export JAVA_HOME=/usr/local/jdk1.8.0_131 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$JAVA_HOME/bin:$PATH
(3)然后执行以下命令,这样是使用默认的8080端口,也可以修改使用别的端口,当然这个war包也可以放到tomcat里启动,这里就不介绍tomcat启动的方式了。
java -jar jenkins.war
(4)到这里jenkins就安装成功了,可以通过浏览器访问:http://192.168.4.117:8080
四、jenkins配置
(1)第一次访问时会出现这个页面
cat标红的那个路径,把内容粘到文本框内,点击continue,稍等一分钟之后会进入以下页面
点击第一幅图安装插件。PS:这两幅图的区别就是一个是自定义安装插件,一个自己选择要安装的插件,建议选择第一个,后边用到哪些在自己安装
等待十分钟左右插件安装完成,插件安装完成之后出现如下图
创建jenkins的第一个用户,然后点击 save and finish
点击开始使用jenkins
这就是jenkins的主界面,接下来开始jenkins之旅
五、jenkins界面配置
相信好多人到这一步之后就不明白该怎么做了,我曾经搭建过四五次到这里,但是每次新建项目的时候就懵懵懂懂的,稀里糊涂的建一个项目,然后就搁置了,还是那句话,做什么事情之前先想明白自己想要什么,好了,废话不多说,我们的初衷就是要实现只要开发提交代码到gitlab,jenkins就会自动检测到并且自动进行构建(合并、打包),构建完成之后将打好的包(war、jar包都可以)通过jenkins的插件传到tomcat的webapps目录下,然后重启tomcat,实现自动打包部署。
(1)首先我们需要配置jenkins的全局配置,包括(jdk、maven)
点击系统管理-----global tool configuration
进去之后如下图
maven配置默认即可,jdk配置别名随便写,java_home就是jdk的家目录,不知道的话可以使用java -version查询
git设置如上图所示,接下来配置maven,安装maven也可以在这里自动安装也可以自己下载安装,但是建议自己下载安装,下载地址:wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz下载完成解压即可不需要过多操作,然后使用mvn -v查看安装是否成功及安装信息,我的安装信息如图记住这个路径,这个路径需要在下图的maven home 配置
以上这些配置全都在global tool configuration里边,配置完点击保存
(2)接下来配置ssh连接信息,首先先安装ssh插件:publish over ssh
点击系统管理----管理插件
点击进来之后如下图,点击可选插件,然后在过滤文本框处输入publish over ssh ,把前面的复选框选中之后点击直接安装
安装完成后如下图,勾选安装完后重启jenkins,这个插件就会生效,由于我这个插件已经安装,这个图只是一个示例
安装完成后接下来配置ssh,也就是要上传的测试服务器ssh信息
首先我们先要在jenkins服务器上生成秘钥,然后利用秘钥要进行免密登录
在jenkins服务器上执行ssh-keygen -t rsa,一路回车就可以 一路回车的话密码为空,这样就在/root/.ssh/下生成的两个文件id.rsa(私钥)和id.rsa.pub(公钥),我们需要把公钥的内容写到测试服务器(tomcat服务器上)的/root/.ssh/authorized_keys文件中 如果没有就新建一个,接下来我们开始配置
点击系统管理---系统设置
详细解释:Passphrase是指在生成秘钥的时候设置的密码,由于我们都是一路回车下来的所以此处不用写
path to key是指私钥的位置/root/.ssh/id.rsa
key是指私钥的内容 path to key 和key任选其一即可
name是指你要远程到tomcat的名称 随便写就可以,后期为了区分,所以我写了测试服务器
hostname是指测试服务器的ip
username是指测试服务器的用户
remote directory是指要放到测试服务器的目录,这里写tomcat的部署目录
点第一张图左下角的高级可以修改端口,点击test configuration可以测试连接 ,如下图就是测试成功,说明我们现在已经可以使用jenkins连接服务器了
(4)现在jenkins已经可以和远程服务器通信了,但是还没和gitlab连通,接下来我们配置gitlab和jenkins的连通,首先先安装gitlab相关插件,关于插件安装上面已经写过
接下来我们新建一个job,因为只有先建了job才能和gitlab连通,如下图,这里填写一个名字如test,选择构建一个自由风格的软件项目,点击ok
点击完之后如下图,描述这块记得写上,最开始这块没写,在构建项目的时候会有报错,报不能配置name[ ],这里写上就好了,
然后点击源码管理如下图,我们选择git,repository url 写gitlab仓库的地址,credentials是指信任,我们需要在gitlab中添加jenkins的公钥 ,在下图的key中填写jenkins服务器的公钥,title处填写jenkins,然后在到jenkins上就可以看到credentials处可以选择jenkins了,然后点击构建触发器选项卡
点击触发器选项卡之后如下图,我们点击
点击构建选项卡之后如下图:maven version处选择我们在global tool configuration处配置的maven名称 goals处填写maven命令,因为我们要打包,所以填写clean package,不懂的可以去学一下maven命令,然后点击构建后操作选项卡
点击构建后选项卡之后如下图,选择send build artifacts over ssh ,name处选择我们配置的测试服务器,transfers这里特别需要注意,我在这边卡了大半天,因为网上写的文章含糊不清 source files 处填写想要传到远程服务器的东西 ,可以是目录、war包、jar包等都可以,这个路径是相当于workspace的路径 workspace目录可以在/root/.jenkins/workspace/找到所以说这里不用写/root/.jenkins/workspace/ 因为我们构建完的war包或者jar包在/root/.jenkins/workspace/job名/target/下所以这里可以写target/war包名.war或者**/*.war,
remove prefix是指当把war包传到服务器的时候去掉source files处填写的war包之前的路径,要是不去除的话会在tomcat的webapps建一个target target之下才是war包,这当然不是我们想要的
remove directory 是指远程到服务器的目录 这个在这就不配置了 因为我们在系统设置处已经配置 这边直接调用就可以
exec command是指传过去包之后执行的命令,这里也可以调用脚本,
然后点击保存就可以了这样我们就建完了一个job,有的人可能会想起来还没配置gitlab,good,还记得建job的时候要记住的那个url地址吗,接下来我们需要在gitlab中找到web hooks这个选项,不同的gitlab web hooks在不同的地方 ,我的是在下图点击integrations
点击integrations后如下图,需要把jenkins的url:http://192.168.4.117:8080/project/test填到此处,然后点击添加web hooks,这个web hooks的作用就是jenkins检测到gitlab有代码提交就会触发jenkins进行构建
到此,jenkins自动打包,上传就配置完成了,接下来我们验证一下,我提交代码到gitlab一下,控制台输出如下,
我们到测试服务器的webapps下验证如下,jar包已经传到tomcat下了
-----------------------------------------------------------------------------------------------------------------End-------------------------------------------------------------------------------------------------------