zoukankan      html  css  js  c++  java
  • 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
    dp-lfcp-service
    rem web工程路径
    set webProjectPath=G:STSPro
    dp-lfcp-web
    rem common工程路径
    set commonProjectPath=G:STSPro
    dp-lfcp-common
    
    rem service编译目录:target编译版本
    set serviceMavenTargetPath=targetlfcpservice-0.0.1
    rem web编译目录:target编译版本
    set webMavenTargetPath=targetlfcpweb-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配置定时任务。对于改命令的使用,可以在本博客中进行搜索。

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

    未完待续!

  • 相关阅读:
    10.20stark组件已经完工
    webpack3到webpack4
    app埋点
    postman使用
    phantomjs
    nodejieba中文分词
    爬虫--cheerio
    mysql命令(三)
    mysql学习(二)
    mysql安装登录
  • 原文地址:https://www.cnblogs.com/lixuwu/p/6442327.html
Copyright © 2011-2022 走看看