场景:linux中自动部署项目在工作中经常遇到,快速高效的部署项目能够大幅提高工作效率。现在将项目部署的过程记录下来,以供参考,其中用到的知识点现在还有很多不很清楚,后面要好好琢磨琢磨!

1 项目部署过程

1.1 项目结构

典型的spring框架项目,只不过为了将应用和服务相分离,做成了三个部分,service和web之间通过hessian方式进行通讯!

该项目的手工部署方式是:

  • 先对common项目执行clean install 的maven命令
  • 对service和web分别执行clean package命令
  • 将相关的jar包上传到服务器的tomcat目录下,解压后启动tomcat即可。至于配置tomcat的过程后面再总结!

1.2 windows本地配置

本地建立bat脚本文件,实现运行脚本即可进行程序上传。

自动部署.bat——命令如下

@echo off
cd /d %~dp0
title 欢迎自动部署工具rem service工程路径
set serviceProjectPath=G:\STSPro\rdp-lfcp-service
rem web工程路径
set webProjectPath=G:\STSPro\rdp-lfcp-web
rem common工程路径
set commonProjectPath=G:\STSPro\rdp-lfcp-commonrem service编译目录:target\编译版本
set serviceMavenTargetPath=target\lfcpservice-0.0.1
rem web编译目录:target\编译版本
set webMavenTargetPath=target\lfcpweb-0.0.1rem 工程名字
set projectName=opss
rem 服务器地址
set serverIp=xxx.xxx.xxx.xxx
rem 登陆用户名
set serverLoginId=xxx
rem 登陆密码
set serverLoginPwd=xxx
rem -----------------------------以上是配置区----------------------------------------set thisPath=%~dp0
set serviceBuildPath=%serviceProjectPath%\%serviceMavenTargetPath%
set webBuildPath=%webProjectPath%\%webMavenTargetPath%
echo.
echo ------请输入部署粒度:0-全部,1-只部署service,2-只部署web
set /p toFlag=
echo.
rem  初始化FTP配置信息.....
echo open %serverIp% > ftpinfo.szfesc
echo %serverLoginId%>>ftpinfo.szfesc
echo %serverLoginPwd%>>ftpinfo.szfesc
echo 天王盖地虎,宝塔镇河妖。>>game.szfescecho common工程正在执行maven install,请稍后...
cd /d "%commonProjectPath%"
call  mvn clean install -B > "%thisPath%maven.log"
if 1 EQU %ERRORLEVEL% (color ACecho common工程执行maven install失败,详见maven编译日志!goto  end
)if "0" == "%toFlag%" (rem 正在全部上传...goto toAll
)
if "1" == "%toFlag%" (rem 正在上传service...goto toServicegoto toUploadFtp
)
if "2" == "%toFlag%" (rem 正在上传web...goto toWebgoto toUploadFtp
):toAll
echo service工程正在执行maven build,请稍后...
cd /d "%serviceProjectPath%"
call mvn clean package -B >> "%thisPath%maven.log"
if 1 EQU %ERRORLEVEL% (color ACecho service工程执行maven build失败,详见maven编译日志!goto  end
)
echo web工程正在执行maven build,请稍后...
cd /d "%webProjectPath%"
call mvn clean package -B >> "%thisPath%maven.log"
if 1 EQU %ERRORLEVEL% (color ACecho web工程执行maven build失败,详见maven编译日志!goto  end
)
cd /d "%thisPath%"
echo 正在打包service,请稍后...
start /min /wait jar.exe cvf "%projectName%_service.jar" -C "%serviceBuildPath%" .
echo put "%projectName%_service.jar" >> ftpinfo.szfesc
echo 正在打包web,请稍后...
start /min /wait jar.exe cvf "%projectName%_web.jar" -C "%webBuildPath%" .
echo put "%projectName%_web.jar" >> ftpinfo.szfesc
goto toUploadFtp:toService
echo service工程正在执行maven build,请稍后...
cd /d "%serviceProjectPath%"
call mvn clean package -B >> "%thisPath%maven.log"
if 1 EQU %ERRORLEVEL% (color ACecho service工程执行maven build失败,详见maven编译日志!goto  end
)
cd /d "%thisPath%"
echo 正在打包service,请稍后...
start /min jar.exe cvf "%projectName%_service.jar" -C "%serviceBuildPath%" .
echo put "%projectName%_service.jar" >> ftpinfo.szfesc
goto toUploadFtp:toWeb
echo web工程正在执行maven build,请稍后...
cd /d "%webProjectPath%"
call mvn clean package -B >> "%thisPath%maven.log"
if 1 EQU %ERRORLEVEL% (color ACecho web工程执行maven build失败,详见maven编译日志!goto  end
)
cd /d "%thisPath%"
echo 正在打包web,请稍后...
start /min /wait jar.exe cvf "%projectName%_web.jar" -C "%webBuildPath%" .
echo put "%projectName%_web.jar" >> ftpinfo.szfesc
goto toUploadFtp:toUploadFtp
echo 正在上传至应用服务器,请稍后...
echo put game.szfesc >> ftpinfo.szfesc
echo bye >> ftpinfo.szfesc
echo quit >> ftpinfo.szfesc
ftp -s:ftpinfo.szfesc
del ftpinfo.szfesc
del game.szfesc
echo 恭喜,上传成功,请等待1-2分钟等系统自动完成部署工作!!
goto end:end
echo.
echo maven 编译日志存放目录:%thisPath%maven.log
del "%projectName%_service.jar"
del "%projectName%_web.jar"
timeout /t 5
exit

