首页 > 系统服务 > 详细

Linux项目自动部署

时间:2017-02-25 18:48:11      阅读:282      评论:0      收藏:0      [点我收藏+]

场景: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/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

 

 上述命令的理解:

  • 判断用户目录下是否有文件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项目自动部署

原文:http://www.cnblogs.com/lixuwu/p/6442327.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!