整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目

主要操作流程是:程序员push代码到Gitee仓库,然后Jenkins从Gitee上自动pull仓库代码到服务器,最后进行编译打包部署到tomcat。

一、环境准备

服务器版本:Centos7.3

软件 版本
Java 1.8.0_201
Jenkins 2.164.1-1.1
Tomcat 8.x及以上
Maven 3.6.0
git 1.8.3.1

二、 软件安装

  • Jenkins安装

官网:https://jenkins.io/
我们选择左边的长期支持的稳定版
整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第1张图片
以下的版本任选其一,我服务器上面选择的是 jenkins-2.164.1-1.1.noarch.rpm

wget https://pkg.jenkins.io/redhat-stable/jenkins-2.164.1-1.1.noarch.rpm

当前工作目录下,直接输入wget命令下载
整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第2张图片
下载好后,导入rpm到系统中

rpm -ivh jenkins-2.164.1-1.1.noarch.rpm

然后使用yum命令安装

yum install -y jenkins

Jenkins安装完成查看路径:

rpm -ql jenkins

下面这是jenkins自身war包的位置
整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第3张图片
jenkins相关目录释义:
(1) /usr/lib/jenkins/:jenkins安装目录,war包会放在这里。
(2) /etc/sysconfig/jenkins:jenkins配置文件,“端口”,“JENKINS_HOME”等都可以在这里配置。
(3) /var/lib/jenkins/:默认的JENKINS_HOME。
(4) /var/log/jenkins/jenkins.log:jenkins日志文件

到目前位置,jenkins就有了两种启动方式
第一种:service启动

Jenkins的启动和关闭等命令:

service jenkins start | stop | restart

第二种:jar启动

这里带了端口参数启动

java -jar /usr/lib/jenkins/jenkins.war --httpPort=8888

由于上面这个命令只能前台启动,关闭窗口之后就不能使用了,所以在这里我追加一个后台启动,并重定向输出日志的方法。将日志输出到当前工作目录下,你可以指定输出到什么位置/usr/log/log_jenkins.out

nohup java -jar /usr/lib/jenkins/jenkins.war --httpPort=8888 > log_jenkins.out &

可以修改配置文件端口号

vim /etc/sysconfig/jenkins

整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第4张图片

  • Tomcat安装

官网:https://tomcat.apache.org/

wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.17/bin/apache-tomcat-9.0.17.tar.gz

复制压缩包到/usr/local下

cp apache-tomcat-9.0.17.tar.gz /usr/local

解压它

tar -zxvf apache-tomcat-9.0.17.tar.gz

修改名称

mv apache-tomcat-9.0.17.tar.gz tomcat9

7.x
修改conf/tomcat-users.xml
添加以下内容(username,password自行修改)

    
    
    
    

8.x及以上
除了上面的配置之外,还需要额外的在conf/Catalina/localhost目录下,新建manager.xml文件

vim manager.xml

添加以下代码(不要修改)


    

随后打开http://xxx.xxx.xxx.xxx:8080,点击右边的 Server Status输入之前新增的用户名和密码就可以进入

整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第5张图片

  • Maven安装

官网:http://maven.apache.org/download.cgi

wget下载

wget http://mirrors.shu.edu.cn/apache/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz

复制压缩包到/usr/local下

cp apache-maven-3.6.0-bin.tar.gz /usr/local

解压它

tar -zxvf apache-maven-3.6.0-bin.tar.gz

修改名称

mv apache-maven-3.6.0-bin.tar.gz maven3.6.0

整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第6张图片

添加环境变量

vim /etc/profile
export MAVEN_HOME=/usr/local/maven3.6.0

  • git安装

直接yum安装

yum install git

三、 SSH配置Gitee

1.生成ssh key(填写你Gitee注册的邮箱)

ssh-keygen -t rsa -C “[email protected]

2.按照提示完成三次回车,即可生成 ssh key

3.获取公钥

cat ~/.ssh/id_rsa.pub

4.打开Gitee上的仓储,打开 管理 - 添加公钥 ,将刚刚控制台打印的公钥复制进去

整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第7张图片

四、 配置Jenkins环境

启动两种方式交给你们了,任选一种,记住你的端口号很重要!端口号很重要!端口号很重要!

第一次启动,页面要求你输入密码,页面红色方框有内置的密码,使用cat + 方框内容,查看密码,复制粘贴就可以了

选择插件的时候选择左边

最后注册账户和密码

过程如下:
=>获取密码=>输入密码=>继续
=>安装插件=>retry几次可安装成功
=>注册账号 (记录好账号密码)
=>开始使用Jenkins

  1. 全局配置
    系统管理 -> 全局工具配置
    配置之前安装的软件路径
    yum安装,路径不要改
    整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第8张图片
    jdk没有显示,点击 JDK安装 就有了
    整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第9张图片
    然后是maven
    整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第10张图片
  2. 插件安装

