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配置定時任務。對於改命令的使用,可以在本博客中進行搜索。

這樣的話,每分鍾就會自動執行一次自動部署命令,剩下的就是查看日志,運行程序了。

未完待續!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM