Linux项目自动部署
场景: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-common rem service编译目录:target\编译版本
set serviceMavenTargetPath=target\lfcpservice-0.0.1
rem web编译目录:target\编译版本
set webMavenTargetPath=target\lfcpweb-0.0.1 rem 工程名字
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.szfesc echo common工程正在执行maven install,请稍后...
cd /d "%commonProjectPath%"
call mvn clean install -B > "%thisPath%maven.log"
if 1 EQU %ERRORLEVEL% (
color AC
echo common工程执行maven install失败,详见maven编译日志!
goto end
) if "0" == "%toFlag%" (
rem 正在全部上传...
goto toAll
)
if "1" == "%toFlag%" (
rem 正在上传service...
goto toService
goto toUploadFtp
)
if "2" == "%toFlag%" (
rem 正在上传web...
goto toWeb
goto toUploadFtp
) :toAll
echo service工程正在执行maven build,请稍后...
cd /d "%serviceProjectPath%"
call mvn clean package -B >> "%thisPath%maven.log"
if 1 EQU %ERRORLEVEL% (
color AC
echo 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 AC
echo 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 AC
echo 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 AC
echo 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" ];then
rm $HOME/game.szfesc
thisTime=$(date +'%Y%m%d-%H%M%S')
#--service
if [ -f "$HOME/lfcp_service.jar" ];then
cd $HOME
kill -s 9 `ps -ef | grep java | grep lfcp| grep service | awk '{print $2}'`
sleep 15
#mv service/logs/lfcpservice.log service/logs/lfcpservice_${thisTime}.log
mv service/lfcpservice service/lfcpservice_${thisTime}
mkdir service/lfcpservice
mv lfcp_service.jar service/lfcpservice/
cd service/lfcpservice
unzip lfcp_service.jar
rm lfcp_service.jar
cp -f $HOME/service/application.properties $HOME/service/lfcpservice/WEB-INF/classes
sh $HOME/serstart.sh
echo runing autoDeploy service over by time $(date +'%Y-%m-%d %H:%M:%S') >> $HOME/autoDeploy.log
fi
#--web
if [ -f "$HOME/lfcp_web.jar" ];then
cd $HOME
kill -s 9 `ps -ef | grep java | grep lfcp| grep web | awk '{print $2}'`
sleep 15
#mv web/logs/lfcpweb.log web/logs/lfcpweb_${thisTime}.log
mv web/lfcpweb web/lfcpweb_${thisTime}
mkdir web/lfcpweb
mv lfcp_web.jar web/lfcpweb/
cd web/lfcpweb
unzip lfcp_web.jar
rm lfcp_web.jar
cp -f $HOME/web/application.properties $HOME/web/lfcpweb/WEB-INF/classes
#cp -rf $HOME/web/crt $HOME/web/lfcpweb/WEB-INF/classes/crt
sh $HOME/webstart.sh
echo runing autoDeploy web over by time $(date +'%Y-%m-%d %H:%M:%S') >> $HOME/autoDeploy.log
fi
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项目自动部署的更多相关文章
- linux 项目自动部署脚本
		
1.使用maven获取源码部署,并可替换配置文件(金融数据分析平台) #!/bin/bash#设置变量cd /home#停止tomcatecho "开始停止tomcat..." p ...
 - Eclipse中的Web项目自动部署到Tomcat
		
原因 很长时间没用Eclipse了,近期由于又要用它做个简单的JSP项目,又要重新学习了,虽然熟悉的很快,但记忆总是很模糊,偶尔犯错,以前很少写博客,现在感觉还是很有必要的,编程中每个人对于犯过的错误 ...
 - [转]Eclipse中的Web项目自动部署到Tomcat
		
原文地址:http://www.cnblogs.com/ywl925/p/3815173.html 原因 很长时间没用Eclipse了,近期由于又要用它做个简单的JSP项目,又要重新学习了,虽然熟悉的 ...
 - myeclipse + tomcat 项目自动部署
		
在MyEclipse中设置项目的自动部署需要综合考虑两个方面: 1是MyEclipse本身,通过主菜单中project->auto ,另一个就是tomcat配置文件.配置文件包括 conf 下的 ...
 - Eclipse中WEB项目自动部署到Tomcat
		
原因 很长时间没用Eclipse了,近期由于又要用它做个简单的JSP项目,又要重新学习了,虽然熟悉的很快,但记忆总是很模糊,偶尔犯错,以前很少写博客,现在感觉还是很有必要的,编程中每个人对于犯过的错误 ...
 - Eclipse中的Web项目自动部署到Tomcat(转)
		
转自:http://www.cnblogs.com/ywl925/p/3815173.html 问题: 这里就有个问题,是怎么把Eclipse中的网站项目自动部署到tomcat中.在Eclipse中做 ...
 - ant+svn+tomcat实现项目自动部署
		
因工作需要,研究并实现了 ant+svn+tomcat实现项目自动部署,其中参考了下面文章:http://www.cnblogs.com/taoweiji/p/3700915.html jar包需要e ...
 - Eclipse中的Web项目自动部署到Tomcat的webapp目录下
		
Eclipse中的Web项目自动部署到Tomcat 原因 很长时间没用Eclipse了,近期由于又要用它做个简单的JSP项目,又要重新学习了,虽然熟悉的很快,但记忆总是很模糊,偶尔犯错,以前很少写 ...
 - JavaWeb项目自动部署,持续集成
		
来公司以后,学会两种JavaWeb项目,自动部署. 1.jenkins持续集成.自动化部署 (1)安装jenkins----------推荐nginx跳转方式,以域名方式 (2)nginx采用不同域名 ...
 
随机推荐
- Codility---MaxProfit
			
Task description A zero-indexed array A consisting of N integers is given. It contains daily prices ...
 - 使用外部容器运行spring-boot项目:不使用spring-boot内置容器让spring-boot项目运行在外部tomcat容器中
			
前言:本项目基于maven构建 spring-boot项目可以快速构建web应用,其内置的tomcat容器也十分方便我们的测试运行: spring-boot项目需要部署在外部容器中的时候,spring ...
 - 初始化CSS
			
为什么要初始化CSS? 建站老手都知道,这是为了考虑到浏览器的兼容问题,其实不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面差异.当然,初始化样式会对SEO有一定的 ...
 - windows7 64bit下mvn命令后提示‘cmd’不是内部或外部命令,也不是可执行程序或批处理文件
			
首先,开命令提示符,输入如下命令试试echo %M2_HOME% 回车如果显示的路径和安装路径一致说明配置没问题; 那么出现这个问题的原因可能就是路径问题,可能是你安装了某个软件更改了系统映射路径导致 ...
 - maven插件打包可执行jar
			
pom文件加 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</grou ...
 - MVC 树节点Table格式授权
			
这几夜心里颇不平静, 奈何 JS水平有限,前台效果耗时四天,后台传值一天,直至昨夜丑时测试初步完成,其实就是一个给tree来授权,网上开源的插件很多,如treejs.easyui 等等,只是这里授权稍 ...
 - MySQL授权命令grant的使用方法
			
本文实例,运行于 MySQL 5.0 及以上版本. MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删 ...
 - 压缩网站的css和js,合并多个文件到一个文件
			
压缩网站的css和js,合并多个文件到一个文件uglifyjs index.js html5shiv.min.js -o all.min.jsuglifycss index.min.css web.c ...
 - 【Android Developers Training】 23. 序言:保存数据
			
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
 - JDBC02 利用JDBC连接数据库【使用数据库连接池】
			
目录 1/2/3 Statement 和 Preparedstatement 的区别 4 读取properties配置文件 5 数据库连接池 6 利用数据库连接池连接数据库 1 使用Statemen ...