-
简述
作为一只后台狗,在使用Java为技术栈来开发后端服务应用的时候,或多或少的都需要自己手动部署。一开始,觉得写完一次自己手动部署到服务器上,还觉得新鲜感还不错,毕竟看着黑黑的terminal有种莫名的兴奋。后来服务端写完,需要改动web应用的时候,而且一次需要部署三到四个应用的时候,一股恶心感从内而外喷涌而出。
本文记录了自己工作中所用到的自动化部署(偷懒)历程,有需要的程序汪自行收藏。 -
辛酸之路
-
环境
由于工作中使用的IDE是eclipse,使用Maven进行包管理,所以,以下所涉及的都是基于Java 1.8,Maven 3.3.9,Elicpse Luna 4.4.2。
-
历程
-
TOP1 Maven插件配置
项目中如果有使用Maven的话,则可以很方便的以tomcat7为例,在pom文件中配置一个插件即可轻松实现,代码如下:
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<url>http://server:port/manager/text</url>
<username>admin</username>
<password>admin</password>
<update>true</update>
<path>/wepapp</path>
</configuration>
</plugin>
此处注意url节点。另外需要在tomcat服务器的conf/tomcat-users.xml配置一个admin的用户权限。
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="admin" password="admin" roles="manager-gui, manager-script"/>
大功告成,运行mvn tomcat7:deploy
,你就会惊奇的发现war文件就到了对应的tomcat下的webapps目录之中了。
-
TOP2 Linux脚本部署
tomcat虽然部署麻烦,但是就稳定性来说,比起其它的web容器还是稍微好一丢丢。略过tomcat的坑不说,服务器中往往会有多个tomcat存在,特别是在测试的服务器上,我司放了有10多个tomcat,这样,作为一个 没有专门部署人员的小团队来说,简直是个噩梦,部署几个应用需要执行一大丢命令。
会偷懒的人往往就会写好一些常用的部署脚步,避免重复性的工作,在这里,我只简单介绍自己所使用的一种脚本,就是根据tomcat容器所在路径找到所在进程,杀死进程,然后进行重启。
#!/bin/bash
tomcat_path1=/home/tomcat/tomcat_r3
cd $tomcat_path1
echo xxx的tomact路径是$tomcat_path1
# 找到tomcat1的进程id
tomcat1_pid=$(ps -ef|grep $tomcat_path1|gawk '$0 !~/grep/ {print $2}' |tr -s '\n' ' ')
if [ "$tomcat1_pid" ];then
echo xxx的tomact进程 id是 $tomcat1_pid
# 杀掉tomcat1进程
if
kill -9 $tomcat1_pid
then
echo 成功杀死xxx的进程
else
echo xxx进程没杀死,尴尬
fi
else
echo XXX进程已经挂掉了
fi
# 启动tomcat2并重定向到日志输出
sh $tomcat_path2/bin/startup.sh
echo 重启xxx
-
TOP3 Windows与Linux架桥互通
由于是在windows中进行开发工作,服务器使用的是cent os,所以又会多出许多重复性的工作。所以我选择使用putty,在windows与Linux之间架一个桥,从而能够方便的上传文件以及对远程服务器进行操作。
整体思路是,本地打包maven项目,打包完成之后上传到服务器WEB容器对应目录,然后调用我们上一步的服务器脚本,完成整体项目部署流程。批处理文件代码示例如下:
@echo off
set project_path=xxx
set server_user_1=root
set server_passwd_1=xxx
set server_ip_1=serverip
set local_file1=%project_path1%\target\xxx.war
set deploy-shell=test-web-deploy.sh
echo 当前使用的JDK 版本:
java -version
echo 开始打包
E:
cd %project_path%
call mvn clean install
echo 打包完毕
echo 开始上传xxx到服务器
call pscp -P port -l %server_user_1% -pw %server_passwd_1% -r %local_file1% %server_ip_1%:%server_path1%
echo 上传xxx完毕
echo 开始运行脚本
call plink -P port %server_user_1%@%server_ip_1% -pw %server_passwd_1% sh %deploy-shell%
-
效果
终于鸟枪换炮了,感觉自己又多了好多时间可以做其他的(休息)事了。测试了一下,效果还是很令人满意的,花在部署上的时间已经几近为零。
-
结论
本文仅适合在自己负责的项目中简单进行自动化的部署(偷懒),基于本文,可以扩展发挥做一个自动化部署系统。
这里只是做一个学习和交流,如需要更深层次的交流,可以联系作者:
1049058427@qq.com
个人博客地址:小安安的自留地
知乎专栏地址:全干工程师
Github地址:wslongchen
或者扫码回复“应垂丝汀”
加入作者的小圈子:
Tips:关于CI的话,网络上有许多持续集成项目的框架,在这里推荐三个:
- Travis CI 开源持续集成框架,搭配github使用,干活不累,而且只需要配置yaml,方便快捷。
- jenkins 基于Java开发的CI,搭配jetty,干活不累。
- Go 采用Server-Agent的模式,配置pipeline,干活不累。