在jenkis自动集成完项目后,需要将打成的war包部署到web应用服务器上,这里使用tomcat。jenkins自动集成后部署tomcat有很多种方式。
这里使用了插件和shell脚本两种方式。两种方式各有利弊,根据自己项目的需要选择不同的方式即可。

deploy to container插件部署

1、需要在tomcat中添加用户,这个用户必须是管理员权限。
 <role rolename="tomcat" />
  <role rolename="admin"/>
  <role rolename="admin-gui"/>
  <role rolename="manager"/>
  <role rolename="manager-gui"/>
  <role rolename="manager-script"/>
  <user username="tomcat" password="tomcat" roles="tomcat,admin-gui,admin,manager,manager-gui,manager-script"/>
manager-gui
允许访问html接口(即URL路径为/manager/html/*)
manager-script
允许访问纯文本接口(即URL路径为/manager/text/*)
manager-jmx
允许访问JMX代理接口(即URL路径为/manager/jmxproxy/*)
manager-status
允许访问Tomcat只读状态页面(即URL路径为/manager/status/*)

2、在jenkins的管理插件中搜索deploy to container plugin这个插件,然后安装即可。
安装完成后,在配置好的web项目中,找到"增加构建后操作步骤",后选择:

这里写图片描述

3、配置jenkins中的tomcat相关信息如下:

这里写图片描述

到此通过插件部署tomcat的方式就结束了。但是利用这种方式有一个缺点。
由于我们项目中使用了dubbo框架。
并且,我们的dubbo服务分为了很多的模块儿。每一个模块儿是单独的一个项目,那么需要单独暴露一个dubbo服务的端口号。利用插件的部署方式,这个插件实现了tomcat的热部署。
但是在重复部署dubbo项目时,由于端口号已经被占用,而在重复部署时,不会自动关闭端口号,然后再启动,
所以再次部署时,会出现无法注册/bind服务端口号这种错误。针对这种问题,想到了采用python脚本的方式来部署tomcat。

Shell脚本部署tomcat

思路:
1、首先在jenkin集成完成之后,要先关闭tomcat
(关闭tomcat,会自动关闭dubbo服务所暴露的端口号)
2、将tomcat中之前部署的相同war包删除
3、将jenkins工作空间中的war包拷贝到tomcat的部署路径中
4、启动tomcat
#!/bin/bash
export JAVA_HOME=/usr/local/jdk1.8
project_name=$WORKSPACE/target/$JOB_NAME-1.0.0-SNAPSHOT.war
tomcat_pid=`/usr/sbin/lsof -n -P -t -i :8080`
[ -n "$tomcat_pid" ] && kill -9 $tomcat_pid
rm -rf /usr/local/dubbo-admin-tomcat/webapps/$JOB_NAME.war
rm -rf /usr/local/dubbo-admin-tomcat/webapps/$JOB_NAME
cp $project_name /usr/local/dubbo-admin-tomcat/webapps/$JOB_NAME.war
cd /usr/local/dubbo-admin-tomcat/bin/
./startup.sh
通过这种方式部署,可以解决上面端口冲突的问题,同时也有自己的缺点,那就是每次部署都要重新启动tomcat,比较麻烦。但好在都是由脚本执行的。
根据自己的需要来选择部署的方式吧!
Logo

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

更多推荐