Linux项目自动部署
場(chǎng)景:linux中自動(dòng)部署項(xiàng)目在工作中經(jīng)常遇到,快速高效的部署項(xiàng)目能夠大幅提高工作效率。現(xiàn)在將項(xiàng)目部署的過(guò)程記錄下來(lái),以供參考,其中用到的知識(shí)點(diǎn)現(xiàn)在還有很多不很清楚,后面要好好琢磨琢磨!
1 項(xiàng)目部署過(guò)程
1.1 項(xiàng)目結(jié)構(gòu)
?
典型的spring框架項(xiàng)目,只不過(guò)為了將應(yīng)用和服務(wù)相分離,做成了三個(gè)部分,service和web之間通過(guò)hessian方式進(jìn)行通訊!
該項(xiàng)目的手工部署方式是:
- 先對(duì)common項(xiàng)目執(zhí)行clean install 的maven命令
- 對(duì)service和web分別執(zhí)行clean package命令
- 將相關(guān)的jar包上傳到服務(wù)器的tomcat目錄下,解壓后啟動(dòng)tomcat即可。至于配置tomcat的過(guò)程后面再總結(jié)!
1.2 windows本地配置
?本地建立bat腳本文件,實(shí)現(xiàn)運(yùn)行腳本即可進(jìn)行程序上傳。
自動(dòng)部署.bat——命令如下
@echo off cd /d %~dp0 title 歡迎自動(dòng)部署工具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-commonrem service編譯目錄:target\編譯版本 set serviceMavenTargetPath=target\lfcpservice-0.0.1 rem web編譯目錄:target\編譯版本 set webMavenTargetPath=target\lfcpweb-0.0.1rem 工程名字 set projectName=opss rem 服務(wù)器地址 set serverIp=xxx.xxx.xxx.xxx rem 登陸用戶(hù)名 set serverLoginId=xxx rem 登陸密碼 set serverLoginPwd=xxx rem -----------------------------以上是配置區(qū)----------------------------------------set thisPath=%~dp0 set serviceBuildPath=%serviceProjectPath%\%serviceMavenTargetPath% set webBuildPath=%webProjectPath%\%webMavenTargetPath% echo. echo ------請(qǐng)輸入部署粒度: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 天王蓋地虎,寶塔鎮(zhèn)河妖。>>game.szfescecho common工程正在執(zhí)行maven install,請(qǐng)稍后... cd /d "%commonProjectPath%" call mvn clean install -B > "%thisPath%maven.log" if 1 EQU %ERRORLEVEL% (color ACecho common工程執(zhí)行maven install失敗,詳見(jiàn)maven編譯日志!goto end )if "0" == "%toFlag%" (rem 正在全部上傳...goto toAll ) if "1" == "%toFlag%" (rem 正在上傳service...goto toServicegoto toUploadFtp ) if "2" == "%toFlag%" (rem 正在上傳web...goto toWebgoto toUploadFtp ):toAll echo service工程正在執(zhí)行maven build,請(qǐng)稍后... cd /d "%serviceProjectPath%" call mvn clean package -B >> "%thisPath%maven.log" if 1 EQU %ERRORLEVEL% (color ACecho service工程執(zhí)行maven build失敗,詳見(jiàn)maven編譯日志!goto end ) echo web工程正在執(zhí)行maven build,請(qǐng)稍后... cd /d "%webProjectPath%" call mvn clean package -B >> "%thisPath%maven.log" if 1 EQU %ERRORLEVEL% (color ACecho web工程執(zhí)行maven build失敗,詳見(jiàn)maven編譯日志!goto end ) cd /d "%thisPath%" echo 正在打包service,請(qǐng)稍后... start /min /wait jar.exe cvf "%projectName%_service.jar" -C "%serviceBuildPath%" . echo put "%projectName%_service.jar" >> ftpinfo.szfesc echo 正在打包web,請(qǐng)稍后... start /min /wait jar.exe cvf "%projectName%_web.jar" -C "%webBuildPath%" . echo put "%projectName%_web.jar" >> ftpinfo.szfesc goto toUploadFtp:toService echo service工程正在執(zhí)行maven build,請(qǐng)稍后... cd /d "%serviceProjectPath%" call mvn clean package -B >> "%thisPath%maven.log" if 1 EQU %ERRORLEVEL% (color ACecho service工程執(zhí)行maven build失敗,詳見(jiàn)maven編譯日志!goto end ) cd /d "%thisPath%" echo 正在打包service,請(qǐng)稍后... start /min jar.exe cvf "%projectName%_service.jar" -C "%serviceBuildPath%" . echo put "%projectName%_service.jar" >> ftpinfo.szfesc goto toUploadFtp:toWeb echo web工程正在執(zhí)行maven build,請(qǐng)稍后... cd /d "%webProjectPath%" call mvn clean package -B >> "%thisPath%maven.log" if 1 EQU %ERRORLEVEL% (color ACecho web工程執(zhí)行maven build失敗,詳見(jiàn)maven編譯日志!goto end ) cd /d "%thisPath%" echo 正在打包web,請(qǐng)稍后... start /min /wait jar.exe cvf "%projectName%_web.jar" -C "%webBuildPath%" . echo put "%projectName%_web.jar" >> ftpinfo.szfesc goto toUploadFtp:toUploadFtp echo 正在上傳至應(yīng)用服務(wù)器,請(qǐng)稍后... 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 恭喜,上傳成功,請(qǐng)等待1-2分鐘等系統(tǒng)自動(dòng)完成部署工作!! goto end:end echo. echo maven 編譯日志存放目錄:%thisPath%maven.log del "%projectName%_service.jar" del "%projectName%_web.jar" timeout /t 5 exit?
對(duì)于同樣結(jié)構(gòu)的程序,只需修改配置區(qū)的相關(guān)參數(shù),即可實(shí)現(xiàn)本地程序的打包、上傳過(guò)程!效果圖
?上述過(guò)程執(zhí)行完之后,自己命名的jar包就自動(dòng)上傳到配置的當(dāng)前用戶(hù)目錄下面了。
1.3 linux端配置
linux端的配置主要有兩點(diǎn):
?1. 自動(dòng)部署腳本autoDeploy.sh
#!/bin/sh source $HOME/.profile #JAVA_HOME=/home/lfcp/jdk1.7.0_67 if [ -f "$HOME/game.szfesc" ];thenrm $HOME/game.szfescthisTime=$(date +'%Y%m%d-%H%M%S')#--serviceif [ -f "$HOME/lfcp_service.jar" ];thencd $HOMEkill -s 9 `ps -ef | grep java | grep lfcp| grep service | awk '{print $2}'`sleep 15#mv service/logs/lfcpservice.log service/logs/lfcpservice_${thisTime}.logmv service/lfcpservice service/lfcpservice_${thisTime}mkdir service/lfcpservicemv lfcp_service.jar service/lfcpservice/cd service/lfcpserviceunzip lfcp_service.jarrm lfcp_service.jarcp -f $HOME/service/application.properties $HOME/service/lfcpservice/WEB-INF/classessh $HOME/serstart.shecho runing autoDeploy service over by time $(date +'%Y-%m-%d %H:%M:%S') >> $HOME/autoDeploy.logfi#--webif [ -f "$HOME/lfcp_web.jar" ];thencd $HOMEkill -s 9 `ps -ef | grep java | grep lfcp| grep web | awk '{print $2}'`sleep 15#mv web/logs/lfcpweb.log web/logs/lfcpweb_${thisTime}.logmv web/lfcpweb web/lfcpweb_${thisTime}mkdir web/lfcpwebmv lfcp_web.jar web/lfcpweb/cd web/lfcpwebunzip lfcp_web.jarrm lfcp_web.jarcp -f $HOME/web/application.properties $HOME/web/lfcpweb/WEB-INF/classes#cp -rf $HOME/web/crt $HOME/web/lfcpweb/WEB-INF/classes/crtsh $HOME/webstart.shecho runing autoDeploy web over by time $(date +'%Y-%m-%d %H:%M:%S') >> $HOME/autoDeploy.logfi fi?
綠色部分本來(lái)使用
jar -xvf opss_web.jar?
來(lái)解壓,但是后來(lái)發(fā)現(xiàn)環(huán)境變量配置有問(wèn)題,執(zhí)行自動(dòng)腳本后并沒(méi)有解壓文件的存在。后來(lái)改用unzip的方式解壓。這里的環(huán)境變量配置還需要改善
?
?上述命令的理解:
- 判斷用戶(hù)目錄下是否有文件game.szfesc存在,是后續(xù)程序執(zhí)行的開(kāi)始!
- service和web的執(zhí)行過(guò)程一樣,這里以service為例說(shuō)明:
- 如果opss_service.jar文件存在,首先關(guān)閉service工程。然后休眠15s
- 將之前的工程備份為service/opssservice_${thisTime},用于程序出錯(cuò)時(shí)候的恢復(fù)
- 創(chuàng)建程序的解壓目錄mkdir service/opssservice,然后將jar包移動(dòng)到解壓目錄,進(jìn)行jar文件的解壓
- 解壓完成后刪除jar文件。用服務(wù)器上的配置文件application.properties,替換上傳時(shí)候程序中的配置文件!(這個(gè)在多環(huán)境的項(xiàng)目部署中很有用)
- 啟動(dòng)tomcat,并打印程序結(jié)束語(yǔ)。
2. 在linux上使用crontab配置定時(shí)任務(wù)。對(duì)于改命令的使用,可以在本博客中進(jìn)行搜索。
這樣的話(huà),每分鐘就會(huì)自動(dòng)執(zhí)行一次自動(dòng)部署命令,剩下的就是查看日志,運(yùn)行程序了。
未完待續(xù)!
?
總結(jié)
以上是生活随笔為你收集整理的Linux项目自动部署的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【BZOJ1146】【CTSC2008】
- 下一篇: fiddler无法获取Android端h