部署描述:
1.jenkins 通過maven編譯成jar 項目包
2.shell 腳本從jenkins機器發布到:目標主機
注釋:次腳本沒有寫jar包的備份,有時間加上
腳本內容:
#!/bin/bash #線上服務器列表 HOST_LIST=${@:2} #項目名 REMOTE_PROJECT=$1 #遠程JAR包存放目錄 REMOTE_JARDIR=/apps/project/${REMOTE_PROJECT} #遠程備份目錄 REMOTE_BACKUP="/apps/${REMOTE_PROJECT}/backup" #遠程執行用戶 REMOTEUSER='co_dev' # 逐個部署每台服務器的微服務 for REMOTE in `echo $HOST_LIST` do # 遠程包更新啟動 PACKAGE=`find ./ -name ${REMOTE_PROJECT}.jar` scp $PACKAGE ${REMOTEUSER}@${REMOTE}:$REMOTE_JARDIR/${REMOTE_PROJECT}.jar if [ $? -eq 0 ];then # JAR shutdown JAR_pid=`ssh ${REMOTEUSER}@${REMOTE} ps -ef | grep "${REMOTE_PROJECT}.jar" | grep -v "grep"|awk '{print $2}'` if [ -n $JAR_pid ];then ssh ${REMOTEUSER}@${REMOTE} kill -9 $JAR_pid else echo "進程更不存在可以繼續部署" fi else echo "${REMOTE_PROJECT}.jar No such file or directory" exit 1 fi # 啟動jar 服務並檢查端口 sleep 2 echo ".......................................開始啟動$REMOTE_PROJECT 服務" ssh ${REMOTEUSER}@${REMOTE} "nohup /apps/sofe/jdk1.8.0_131/bin/java -jar -Xms2048M -Xmx4096M -XX:+UseConcMarkSweepGC -XX:-PrintGCDetails -Dspring.profiles.active=prod1 ${REMOTE_JARDIR}/${REMOTE_PROJECT}.jar >>/apps/project/${REMOTE_PROJECT}/${REMOTE_PROJECT}.log 2>&1 &" sleep 10 java_pid=`ssh $REMOTEUSER@$REMOTE ps -ef | grep "$REMOTE_PROJECT" | egrep -v "grep|log"|wc -l` if [[ $java_pid -ge 1 ]];then echo "${REMOTE_PROJECT} startup is successful" else echo "${REMOTE_PROJECT} startup is filed" exit 3 fi echo "$REMOTE 服務器 ${REMOTE_PROJECT} 項目部署完畢...................................." echo -e "\n\n\n" done