jenkins自动部署应用到Tomcat,编译后shell脚本的简单示例

1.先配置好jenkins需要用到的其他外部组件 jdk,maven,git/svn

   安装git: yum install git

  git地址使用命令查询 whereis git
  这里写图片描述
  maven jdk 安装好后配置好环境变量 自行百度

  查询环境变量中的jdk和maven地址
  这里写图片描述
   进入配置阶段
   这里写图片描述
    1.1 进入系统设置- 全局工具配置中配置 jdk maven git 不要勾选自动安装

   jdk maven 使用的是环境变量中的地址
   这里写图片描述
   这里写图片描述
   2.开始新建一个jenkins任务
   这里写图片描述
   2.1 general

  这里是一些通用的设置, 丢弃旧的构建 多次构建又不手动清除 会生成很多文件 ,占用磁盘空间 这里的丢弃旧的构建的配置大家按需配置即可
  这里写图片描述
  2.2源码管理
  这里写图片描述
   版本控制这里使用的是git git的地址填进去 点击Add 添加 git的账号密码 然后在下拉框中选择刚刚新增的账号密码
   这里写图片描述
   这里写图片描述
   选择了正确的git账号密码 红色的报错信息就会消失 下面也会显示git代码的主干 如果需要的是其中的分支 修改成对应的分支名称就行
   这里写图片描述
   2.3构建触发器
   这里写图片描述
   这里一般默认的触发器就行 如果你需要定时构建 比如每隔一段时间重新部署 或者每隔一段时间检测有没有提交 有提交就部署
   这里写图片描述
    定时构建 “日程表”格式为 和cron表达式一样 如果你想实现什么 对应着去百度就行
    ## 每行由 5 个值组成(空格或TAB分隔),分别表示分(0-59)、时(0-23)、日(1-31)、月(1-12)、周(0-7, 0/7=周日)
