假设我们已经可以利用jenkins构建maven项目,远程的tomcat也可以正常启动,那么怎么样利用jenkins部署war包到远程的tomcat中呢?

(1) 部署之前确保远程机器中的tomcat是启动的。
jenkins在部署war包的时候,必须确保远程机器中的tomcat是启动的,否则会出现构建错误。那么怎么样确保远程机器中tomcat是启动的呢,我们可以写一个脚本用来判断,如果tomcat进程存在就表明tomcat已经存在,随后我们将进程杀死,重启tomcat。如果进程不存在,我们就直接重启tomcat。比如我们新建一个脚本vi tomcat.sh,并赋予权限chmod 777 tomcat.sh
脚本如下:
这里写图片描述
附上代码:

#这里需要加上JAVA_HOME的配置,虽然在本地的环境变量中已经配置了,但是远程调用的时候,还是需要配上的,否则执行脚本出错。
export JAVA_HOME=$HOME/java/jdk1.8.0_171
tomcat_home=/home/fangjl/tomcat/apache-tomcat-7.0.88
#【3.1】 停止tomcat变量
SHUTDOWN=$tomcat_home/bin/shutdown.sh
#【3.2】 启动tomcat变量
STARTTOMCAT=$tomcat_home/bin/startup.sh
#【3.3】 删除项目文件 如果是局部发布这句不需要 这只是正对jenkins整个war发布
rm -rf /home/fangjl/tomcat/apache-tomcat-7.0.88/webapps/report*

#得到进程ID 这里也可以简写 如果你ps -ef|grep 项目名称 可以带出PID 那么可以直接写成这样
#之前为什么写那么长 是因为在用jenkins调用脚本的时候,也会带出jenkins调用脚本的那个进程 这样kill -9 就会killjenkins进程 导致一建发布中断
#所以这里一直写到了conf文件夹目录
#如果不需要用到jenkins可以用下面简洁版 得出PID命令
#PID=`ps -ef |grep 项目名称  |grep -v grep | awk '{print $2}'`
#【3.4】 获取进程ID
PID=`ps -ef |grep /home/fangjl/tomcat/apache-tomcat-7.0.88/conf |grep -v grep | awk '{print $2}'`
if [ ! "$PID" ];then # 这里判断TOMCAT进程是否存在
    echo "进程不存在"
else
    echo "进程存在 杀死进程PID$PID"
    kill -9 $PID
fi

#【3.5】启动项目
$STARTTOMCAT   

(2) jenkins怎么远程执行这个脚本呢?
jenkins想要执行远程机器上的shell脚本,必须要在jenkins中安装ssh插件。随后在系统管理->系统设置中进行配置,如图所示:
这里写图片描述
这里写图片描述
(3)部署war包到远程tomcat中
这里写图片描述
注意:这里的账号和密码必须和远程tomcat的conf目录下的tomcat-user.xml中保持一致
给大家看一下我的tomcat-user.xml中的配置:
这里写图片描述
附上代码:

<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="fangjiulin" password="AAAAAAA" roles="manager-gui,manager-script,tomcat,admin-gui,admin-script"/>

这里大家可以直接将我的代码拷贝到自己的文件中进行使用,只需要修改一下username和password即可。到这里我们就可以将jenkins构建的war包,上传到远程linux系统中的tomcat中。接下来就可以在浏览器中来访问我们部署的war包。
这里写图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