服务器部署shell脚本

我们的WEB是用的DUBBO,controller层rpc调用的service的方法,controller的部署方法跟Service不太一样,因为controller属于暴露的接口,需要关联nginx。Service层做了业务拆分所以有DUBBO启动,也有tomcat启动,但是基本套路都是一样的:先让tomcat或者dubbo编译成class文件,在用rsync 同步到各个服务器就好了,最后ping一下index.jsp 反没返回200,完活。

110758_pBPV_2421441.png

结构目录:

103107_RHSV_2421441.png

先上个controller层的:


#!/bin/bash


### init config
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
source /etc/profile


#!/bin/bash

#各种路径按照自己路径改一下就行
PRE_DIR=`dirname $0`
PROJECT_DIR=/data/web/hf_app/build.club
PROJECT_NAME=tiger
PROJECT_CLUB=tiger/tiger-club/tiger-club-provider
DOC_ROOT=$PROJECT_DIR/ROOT
WAR_FILE=$PROJECT_DIR/$PROJECT_CLUB/target/tiger-club.war
TOMCAT=/usr/local/app/club-tomcat
DATE=`date "+%Y%m%d%H%M%S"`
STR_DATE=`date "+%s"`
backup="backup"

#backup
tar -zcvf ROOT."$DATE".tar.gz $PROJECT_DIR/ROOT
mv ROOT.$DATE.tar.gz $backup/
#deploy
echo
echo Deploy:
echo

cd $PROJECT_DIR/$PROJECT_NAME
git clean -d -fx
git checkout master
git pull
if [ ! -z $1 ]
then
    git branch -D test
    git fetch ssh://xxxx(git地址)   /tiger refs/changes/$1 && git checkout FETCH_HEAD
    git checkout -b test
else
    git  checkout online_161216
    git pull
    git branch -D test
    git checkout -b test
fi
mvn clean package -DskipTests -U 
rm -rf $PROJECT_DIR/ROOT
mkdir -p  $PROJECT_DIR/ROOT
unzip -q $WAR_FILE -d $PROJECT_DIR/ROOT



cp $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
#echo
echo Restart tomcat:
ps aux |grep -v grep |grep $TOMCAT|awk '{print $2}'|xargs kill -9
rm -rf $TOMCAT/work/Catalina
# sleep 10s
echo "Waiting shutdown Tomcat, Sleep 10s..."
sleep 10s
echo "Start to startup Tomcat..."
$TOMCAT/bin/startup.sh

这样controller 就变成了class文件,再去同步到各个机器上:

#!/bin/bash

PROJECT="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"
        ;;
esac
ssh -t -p $PORT $2 "/usr/local/app/nginx/sbin/nginx -s reload "
}

### sync file to server
### $1 for dst server ip addr
sync(){
	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 addr
restart(){
	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 check
check(){
        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 start


for 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" ninglijun@guolele.com  -- -f ninglijun@guolele.com -F ""
        fi
done

同步的时候多了一个关于nginx 的配置,service层一个原理,只是不用陪Nginx,如果使用dubbo启动的话就是maven命令去编译成class文件,只不过不能去验证起没启动.

同样的结构:

112008_Z250_2421441.png

service层:


#!/bin/bash


### init config
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
source /etc/profile


#!/bin/bash
PRE_DIR=`dirname $0`
PROJECT_DIR=/data/web/hf_app/build.club
PROJECT_NAME=tiger
PROJECT_CLUB=tiger/tiger-club/tiger-club-provider
DOC_ROOT=$PROJECT_DIR/ROOT
WAR_FILE=$PROJECT_DIR/$PROJECT_CLUB/target/tiger-club.war
#TOMCAT=/usr/local/app/club-tomcat
DATE=`date "+%Y%m%d%H%M%S"`
STR_DATE=`date "+%s"`
backup="backup"

#backup
tar -zcvf ROOT."$DATE".tar.gz $PROJECT_DIR/ROOT
mv ROOT.$DATE.tar.gz $backup/
#deploy
echo
echo Deploy:
echo

cd $PROJECT_DIR/$PROJECT_NAME
git clean -d -fx
git checkout master
git pull
if [ ! -z $1 ]
then
    git branch -D test
    git fetch ssh://xxx.xxx refs/changes/$1 && git checkout FETCH_HEAD
    git checkout -b test
else
    git  checkout qa
    git pull
    git branch -D test
    git checkout -b test
fi
mvn clean package -DskipTests -U 
rm -rf $PROJECT_DIR/ROOT
mkdir -p  $PROJECT_DIR/ROOT
unzip -q $WAR_FILE -d $PROJECT_DIR/ROOT
cp $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
#echo
echo Restart tomcat:
ps aux |grep -v grep |grep $TOMCAT|awk '{print $2}'|xargs kill -9
#rm -rf $TOMCAT/work/Catalina
# sleep 10s
echo "Waiting shutdown Tomcat, Sleep 10s..."
sleep 10s
echo "Start to startup Tomcat..."
$TOMCAT/bin/startup.sh

service同步:

#!/bin/bash

PROJECT="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 addr
sync(){
	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 addr
restart(){
	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 check
check(){
        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 start


for 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"
        fi
done

git 地址:https://git.oschina.net/abstergo/shell-linux

转载于:https://my.oschina.net/u/2421441/blog/826996

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值