“M,N” 表示M和N;”M-N” 表示范围[M,N];”M-N/X” 表示范围[M,N]内每隔X;”*/X” 表示整个范围内每隔X
前面提到的M/N/X的值都可以用H(意为Hash)代替,散列值起到随机值的效果,且同一项目取值稳定,这对于项目多时分散压力很有用。
H/10 H(0-8) * * 1-5 ## 触发时间: 工作日、Hour为0~8按哈希随机、Minute以10为间隔
H/10 H * * 0,6,7 ## 触发时间: 周末、Hour为全天按哈希随机、Minute以10为间隔
“日程表”修改后,下方会给出下次执行时间点的预告。

  2.4 构建环境和pre steps
  这里使用的是默认的,有需要的对应着去查询资料
  ![这里写图片描述](https://img-blog.csdn.net/20180911155538393?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3podWd1YW5naGFsbw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
  2.5 Build 
  ![这里写图片描述](https://img-blog.csdn.net/20180911155607547?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3podWd1YW5naGFsbw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
  因为 本文中项目结构  图中红框框出来的都是一个个子项目
  ![这里写图片描述](https://img-blog.csdn.net/20180911155647110?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3podWd1YW5naGFsbw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
  这里我只想build 其中的mobile模块  就需要配置 -pl  mobile -am  

  加上其他的mvn打包的命令 clean package -pl mobile -am -Dmaven.test.skip=true

 2.6 构建设置  构建后操作  

  这里可以设置构建后邮件通知
  这里写图片描述
  2.7 Post Steps

  构建完成后操作 这里使用的执行shell命令
 
 这里写图片描述 
 这里放一个shell示例, 容器是tomcat

  思路: 先查对应的tomcat时候启动, 启动了就kill掉, 然后删除webapps中的包, 把jenkins编译的包复制到对应的容器, 重命名包 , 启动容器
  

!/bin

kill tomcat pid
有错的shell

pidlist=ps -ef|grep tomcat_mobile|grep -v "grep"|awk '{print $2}'
function stop(){
if [ “$pidlist” == “” ]
then
echo “—-tomcat_mobile 已经关闭—-“

else
echo “tomcat_mobile 进程号 : p i d l i s t k i l l 9 pidlist
echo “KILL $pidlist:”
fi
}

stop
pidlist2=ps -ef|grep tomcat_mobile|grep -v "grep"|awk '{print $2}'
if [ “$pidlist2” == “” ]
then
echo “—-关闭tomcat_mobile成功—-”
else
echo “—-关闭tomcat_mobile失败—-”
fi

rm -rf /usr/local/tomcat_mobile/webapps/ROOT*
cp -r /var/lib/jenkins/workspace/baiyangjinrong-mobile/mobile/target/mobile.war /usr/local/tomcat_mobile/webapps
sleep 3s
mv /usr/local/tomcat_mobile/webapps/mobile.war /usr/local/tomcat_mobile/webapps/ROOT.war
cd /usr/local/tomcat_mobile/bin
./startup.sh
问题1:上述shell脚本执行后 肯定会出现tomcat没有启动的情况
  1.这里如果tomcat和jenkins 在同一台linux上可以 加上 export BUILD_ID=tomcat_mobile_build_id
    原因是: jenkins在执行sh脚本的时候,如果脚本中有启动后台进程的情况,例如tomcat的关闭和启动,jenkins在job构建结束之后,会kill所有的脚本里面衍生出的子进程。修改环境变量BUILD_ID的值,这样,衍生出来的子进程就不会被kill了
  2.tomcat和jenkins不在一台linux上
  
    假如部署jenkins的机器是A,部署tomcat的机器是B。那可以在A机器上写一个脚本,把需要在B机器上执行的命令封装在A机器上的这个脚本里面,这样也能保证衍生进程正确执行结束。
    这里写图片描述
    就是相当于把上面的shell写到一个sh文件中 jenkins执行这个sh文件
    这里写图片描述
   因为我便是jenkins和Tomcat在同一台linux上 所以这里就没有把shell脚本写在sh文件中
   

!/bin/sh

kill tomcat pid
这句尤为重要
export BUILD_ID=tomcat_mobile_build_id

1.关闭tomcat
pidlist=ps -ef|grep tomcat_mobile|grep -v "grep"|awk '{print $2}'
function stop(){
if [ “$pidlist” == “” ]
then
echo “—-tomcat 已经关闭—-“

else
echo “tomcat进程号 : p i d l i s t k i l l 9 pidlist
echo “KILL $pidlist:”
fi
}

stop
pidlist2=ps -ef|grep tomcat_mobile|grep -v "grep"|awk '{print $2}'
if [ “$pidlist2” == “” ]
then
echo “—-关闭tomcat成功—-”
else
echo “—-关闭tomcat失败—-”
fi

2.移除原来tomcat中webapps中的项目文件夹
rm -rf /usr/local/tomcat_mobile/webapps/ROOT*
3.复制jenkins生成的war包到tomcat中webapps中
cp -r /var/lib/jenkins/workspace/baiyangjinrong-mobile/mobile/target/mobile.war /usr/local/tomcat_mobile/webapps
sleep 3s
4.修改war包的名称
mv /usr/local/tomcat_mobile/webapps/mobile.war /usr/local/tomcat_mobile/webapps/ROOT.war
5.启动tomcat
cd /usr/local/tomcat_mobile/bin
./startup.sh

2.8 可能出现的问题:

  1. 这里如果出现如下的问题 就是因为linux上没有安装git
  这里写图片描述
  安装 yum install git 后去全局工具配置你配置好git的路径

  2. jenkins部署失败 首先去看对应任务的日志

这里写图片描述
这里写图片描述
这里写图片描述
从日志中可以看出来这里jenkins 编译是成功的 但是在复制war的时候报错, 图中是因为不小心把空格敲成换行了
这里写图片描述
欢迎工作一到五年的Java工程师朋友们加入Java架构开发:855801563
本群提供免费的学习指导 架构资料 以及免费的解答

不懂得问题都可以在本群提出来 之后还会有职业生涯规划以及面试指导
同时大家可以多多关注一下小编 纯干货 大家一起学习进步
    

猜你喜欢

转载自blog.csdn.net/zhuguanghalo/article/details/82627662