主要实现使用Jenkins从gitee上自动编译打包部署java项目到tomcat,使用webhook来实现gitee项目上的代码变动自动触发打包编译部署

一、环境准备

主机名

ip

安装服务

jenkins

192.168.10.100

Jenkins、jdk、maven

tomcat

192.168.10.200

tomcat7、jdk

安装所需工具:

安装Jenkins

安装jdk、maven

安装tomcat

二、配置环境

1、安装配置tomcat manager

修改conf/tomcat-users.xml

添加一下内容:

<role rolename="admin-gui"/>

<role rolename="manager-gui"/>

<role rolename="manager-script"/>

<user username="tomcat" password="tomcat" roles="admin-gui,manager-gui,manager-script"/>

说明:添加了admin-gui、manager-gui、manager-script 3个角色,配置一个tomcat用户,密码为tomcat,拥有这3个角色的权限(用来登陆到manager页面)

启动tomcat程序

bin/startup.sh

测试配置用户是否能够登陆

浏览器打开192.168.10.200:8080/manager,输入配置的用户名和密码登录,登陆成功显示如下页面

gitee+Jenkins+tomcat实现自动打包部署_gitee

2、配置Jenkins的jdk和maven环境

Jenkins安装完成后,由于部署的项目是java-web程序,所以需要jdk和maven环境

jdk和maven安装目录分别是/usr/local/jdk1.8.0_144和/usr/local/maven

首先进入Jenkins系统管理--》Global Tool Configuration

选择“jdk安装” --》别名自定义(建议标识jdk版本)--》JAVA_HOME(/usr/local/jdk1.8.0_144)  不要选自动安装

然后选择“maven安装”--》name(自定义)--》MAVEN_HOME(/usr/local/maven)同样不要选自动安装

gitee+Jenkins+tomcat实现自动打包部署_gitee_04

gitee+Jenkins+tomcat实现自动打包部署_gitee_05

配置完成后保存退出

3、安装插件

需要安装Generic Webhook Trigger、Deploy to container Plugin、Git plugin及Maven Integration plugin这四个插件

进入主页面选系统管理--》插件管理,进入插件管理页面,在可选插件选项卡下查找这四个插件,安装完成后需要重启Jenkins

gitee+Jenkins+tomcat实现自动打包部署_gitee_07

4、配置gitee

gitee上已经创建好一个私有项目,并且跟Jenkins所在主机配置了ssh-key,可以用“git clone” gitee上的项目,测试项目为zrlog,一个Java写的开源博客


5、创建Jenkins部署项目

点击新建,创建一个maven项目(如果不是maven项目可以选自由风格项目)

gitee+Jenkins+tomcat实现自动打包部署_tomcat_09

点击ok,进入项目配置页面,描述可以简单介绍下这个项目

源码管理选择git,填写项目地址(git@gitee.com:wangyank/zrlog.git),由于gitee上的zrlog项目是私有的,还需要配置密钥,点击Credentials后的add

类型选择ssh username with private key,username输入git,Private Key填写Jenkins主机的root用户私钥(/root/.ssh/id_rsa),root是gitee上配置的ssh key的用户。

gitee+Jenkins+tomcat实现自动打包部署_gitee_11

添加完成后,Credentials选择刚才添加的git即可

gitee+Jenkins+tomcat实现自动打包部署_tomcat_13

如果Credentials配置错误,就会报错

gitee+Jenkins+tomcat实现自动打包部署_tomcat_15

在构建触发器下勾选Generic Webhook Trigger,给抓出来的数据起个变量名ref,抓取内容为$.ref(看码云的文档)

在Post content parameters后点击增加,variable填写ref,Expression填写$.ref,然后点选下边的JSONPath

gitee+Jenkins+tomcat实现自动打包部署_tomcat_17

好,稍微下来一点,我们只需要获取POST数据,header和request不用理。接下来也很关键,定义过滤出来什么字串才触发这个任务。所以使用正则匹配,text为匹配出什么结果就触发这个任务,于是我们填入刚才抓取临时存放的变量$ref,注意这里不是原始数据的$.ref。

^(refs/heads/master)$

gitee+Jenkins+tomcat实现自动打包部署_gitee_19

在build中,配置maven执行命令”clean install -D maven.test.skip=true“

gitee+Jenkins+tomcat实现自动打包部署_Jenkins_21

在构建后操作下,点击增加构建后操作,选择deploy war/ear to a container

WAR/EAR files填写“**/*.war”,container选择 tomcat 7.x(根据自己版本选择),点击Credentials后add,username和password根据tomcat中配置的填写即可,我这里都是tomcat

gitee+Jenkins+tomcat实现自动打包部署_gitee_23

保存退出后,选择刚才添加的用户,Tomcat URL填写tomcat的IP地址即可,我这里是192.168.10.200:8080

gitee+Jenkins+tomcat实现自动打包部署_gitee_25

这样Jenkins基本配置完成,保存退出

6、配置gitee的webhook

登陆gitee,进入zrlog项目,点击项目名下最右边的管理选项卡,然后点击添加

gitee+Jenkins+tomcat实现自动打包部署_tomcat_27

进入添加webhook页面,url需要填写Jenkins的url(域名或者公网ip)

URL格式为 http://有读权限的用户名:该用户名密码@jenkis地址/generic-webhook-trigger/invoke 

如: http://admin:tusmind123@http://10.160.59.236:8990/generic-webhook-trigger/invoke 

该处用户名和密码为Jenkins中的用户,不要搞混了,地址端口后边为固定写法,不能随便写,在构建触发器是有提示

gitee+Jenkins+tomcat实现自动打包部署_Jenkins_29

另外,如果Jenkins是在内网部署的,需要把Jenkins端口映射到公网,Jenkins本身是在公网部署只要打开端口,需要gitee能够跟Jenkins通信即可

gitee+Jenkins+tomcat实现自动打包部署_Jenkins_31

   点击测试,返回ok就说明接口能用了,如果返回如下,则用户名密码可能没填或者没对。

1

2

3

4

{"status":"ok","data":{"triggerResults":{"ANY":"Did not find any jobs to trigger! 

The user invoking /generic-webhook-trigger/invoke must have read permission to any 

jobs that should be triggered. You may try adding http://user:passw@url... or configuring

 and passing an authentication token like ...trigger/invoke?token=TOKENHERE"}}}

三、测试

配置完成后,需要做下测试,是否配置成功

在gitee的zrlog项目下新建一个文件,查看Jenkins中的zrlog是否在执行构建部署

gitee+Jenkins+tomcat实现自动打包部署_Jenkins_33

查看日志

gitee+Jenkins+tomcat实现自动打包部署_Jenkins_35

gitee+Jenkins+tomcat实现自动打包部署_gitee_37

最后显示部署成功,打开浏览器输入192.168.10.200:8080/zrlog-2.0.4,能够打开说明配置成功了

四、遇到的问题

安装配置完成后,测试时build没有问题,部署到tomcat时报错

gitee+Jenkins+tomcat实现自动打包部署_tomcat_39

没有部署成功。

后来查资料发现是tomcat的bug,Tomcat的版本是8.5.13,这个bug官方已经收到反馈,并且在8.5.14已经修复,测试的tomcat恰好是8.5.13版本,从官网重新下载最新版本,再次测试就没有问题了。