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