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配置定时任务。对于改命令的使用,可以在本博客中进行搜索。

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

    未完待续!

  • 相关阅读:
    2. Add Two Numbers
    1. Two Sum
    22. Generate Parentheses (backTracking)
    21. Merge Two Sorted Lists
    20. Valid Parentheses (Stack)
    19. Remove Nth Node From End of List
    18. 4Sum (通用算法 nSum)
    17. Letter Combinations of a Phone Number (backtracking)
    LeetCode SQL: Combine Two Tables
    LeetCode SQL:Employees Earning More Than Their Managers
  • 原文地址:https://www.cnblogs.com/lixuwu/p/6442327.html
Copyright © 2011-2022 走看看