我们的WEB是用的DUBBO,controller层rpc调用的service的方法,controller的部署方法跟Service不太一样,因为controller属于暴露的接口,需要关联nginx
我们的WEB是用的DUBBO,controller层rpc调用的service的方法,controller的部署方法跟Service不太一样,因为controller属于暴露的接口,需要关联nginx。Service层做了业务拆分所以有DUBBO启动,也有tomcat启动,但是基本套路都是一样的:先让tomcat或者dubbo编译成class文件,在用rsync 同步到各个服务器就好了,最后ping一下index.jsp 反没返回200,完活。
结构目录:
先上个controller层的:
#!/bin/bash### init configexport LANG=en_US.UTF-8export LC_ALL=en_US.UTF-8source /etc/profile#!/bin/bash#各种路径按照自己路径改一下就行PRE_DIR=`dirname $0`PROJECT_DIR=/data/web/hf_app/build.clubPROJECT_NAME=tigerPROJECT_CLUB=tiger/tiger-club/tiger-club-providerDOC_ROOT=$PROJECT_DIR/ROOTWAR_FILE=$PROJECT_DIR/$PROJECT_CLUB/target/tiger-club.warTOMCAT=/usr/local/app/club-tomcatDATE=`date "+%Y%m%d%H%M%S"`STR_DATE=`date "+%s"`backup="backup"#backuptar -zcvf ROOT."$DATE".tar.gz $PROJECT_DIR/ROOTmv ROOT.$DATE.tar.gz $backup/#deployechoecho Deploy:echocd $PROJECT_DIR/$PROJECT_NAMEgit clean -d -fxgit checkout mastergit pullif [ ! -z $1 ]then git branch -D test git fetch ssh://xxxx(git地址) /tiger refs/changes/$1 && git checkout FETCH_HEAD git checkout -b testelse git checkout online_161216 git pull git branch -D test git checkout -b testfimvn clean package -DskipTests -U rm -rf $PROJECT_DIR/ROOTmkdir -p $PROJECT_DIR/ROOTunzip -q $WAR_FILE -d $PROJECT_DIR/ROOTcp $PROJECT_DIR/config-toolkit.properties $DOC_ROOT/WEB-INF/classes/properties#这里主要是防止配置文件更改带来的麻烦,先在目录下做一个线上环境的配置文件,这样无论提交的是什么都会覆盖掉,保证一个安全#find $PROJECT_DIR/ROOT -name "*.vm" |xargs sed -i 's/szone/'$STR_DATE'/g'#restart tomcat#echoecho Restart tomcat:ps aux |grep -v grep |grep $TOMCAT|awk '{print $2}'|xargs kill -9rm -rf $TOMCAT/work/Catalina# sleep 10secho "Waiting shutdown Tomcat, Sleep 10s..."sleep 10secho "Start to startup Tomcat..."$TOMCAT/bin/startup.sh
这样controller 就变成了class文件,再去同步到各个机器上:
#!/bin/bashPROJECT="wolfapi"DST_SERVER="0.0.0.1,0.0.0.2"(同步IP)SRC_SERVER="0.0.0.1"(本机IP)NGX_UPSTREAM_CONF="/usr/local/app/nginx/conf/vhosts/upstream.conf"NGX_UPSTREAM="api"DST_PORT="8071"DEPLOY_PATH="/data/web/hf_app/build.wolfapi/ROOT/"TARGET_CONFIG_PATH="/data/web/hf_app/build.wolfapi/ROOT/WEB-INF/classes/"SOURCE_CONFIG_PATH="hefan/build.wolfapi/sync/dubbo.properties"RSYNC_PATH="hefan/build.wolfapi/ROOT/"TOMCAT="/usr/local/app/tomcat/"RETURN_CODE="200"PORT="1922"nginx(){line_num=`ssh -t -p $PORT $2 "cat $NGX_UPSTREAM_CONF -n |sed -n '/$NGX_UPSTREAM/,/}/ p'|grep 127.0.0.1"|awk '{print $1}'`case $1 in up) server="server 127.0.0.1:$DST_PORT;" ssh -t -p $PORT $2 "sed '$line_num s/.*/$server/' $NGX_UPSTREAM_CONF -i" ;; down) server="server 127.0.0.1:$DST_PORT down;" ssh -t -p $PORT $2 "sed '$line_num s/.*/$server/' $NGX_UPSTREAM_CONF -i" ;;esacssh -t -p $PORT $2 "/usr/local/app/nginx/sbin/nginx -s reload "}### sync file to server### $1 for dst server ip addrsync(){ ssh -t -p $PORT $1 "rsync -avP --delete $SRC_SERVER::$RSYNC_PATH $DEPLOY_PATH; / rsync -avP --delete $SRC_SERVER::$SOURCE_CONFIG_PATH $TARGET_CONFIG_PATH"}### restart tomcat### $1 for dst server ip addrrestart(){ ssh -t -p $PORT $1 "ps aux |grep -v grep |grep $TOMCAT|awk '{print /$2}'|xargs kill -9 " ssh -p $PORT $1 "source /etc/profile ; $TOMCAT/bin/startup.sh"}### success checkcheck(){ STATUS=1 for i in `seq 1 60`;do code=`curl -I http://$1:$DST_PORT/index.jsp --connect-timeout 2|grep HTTP|awk '{print $2}' 2>/dev/null` if [ $code -eq $RETURN_CODE ];then STATUS=0 break else echo "$1 tomcat has not started , please wait............" sleep 1 fi done}check_compile_status(){ if [ "`ls -A $DEPLOY_PATH`" = "" ]; then echo "$DEPLOY_PATH is indeed empty" exit 1 else echo "$DEPLOY_PATH is not empty, go on..." fi}### script startfor IP in $DST_SERVER;do check_compile_status nginx down $IP sync $IP restart $IP check $IP if [ $STATUS -eq 0 ];then nginx up $IP else echo "fuck u" #echo $1 $IP sync error |mail -s "Sync error" [email protected] -- -f [email protected] -F "" fidone
同步的时候多了一个关于nginx 的配置,service层一个原理,只是不用陪Nginx,如果使用dubbo启动的话就是maven命令去编译成class文件,只不过不能去验证起没启动.
同样的结构:
service层:
#!/bin/bash### init configexport LANG=en_US.UTF-8export LC_ALL=en_US.UTF-8source /etc/profile#!/bin/bashPRE_DIR=`dirname $0`PROJECT_DIR=/data/web/hf_app/build.clubPROJECT_NAME=tigerPROJECT_CLUB=tiger/tiger-club/tiger-club-providerDOC_ROOT=$PROJECT_DIR/ROOTWAR_FILE=$PROJECT_DIR/$PROJECT_CLUB/target/tiger-club.war#TOMCAT=/usr/local/app/club-tomcatDATE=`date "+%Y%m%d%H%M%S"`STR_DATE=`date "+%s"`backup="backup"#backuptar -zcvf ROOT."$DATE".tar.gz $PROJECT_DIR/ROOTmv ROOT.$DATE.tar.gz $backup/#deployechoecho Deploy:echocd $PROJECT_DIR/$PROJECT_NAMEgit clean -d -fxgit checkout mastergit pullif [ ! -z $1 ]then git branch -D test git fetch ssh://xxx.xxx refs/changes/$1 && git checkout FETCH_HEAD git checkout -b testelse git checkout qa git pull git branch -D test git checkout -b testfimvn clean package -DskipTests -U rm -rf $PROJECT_DIR/ROOTmkdir -p $PROJECT_DIR/ROOTunzip -q $WAR_FILE -d $PROJECT_DIR/ROOTcp $PROJECT_DIR/config-toolkit.properties $DOC_ROOT/WEB-INF/classes/properties#find $PROJECT_DIR/ROOT -name "*.vm" |xargs sed -i 's/szone/'$STR_DATE'/g'#restart tomcat#echoecho Restart tomcat:ps aux |grep -v grep |grep $TOMCAT|awk '{print $2}'|xargs kill -9#rm -rf $TOMCAT/work/Catalina# sleep 10secho "Waiting shutdown Tomcat, Sleep 10s..."sleep 10secho "Start to startup Tomcat..."$TOMCAT/bin/startup.sh
service同步:
#!/bin/bashPROJECT="club"DST_SERVER="10.45.141.129"SRC_SERVER="10.51.120.132"DST_PORT="8055"DEPLOY_PATH="/data/web/hf_app/build.club/ROOT/"TARGET_CONFIG_PATH="/data/web/hf_app/build.club/ROOT/WEB-INF/classes/"SOURCE_CONFIG_PATH="hefan/build.club/sync/config-toolkit.properties"RSYNC_PATH="hefan/build.club/ROOT/"TOMCAT="/usr/local/app/tomcat/"RETURN_CODE="200"PORT="1922"### sync file to server### $1 for dst server ip addrsync(){ ssh -t -p $PORT $1 "rsync -avP --delete $SRC_SERVER::$RSYNC_PATH $DEPLOY_PATH; / rsync -avP --delete $SRC_SERVER::$SOURCE_CONFIG_PATH $TARGET_CONFIG_PATH"}### restart tomcat### $1 for dst server ip addrrestart(){ ssh -t -p $PORT $1 "ps aux |grep -v grep |grep $TOMCAT|awk '{print /$2}'|xargs kill -9 " ssh -p $PORT $1 "source /etc/profile ; $TOMCAT/bin/startup.sh"}### success checkcheck(){ STATUS=1 for i in `seq 1 60`;do code=`curl -I http://$1:$DST_PORT/index.jsp --connect-timeout 2|grep HTTP|awk '{print $2}' 2>/dev/null` if [ $code -eq $RETURN_CODE ];then STATUS=0 break else echo "$1 tomcat has not started , please wait............" sleep 1 fi done}check_compile_status(){ if [ "`ls -A $DEPLOY_PATH`" = "" ]; then echo "$DEPLOY_PATH is indeed empty" exit 1 else echo "$DEPLOY_PATH is not empty, go on..." fi}### script startfor IP in $DST_SERVER;do check_compile_status sync $IP restart $IP check $IP if [ $STATUS -eq 0 ];then echo "$IP $PROJECT gkd_application started....." else echo "fuck u" fidone
git 地址:https://git.oschina.net/abstergo/shell-linux