摘要:本文记录了自己工作中所用到的自动化部署偷懒历程,有需要的程序汪自行收藏。结论本文仅适合在自己负责的项目中简单进行自动化的部署偷懒,基于本文,可以扩展发挥做一个自动化部署系统。
简述
作为一只后台狗,在使用Java为技术栈来开发后端服务应用的时候,或多或少的都需要自己手动部署。一开始,觉得写完一次自己手动部署到服务器上,还觉得新鲜感还不错,毕竟看着黑黑的terminal有种莫名的兴奋。后来服务端写完,需要改动web应用的时候,而且一次需要部署三到四个应用的时候,一股恶心感从内而外喷涌而出。
本文记录了自己工作中所用到的自动化部署(偷懒)历程,有需要的程序汪自行收藏。
辛酸之路
由于工作中使用的IDE是eclipse,使用Maven进行包管理,所以,以下所涉及的都是基于Java 1.8,Maven 3.3.9,Elicpse Luna 4.4.2。
项目中如果有使用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目录之中了。
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
由于是在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,方便快捷。
这里只是做一个学习和交流,如需要更深层次的交流,可以联系作者:1049058427@qq.com
个人博客地址:小安安的自留地
知乎专栏地址:全干工程师
Github地址:wslongchen
或者扫码回复“应垂丝汀”加入作者的小圈子:
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/67475.html
摘要:任何初始化任务应该在文件中的事件的事件处理函数中。这个配置文件有几个地方很关键,一开始没有认真看,将插件导进工程跑的时候各种问题,十分头痛,不得不重新认真看看文档。 前言 来新公司的第一个任务,研究hybrid App中间层实现原理,做中间层插件开发。这个任务挺有意思,也很有挑战性,之前在DCloud虽然做过5+ App开发,但是中间层的东西确实涉及不多。本系列文章属于系列开篇cord...
摘要:前言基于端的业务需求,为了更好地服务于用户。需要在售卖端加上全景预览的功能,目前用的是开发的产品,需要基于的全景预览功能。关于初始化配置,对于多场景的全景来说最好使用和属性组成的配置项。 前言 基于C端的业务需求,为了更好地服务于用户。需要在售卖端加上全景预览的功能,目前用的是web开发的产品,需要基于web的全景预览功能。通过搜索查找比较,最终选择使用pannellum。 Pann...
阅读 2517·2021-09-24 10:29
阅读 3797·2021-09-22 15:46
阅读 2569·2021-09-04 16:41
阅读 2976·2019-08-30 15:53
阅读 1257·2019-08-30 14:24
阅读 3051·2019-08-30 13:19
阅读 2168·2019-08-29 14:17
阅读 3519·2019-08-29 12:55