JAVA WEB自动化部署牛刀小试

  • 简述

    作为一只后台狗,在使用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.mavengroupId>
    <artifactId>tomcat7-maven-pluginartifactId>
    <version>2.2version>
    <configuration>
        <url>http://server:port/manager/texturl>
        <username>adminusername>
        <password>adminpassword>
        <update>trueupdate>
        <path>/wepapppath>
    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%
  • 效果

    终于鸟枪换炮了,感觉自己又多了好多时间可以做其他的(休息)事了。测试了一下,效果还是很令人满意的,花在部署上的时间已经几近为零。

  • 结论

    本文仅适合在自己负责的项目中简单进行自动化的部署(偷懒),基于本文,可以扩展发挥做一个自动化部署系统。

    这里只是做一个学习和交流,如需要更深层次的交流,可以联系作者:[email protected]
    个人博客地址:小安安的自留地
    知乎专栏地址:全干工程师
    Github地址:wslongchen
    或者扫码回复“应垂丝汀”加入作者的小圈子:

Tips:关于CI的话,网络上有许多持续集成项目的框架,在这里推荐三个:

  1. Travis CI 开源持续集成框架,搭配github使用,干活不累,而且只需要配置yaml,方便快捷。
  2. jenkins 基于Java开发的CI,搭配jetty,干活不累。
  3. Go 采用Server-Agent的模式,配置pipeline,干活不累。

你可能感兴趣的:(全干工程师,java,web应用,后端服务,自动化)