關於自動釋出專案的經歷總結
阿新 • • 發佈:2018-12-24
專案釋出
見到過的打包釋出過程
- 目前待過幾家公司主要的釋出流程是通過jenkins實現自己打包,然後自動處理。也有本地打包上傳到tomcat下的處理(見過感覺最low的方式)。還有就是上傳相應的專案(因為不能直接連線外網down程式碼打包),然後使用自動化部署指令碼執行、啟動專案。
釋出本質
- 不管是jenkins打包釋出的方式,還是直接上傳使用shell指令碼釋出,其實本質應當是一樣的。jenkins的打包步驟只是換成了jenkins自動打包而已。
- 之前自己也部署過jenkins做自動化部署,在打包完成後jenkins可以執行指令碼,我一般使用的是執行shell指令碼。通過指令碼去啟動相關的web服務,快取服務等。
- 思考:其實發布的整個過程看來,都是在做一個流程。拉取程式碼->打包->將包放到指定位置->啟動web及其相關服務(在這之前可能也會清空日誌等操作)。在這整個流程中有些步驟只是通過工具做了處理而已,其實也算是在執行shell指令碼做處理服務等。
上次釋出中的指令碼
- 以下為專案中使用到的釋出指令碼(註釋基本還是看得懂)
#!/bin/sh export PROJECT_HOME=/home/admin/projects/zongzhi-center #用於建立附件的軟鏈的源目錄 export LINK_SOURCE_HOME=/home/admin/share #專案字首 export PROJECT_PRE=center #用於mvn打包的-P引數 export PFOFILE_ID=xxxx-prod export APP_NAME=$PROJECT_PRE-webback export WEB_APP_NAME=web export SH_NAME=webback-$PFOFILE_ID.sh export TOMCAT_NAME=tomcat8_qianwei export TOMCAT_HOME=/home/admin/server/$TOMCAT_NAME export TOMCAT_PORT=8080 export MEMCACHED_ADDR=/usr/local/bin/memcached export MEMCACHED_PORT=11219 export REDIS_ADDR=/usr/local/bin/redis-server export REDIS_PORT=6379 export REDIS_CONF=/etc/redis/redis_6379.conf export ZK_SERVER_ADDR=/opt/zookeeper-3.4.13/bin/zkServer.sh echo "停止$TOMCAT_NAME服務..." $TOMCAT_HOME/bin/shutdown.sh ##殺掉tomcat程序 ps -ef|grep $TOMCAT_NAME | awk -F " " '{print $2}' | while read line do kill $line sleep 3 kill -9 $line done echo "停止$TOMCAT_NAME服務成功..." echo "停止後臺$APP_NAME服務..." $PROJECT_HOME/$APP_NAME/$SH_NAME stop echo "停止後臺$APP_NAME服務成功..." echo "重啟memcached服務" ps -ef|grep memcached | grep $MEMCACHED_PORT | awk -F " " '{print $2}'|xargs kill -9 $MEMCACHED_ADDR -d -m 256 -u admin -p $MEMCACHED_PORT -c 1024 echo "重啟memcached服務成功" echo "重啟redis服務" ps -ef|grep redis | grep $REDIS_PORT | awk -F " " '{print $2}'|xargs kill -9 $REDIS_ADDR $REDIS_CONF echo "重啟redis服務成功" echo "啟動zookeeper..." $ZK_SERVER_ADDR restart echo "啟動zookeeper成功..." echo "更新程式碼..." cd $PROJECT_HOME svn up echo "更新程式碼完成..." echo "清空日誌檔案" rm -rf $TOMCAT_HOME/logs/* echo "清空日誌檔案完成" echo "建立uploadFile資料夾及軟鏈..." #mkdir $LINK_SOURCE_HOME/$PROJECT_PRE"_"uploadFile/uploadFile ln -s $LINK_SOURCE_HOME/$PROJECT_PRE"_"uploadFile/uploadFile $PROJECT_HOME/$WEB_APP_NAME/target/$WEB_APP_NAME #ln -s /home/admin/share/yibin_uploadFile/uploadFile /home/admin/project/zongzhi-center/center-web/target/center-web echo "建立uploadFile資料夾及軟鏈完成..." echo "啟動$APP_NAME服務..." $PROJECT_HOME/$APP_NAME/$SH_NAME start $TOMCAT_HOME/bin/startup.sh ##監聽埠 isff=1 while [ $isff != 0 ] do ##睡眠2秒 sleep 2 rs=`netstat -an | grep $TOMCAT_PORT` if [ -n "$rs" ];then echo "啟動$APP_NAME服務成功..." isff=0 else echo "啟動$APP_NAME服務中..." fi done
- 在以上指令碼中可以看出,主要是指定個個軟體(服務)的目錄進行啟動,通過指令碼做到人為的手動處理
- 啟動後還是注意檢視系統日誌確認,可能出現服務啟動起來了,但是系統是錯誤情況(跳過的坑),檢視日誌儘量看全看多一點,tail -2000f xxxx 多顯示幾行,只看最新的幾行可能沒打印出來,導致以為沒問題
- 注意定義變數實現指令碼可維護,不要將可變的東西(如地址)寫到腳本里,不好修改(萬一環境變化才好處理)和維護。
總結
- 學習掌握shell指令碼可以更好做出自動化釋出指令碼,能一次性做好的堅決不手動處理
- 釋出後一定要看看啟動日誌