对于同样结构的程序,只需修改配置区的相关参数,即可实现本地程序的打包、上传过程!效果图

上述过程执行完之后,自己命名的jar包就自动上传到配置的当前用户目录下面了。

1.3 linux端配置

linux端的配置主要有两点:

1. 自动部署脚本autoDeploy.sh

#!/bin/sh
source $HOME/.profile
#JAVA_HOME=/home/lfcp/jdk1.7.0_67
if [ -f "$HOME/game.szfesc" ];thenrm $HOME/game.szfescthisTime=$(date +'%Y%m%d-%H%M%S')#--serviceif [ -f "$HOME/lfcp_service.jar" ];thencd $HOMEkill -s 9 `ps -ef | grep java | grep lfcp| grep service | awk '{print $2}'`sleep 15#mv service/logs/lfcpservice.log service/logs/lfcpservice_${thisTime}.logmv service/lfcpservice service/lfcpservice_${thisTime}mkdir service/lfcpservicemv lfcp_service.jar service/lfcpservice/cd service/lfcpserviceunzip lfcp_service.jarrm lfcp_service.jarcp -f $HOME/service/application.properties $HOME/service/lfcpservice/WEB-INF/classessh $HOME/serstart.shecho runing autoDeploy service over by time $(date +'%Y-%m-%d %H:%M:%S') >> $HOME/autoDeploy.logfi#--webif [ -f "$HOME/lfcp_web.jar" ];thencd $HOMEkill -s 9 `ps -ef | grep java | grep lfcp| grep web | awk '{print $2}'`sleep 15#mv web/logs/lfcpweb.log web/logs/lfcpweb_${thisTime}.logmv web/lfcpweb web/lfcpweb_${thisTime}mkdir web/lfcpwebmv lfcp_web.jar web/lfcpweb/cd web/lfcpwebunzip lfcp_web.jarrm lfcp_web.jarcp -f $HOME/web/application.properties $HOME/web/lfcpweb/WEB-INF/classes#cp -rf $HOME/web/crt $HOME/web/lfcpweb/WEB-INF/classes/crtsh $HOME/webstart.shecho runing autoDeploy web over by time $(date +'%Y-%m-%d %H:%M:%S') >> $HOME/autoDeploy.logfi
fi

绿色部分本来使用

 jar -xvf opss_web.jar

来解压,但是后来发现环境变量配置有问题,执行自动脚本后并没有解压文件的存在。后来改用unzip的方式解压。这里的环境变量配置还需要改善

上述命令的理解:

  • 判断用户目录下是否有文件game.szfesc存在,是后续程序执行的开始!
  • service和web的执行过程一样,这里以service为例说明:
  • 如果opss_service.jar文件存在,首先关闭service工程。然后休眠15s
  • 将之前的工程备份为service/opssservice_${thisTime},用于程序出错时候的恢复
  • 创建程序的解压目录mkdir service/opssservice,然后将jar包移动到解压目录,进行jar文件的解压
  • 解压完成后删除jar文件。用服务器上的配置文件application.properties,替换上传时候程序中的配置文件!(这个在多环境的项目部署中很有用)
  • 启动tomcat,并打印程序结束语。

2. 在linux上使用crontab配置定时任务。对于改命令的使用,可以在本博客中进行搜索。

这样的话,每分钟就会自动执行一次自动部署命令,剩下的就是查看日志,运行程序了。

未完待续!

