资讯专栏INFORMATION COLUMN

JAVA WEB自动化部署牛刀小试

BlackHole1 / 809人阅读

摘要:本文记录了自己工作中所用到的自动化部署偷懒历程,有需要的程序汪自行收藏。结论本文仅适合在自己负责的项目中简单进行自动化的部署偷懒,基于本文,可以扩展发挥做一个自动化部署系统。

简述

作为一只后台狗,在使用Java为技术栈来开发后端服务应用的时候,或多或少的都需要自己手动部署。一开始,觉得写完一次自己手动部署到服务器上,还觉得新鲜感还不错,毕竟看着黑黑的terminal有种莫名的兴奋。后来服务端写完,需要改动web应用的时候,而且一次需要部署三到四个应用的时候,一股恶心感从内而外喷涌而出。

本文记录了自己工作中所用到的自动化部署(偷懒)历程,有需要的程序汪自行收藏。

辛酸之路

环境

由于工作中使用的IDE是eclipse,使用Maven进行包管理,所以,以下所涉及的都是基于Java 1.8,Maven 3.3.9,Elicpse Luna 4.4.2。

历程

TOP1 Maven插件配置

项目中如果有使用Maven的话,则可以很方便的以tomcat7为例,在pom文件中配置一个插件即可轻松实现,代码如下:


    org.apache.tomcat.maven
    tomcat7-maven-plugin
    2.2
    
        http://server:port/manager/text
        admin
        admin
        true
        /wepapp
    

此处注意url节点。另外需要在tomcat服务器的conf/tomcat-users.xml配置一个admin的用户权限。

  
  

大功告成,运行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 "
" " ")
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%	argetxxx.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%

效果

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

结论

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

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

Travis CI 开源持续集成框架,搭配github使用,干活不累,而且只需要配置yaml,方便快捷。

jenkins 基于Java开发的CI,搭配jetty,干活不累。

Go 采用Server-Agent的模式,配置pipeline,干活不累。

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67475.html

相关文章

  • JavaWeb开发

    摘要:在页面中执行的表达式语法表达式注意表达式不以分号结束示例张学友声明一个字符串变量声明一个返回整型值的函数单行注释多行注释这里是脚本代码测试哈哈你好四页面生命周期问答题当用户第一次请求一个页面时,首先被执行的方法是构造方法答案选。 java web开发学习笔记。 一、jsp简介 JSP与 PHP、ASP、ASP.NET 等语言类似,运行在服务端的语言。 JSP(全称Java Server...

    soasme 评论0 收藏0
  • cordova研习笔记(一) —— 初试牛刀之cordova.js概要

    摘要:任何初始化任务应该在文件中的事件的事件处理函数中。这个配置文件有几个地方很关键,一开始没有认真看,将插件导进工程跑的时候各种问题,十分头痛,不得不重新认真看看文档。 前言 来新公司的第一个任务,研究hybrid App中间层实现原理,做中间层插件开发。这个任务挺有意思,也很有挑战性,之前在DCloud虽然做过5+ App开发,但是中间层的东西确实涉及不多。本系列文章属于系列开篇cord...

    buildupchao 评论0 收藏0
  • 基于web的全景—— Pannellum小试

    摘要:前言基于端的业务需求,为了更好地服务于用户。需要在售卖端加上全景预览的功能,目前用的是开发的产品,需要基于的全景预览功能。关于初始化配置,对于多场景的全景来说最好使用和属性组成的配置项。 前言 基于C端的业务需求,为了更好地服务于用户。需要在售卖端加上全景预览的功能,目前用的是web开发的产品,需要基于web的全景预览功能。通过搜索查找比较,最终选择使用pannellum。 Pann...

    since1986 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<