我们需要安装Generic Webhook Trigger、Deploy to container Plugin、Git plugin、Gitee及Maven Integration plugin这几个插件
系统管理 -> 插件管理
没有安装的选择 可选插件 搜索安装,安装完成后需要重启Jenkins(安装插件之后有按钮可选,不需要去服务器上输入命令重启)
整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第11张图片

  1. 码云链接配置
    前往 系统管理 -> 系统设置 -> Gitee配置
    在 Connection name 中输入 Gitee 或者你想要的名字
    Gitee host URL 中输入码云完整 URL地址: https://gitee.com (码云私有化客户输入部署的域名)
    整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第12张图片
    Credentials 中如还未配置码云 APIV5 私人令牌,点击 添加 - > Jenkins
    Gitee APIV5 Token 输入你的码云私人令牌(第一次进入会显示,下一次进去就不会显示了,请保存好)
    获取地址:https://gitee.com/profile/personal_access_tokens
    ID, Descripiton 中输入你想要的 ID 和描述即可。
    Credentials 选择配置好的 Gitee APIV5 Token
    点击 Test Connection 测试链接是否成功。
    整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第13张图片
  2. 创建项目

回到首页,新建任务
随便命名,建议选择maven项目,不过,你也可以选择自由风格软件项目

整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第14张图片

选择刚刚创建好的gitee配置连接
整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第15张图片

源码管理
Repository URL:项目clone的地址,建议ssh
Credentials:需要配置,见下图
Branch Specifier (blank for ‘any’) :*/master(表示从主支拉取)
整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第16张图片
类型选择ssh username with private key,username输入git,Private Key填写Jenkins主机的root用户私钥(/root/.ssh/id_rsa),root是gitee上配置的ssh key的用户。
整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第17张图片
构建触发器
在构建触发器下勾选Generic Webhook Trigger,给抓出来的数据起个变量名ref,抓取内容为$.ref(看码云的文档)

在Post content parameters后点击增加,variable填写ref,Expression填写$.ref,然后点选下边的JSONPath
整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第18张图片
整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第19张图片

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

^(refs/heads/master)$

整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第20张图片
build

添加如下命令

clean package -Dmaven.test.skip=true

整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第21张图片

Post Steps
选择第三个
在这里插入图片描述

构建后操作
点击增加构建后操作,选择deploy war/ear to a container
整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第22张图片
WAR/EAR files填写**/*.war自动添加jenkins当前项目配置下的war包),Context path 填写打war的名称(填写什么名字,最后自动化部署打包就是什么名字),container选择 tomcat 8.x根据自己版本选择,我的是9.0,选择8.x依旧有效),点击Credentials后add,username和password根据tomcat中配置的填写即可,我这里都是tomcat。
整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第23张图片
Tomcat URL填写tomcat的IP地址即可http://xxx.xxx.xxx.xxx:8080
整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第24张图片

五、配置WebHooks

添加一个webhooks,URL格式为 http://Jenkins中的用户@Jenkis地址/generic-webhook-trigger/invoke (这里的地址可以看上图中,我标注的“此处日后必有大用”)

 http://admin:[email protected]:8888/generic-webhook-trigger/invoke 

整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第25张图片
整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第26张图片
添加之后会自动的向你的jenkins发出一个post请求,正确数据如下

{"status":"ok","data":{"triggerResults":{"Storage":{"id":23,"regexpFilterExpression":"^(refs/heads/master)$","regexpFilterText":"refs/heads/master","resolvedVariables":{"ref":"refs/heads/master"},"triggered":true,"url":"queue/item/23/"}}}}

返回这个,表示用户或密码不正确

{"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?oken=TOKENHERE"}}}

六、测试

整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第27张图片
整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第28张图片
选择提交一个test.txt
整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第29张图片
马上就取gitee上面pull代码进行编译了。#24表示第24次编译构建,这是我今天试验成功的,所以次数有点多,不要介意哈
整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第30张图片

7、遇见的问题

  1. 构建触发器的类型

为什么我们使用Gitee的仓库,却不使用Gitee webhook这个插件自带的工具呢?这个问题我也思考了很久,按照上面的提示,使用显示的URL建立webhook,每次返回状态是200,但是总是404的页面信息。我去看了插件的开发者的git(https://gitee.com/oschina/Gitee-Jenkins-Plugin),操作说明并没有使用这个选项,所以我就换咯。
整合Jenkins+Gitee+Tomcat自动化热部署SpringBoot项目_第31张图片

这是鄙人第一次写博客,之前所有的总结都是以网页的形式保存,既然看到了最后不如给点意见吧!!谢谢各位~

借鉴:
https://blog.51cto.com/13339566/2177550
https://gitee.com/help/articles/4193#article-header8

你可能感兴趣的:(Java,centos)