Linux项目自动部署相关推荐

  1. Jenkins+Github+Nginx实现前端项目自动部署

    Jenkins+Github+Nginx实现前端项目自动部署 前言 最近在搭建一个自己的网站,网站框架搭好了要把项目放到服务器运行,但是每次更新网站内容就要手动部署一次,实在很麻烦,于是就想搭建一套自 ...

  2. [转]Eclipse中的Web项目自动部署到Tomcat

    原文地址:http://www.cnblogs.com/ywl925/p/3815173.html 原因 很长时间没用Eclipse了,近期由于又要用它做个简单的JSP项目,又要重新学习了,虽然熟悉的 ...

  3. ant+svn+tomcat实现项目自动部署

    因工作需要,研究并实现了 ant+svn+tomcat实现项目自动部署,其中参考了下面文章:http://www.cnblogs.com/taoweiji/p/3700915.html jar包需要e ...

  4. myeclipse + tomcat 项目自动部署

    在MyEclipse中设置项目的自动部署需要综合考虑两个方面: 1是MyEclipse本身,通过主菜单中project->auto ,另一个就是tomcat配置文件.配置文件包括 conf 下的 ...

  5. Eclipse中的Web项目自动部署到Tomcat

    2019独角兽企业重金招聘Python工程师标准>>> 很长时间没用Eclipse了,近期由于又要用它做个简单的JSP项目,又要重新学习了,虽然熟悉的很快,但记忆总是很模糊,偶尔犯错 ...

  6. idea实现项目自动部署服务器

    当我们进行服务器部署调试时,每次都需要上传,停止再启动,操作繁琐. 其实我们再idea中就可以进行快速部署,启动项目. 安装插件 在idea软件商店中搜索 Alibaba Cloud Tookit 插 ...

  7. jenkins实现项目自动部署

    背景 整体思路 实现方式 1 自动化部署脚本 2 远程执行 3 配置jenkins任务 背景 之前给公司搭建过一套gitlab+gerrit+jenkins的持续集成环境,由于操作起来有点繁琐,自己也 ...

  8. Vue项目自动部署【精简版】NuxtJS + GitHub Actions + Linux 自动部署学习(包含阿里云Linux ECS购买过程、传统部署流程、pm2、Github Actions)

    购买阿里云Linux服务器 如果已有服务器请直接跳转到[传统部署方式] 登录阿里云,访问 云服务器 ECS 购买地址:https://ecs-buy.aliyun.com/ 也可从首页导航菜单进入. ...

  9. Linux Cobbler自动部署装机

    Cobbler自动部署装机 一.实验准备 二.Cobbler自动装机服务搭建步骤 1.导入epel源 2.安装Cobbler以及其相关服务软件包 3.修改cobbler主配置文件 4.使用cobble ...

最新文章

  1. error LNK2001: 无法解析的外部符号 “void __cdecl cv::cvtColor
  2. python 简易HTTP服务器搭建
  3. 如何对自己做好正确的人生规划
  4. Redis的搭建和Redis的集群搭建
  5. 如何异步的处理restful服务(基础)
  6. access denied for_abm怎么样?ACCESS集团携8大国际品牌在进博会首秀,展示abmr 硬核实力!...
  7. Spark入门(二)多主standalone安装
  8. Smobiler 4.4 更新预告 Part 1(Smobiler能让你在Visual Studio上开发APP)
  9. Comet:基于 HTTP 长连接的“服务器推”技术 (实例)
  10. linux 如何关闭屏幕录像,如何使用GNOME Shell隐藏的屏幕录像工具
  11. STM32F103单片机生成16路PWM波
  12. 吴恩达机器学习练习4:神经网络学习(损失函数和正则化)
  13. python从网页提取文本_从网页中提取文本
  14. Verilog入门教程与实例分享
  15. 数字信号处理-04- FPGA常用运算模块-除法器
  16. Linux简介和各发行版介绍
  17. 数据挖掘(NUFE理论版)
  18. 每天上下班之前读一遍,直到铭记在心……
  19. 人类的第一语言是什么
  20. 监察、稽查、稽核与审计的关系

热门文章

  1. html限制最多字符串,css – 设置字符串换行中允许的最大换行量
  2. UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0x8b in position 1: invalid start byte
  3. java抢答器代码_java竞争抢答器
  4. mysql地区时间_mysql – 带时区的日期时间格式
  5. java头像交互式差分演变_一种基于交互式差分进化计算的用户知识需求获取方法与流程...
  6. ubuntu下安装java和tomcat安装
  7. SLAM知识[7]:依赖项和安装
  8. 连云港职业技术学院有计算机系吗,连云港职业技术学院电子信息工程技术专业...
  9. python 对象序列化 pickling_[Python]对dat文件的操作:序列化对象
  10. MATLAB-冒号符号