jenkins+maven+tomcat项目自动部署

操作环境

OS centos7.3
JDK jdk1.8
maven maven3


当然这篇文章的前提是你已经在服务器上安装部署了jenkins,如果没有可以看我的另一篇文章
https://www.jianshu.com/p/ebeebcb8aafb
首先列出所用到的所有命令,并予以解释

#jenkins 启动
systemctl start jenkins
#jenkins 停止
systemctl stop jenkins
#jenkins 重启
systemctl restart jenkins
#更改相关jenkins服务文件后 需要执行重新加载服务的命令
systemctl daemon-reload
#创建系统用户命令
useradd username
#更改文件夹组权限
chown -R username:username  xxx

进入正文

步骤: 安装必要的插件 => 设置jenkins全局变量 => 更改运行用户 => 创建任务 => 配置任务 => 编写shell脚本 =>Run

1、 安装必要插件

直接运行jenkins后,打开http:/你的IP:设置的端口/pluginManager/ 即 系统管理 => 管理插件


插件管理界面

在搜索框分别输入,有如下作用的插件进行安装

#maven编译插件
Maven Integration 
#构建后脚本执行插件
PostBuildScript Plugin 
#subversion插件
Subversion Plug-in

2、 设置jenkins全局变量

jenkins在创建任务时需要一些全局变量 对应svn地址的svn账号密码 JDK路径 maven路径
此项可以留到配置任务环节再进行

3、更改jenkins在操作系统运行的用户

这一步是为了为后面编写shell脚本,提供足够的权限;提高系统安全性。

#使用useradd命令创建一个系统用户
useradd userjs
#停止jenkins服务
systemctl stop jenkins
# 打开配置文件
$ vi /etc/sysconfig/jenkins 
# 修改$JENKINS_USER变量为userjs
JENKINS_USER="userjs" 

#修改Jenkins相关文件夹用户权限(必须修改)
$ chown -R userjs:userjs /var/lib/jenkins
$ chown -R userjs:userjs /var/log/jenkins
$ chown -R userjs:userjs /var/cache/jenkins
#更改相关jenkins服务文件后 需要执行重新加载服务的命令(这一步非必须得视情况而定)
systemctl daemon-reload
#jenkins 启动
systemctl start jenkins

4、 创建任务

在浏览器打开你的jenkins界面,点击左侧的 新建任务 进入新建任务页


新建任务页

输入任务名称(最好英文)
点击 构建一个maven项目
点击确定按钮
创建任务完成

5、配置任务

在配置任务界面可以看到一排tab切页


任务配置界面

这里红色箭头的都是重点关注的,其他先可以不用关注
下面就开始一步步配置

①General
设置构建丢弃
②源码管理
源码管理

这个地方需要注意了,如果你是第一次配置的话,需要在c步骤点击按钮去另外的界面添加,你要拉取的项目的svn账号密码信息


全局变量

然后,在b步骤里面选择你刚刚添加的那个条目

③Build

构建这个环节是比较重要的,这里我们分两种类型的示例
a:单模块项目 b多模块聚合项目

b:整个项目就一个pom.xml文件
b:整个项目有多个pom.xml文件 通常的文件构造如下
多模块聚合项目

分情况配置

a
单模块项目编译配置
b
多模块聚合项目

这里只需要配置 聚合项目的父级pom即可,因为父级项目里面指定了其他模块,所以maven会按照pom指定的顺序去编译

④构建后操作
选择构建后操作步骤

选择脚本方式

添加generic shell脚本文件路径以及触发事件

现在我们还没写脚本,所以,可以先写一个路径例如/opt/script/test.sh

6、编写shell脚本*****重点

现在相当于准备好了前4步,滴5步只有一半
准备好了前4步,就相当于 我们在利用jenkins 在服务器/var/lib/jenkins/workspace/你的项目名
拉取了一个svn项目 ,并且,利用maven编译 先后执行了 mvn clean 和mvn install 生成了xxx.war文件

需求点

在这一步我们要做的事情是,将这个新生成的war文件放到服务器上指定的tomcat下面,然后启动tomcat服务器,完成自动部署

首先我们来用文字分解一下这个步骤,再进行脚本的编写

①停止正在运行中的tomcat

停止tomcat相信大家都会,但是由于各种原因tomcat原生的shutdown.sh可能经常不能关闭掉tomcat自己本身,所以需要我们去加点料,详细见我的另一篇文章https://www.jianshu.com/p/39a2da8db269

②将jenkins工具帮我们生成的war放到指定的tomcat下

这一步又可以分解一下,因为tomcat下是会有旧war的存在,这就需要我们去备份这个,然后再删除,最后换新:

a.将原有war移动到指定的目录下备份,一般存一份即可
b.删除旧war
c.将新生成的war移动到tomcat webapps下
③启动tomcat

执行tomcat的startup.sh
好的,正常情况下就是这些步骤了,但是按照这个写的脚本可不一定能够正常实现我们的诉求

重要 可能会出现的情况

以我们现在配置的userjs用户的权限,可能不能去执行我们写的脚本,理由很简单 这个用户没有权限,当然给他放大一些权限也是可以的,但是我们生产环境肯定不能这么做的,我们需要一个解决方案,让我们这个用户暂时对某些文件拥有超级权限
说的有点多了,接下来开始放上我的脚本

#!/bin/sh
sh /usr/local/tomcat8/bin/shutdown.sh
echo "执行完tomcat8关闭!!!"
cp /var/lib/jenkins/workspace/xxx/target/xxx.war /usr/local/tomcat8/webapps/
if [ -f "/usr/local/tomcat8/webapps/xxx.war" ];then
   echo "xxx.war到/var/tomcat8_bak/"
   \cp /usr/local/tomcat8/webapps/xxx.war /opt/tomcat8_bak/
      if [ -d "/usr/local/tomcat8/webapps/xxx/" ];then
         rm -rf /usr/local/tomcat8/webapps/xxx/
         rm -rf xxx.war
         echo "已删除tomcat下xxx相关"
      else
         echo "tomcat下没有xxx相关"
      fi
else
   echo "xxx.war文件不存在不能正常备份"
   if [ -d "/usr/local/tomcat8/webapps/xxx/" ];then
      rm -rf /usr/local/tomcat8/webapps/xxx/
      echo "已删除tomcat下xxx相关"
   else
      echo "tomcat下没有xxx相关"
   fi
fi
sh /usr/local/tomcat8/bin/startup.sh && tail -f /usr/local/tomcat8/logs/catalina.out

这个文件就可以实现将新生成的war放到指定tomcat下,备份旧war
接下来还有最后一件很重要的事情
为jenkins的宿主用户userjs指定可以运行我们这个脚本的超级权限

#给予我们这个userjs 运行我们脚本的所有权限
#进入sudo编辑文件
visudo
#添加如下内容 写上你脚本的路径,两个脚本的话用逗号隔开注意中英文切换,一个脚本的话只取第一个逗号之前的内容
##jenkins
userjs  ALL=NOPASSWD: /opt/tomcat1.sh,NOPASSWD: tomcat2.sh,

OK,还有最后一步 将我们写好的sh配置到第5步的构建后脚本路径那里,内容为

sudo /opt/tomcat1.sh

7、Run

点击立即构建 左下角就会出现进度条 点击进度条旁边的查看控制台信息,就能看到脚本输出的信息


test任务

最后 在具体操作中还有什么问题的话,或者文中的错误之处可以在下面评论区指出,参考的文章太多了,所以来源就不写了,这个里面80%的内容属于原创,转载请注明出处。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容