场景:linux中自动部署项目在工作中经常遇到,快速高效的部署项目能够大幅提高工作效率。现在将项目部署的过程记录下来,以供参考,其中用到的知识点现在还有很多不很清楚,后面要好好琢磨琢磨!
典型的spring框架项目,只不过为了将应用和服务相分离,做成了三个部分,service和web之间通过hessian方式进行通讯!
该项目的手工部署方式是:
本地建立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包就自动上传到配置的当前用户目录下面了。
linux端的配置主要有两点:
1. 自动部署脚本autoDeploy.sh
#!/bin/sh source $HOME/.profile #JAVA_HOME=/home/opss/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/opss_service.jar" ];then cd $HOME sh $HOME/service/apache-tomcat-8.0.24/bin/shutdown.sh sleep 15 #mv service/logs/opssservice.log service/logs/opssservice_${thisTime}.log mv service/opssservice service/opssservice_${thisTime} mkdir service/opssservice mv opss_service.jar service/opssservice/ cd service/opssservice jar -xvf opss_service.jar rm opss_service.jar cp -f $HOME/application.properties $HOME/service/opssservice/WEB-INF/classes sh $HOME/service/start.sh echo runing autoDeploy service over by time $(date +‘%Y-%m-%d %H:%M:%S‘) >> $HOME/autoDeploy.log fi #--web if [ -f "$HOME/opss_web.jar" ];then cd $HOME sh $HOME/web/apache-tomcat-8.0.24/bin/shutdown.sh sleep 15 #mv web/logs/opssweb.log web/logs/opssweb_${thisTime}.log mv web/opssweb web/opssweb_${thisTime} mkdir web/opssweb mv opss_web.jar web/opssweb/ cd web/opssweb jar -xvf opss_web.jar rm opss_web.jar cp -rf $HOME/web/crt $HOME/web/opssweb/WEB-INF/classes/crt sh $HOME/web/start.sh echo runing autoDeploy web over by time $(date +‘%Y-%m-%d %H:%M:%S‘) >> $HOME/autoDeploy.log fi fi
上述命令的理解:
2. 在linux上使用crontab配置定时任务。对于改命令的使用,可以在本博客中进行搜索。
这样的话,每分钟就会自动执行一次自动部署命令,剩下的就是查看日志,运行程序了。
未完待续!
原文:http://www.cnblogs.com/lixuwu/p/6442327.html