rebar3 服务器
This commit is contained in:
@@ -0,0 +1,348 @@
|
||||
#! /bin/bash
|
||||
|
||||
export PATH=$PATH:/usr/local/bin
|
||||
#export LANG=zh_CN.UTF-8
|
||||
#英文utf8编码格式
|
||||
export LANG=en_US.UTF-8
|
||||
|
||||
ROOT=`cd $(dirname $0);pwd`
|
||||
if [ -d ${ROOT} ]; then
|
||||
cd ${ROOT}
|
||||
fi
|
||||
|
||||
ARGS=""
|
||||
|
||||
## 项目组自定义路径
|
||||
# ====================================================================================
|
||||
|
||||
# 服务器svn根目录
|
||||
SVN_BASE_URL=http://yfzx.4399svn.com/svn/dhmmc
|
||||
# 发版根目录 运维的目录规范 /data/xxx/server
|
||||
PUB_ROOT=/data/dhmmc/server
|
||||
# 发版脚本 运维的规范 xxxpub
|
||||
PUB_CMD=dhmmcpub
|
||||
|
||||
# svn账号密码
|
||||
USER=client_publisher
|
||||
PASSWORD=`cat /home/admin/svn_pub_pass`
|
||||
|
||||
# 代码checkout的临时目录,编译用
|
||||
TMP_SOURCE=/data/tmp_server/dhmmc
|
||||
|
||||
# 内网部署路径
|
||||
SERVER_DIR=/data/server/dhmmc
|
||||
|
||||
# 内网主干登录服目录(内网重启和热更时指定的登录服)
|
||||
LOGIN_SERVER=login_server
|
||||
|
||||
# 内网主干游戏服目录(内网重启和热更时指定的游戏服)
|
||||
GAME_SERVER=game_server
|
||||
|
||||
# 内网发版指定的机器人压测脚本
|
||||
CLIENT_SERVER=client_server
|
||||
|
||||
# ====================================================================================
|
||||
# 分支版本号,默认是用主干的代码
|
||||
TAG=trunk
|
||||
VER=dev
|
||||
PLAT=android_cn
|
||||
PUSH_LANG=CN
|
||||
REBAR=rebar3
|
||||
|
||||
error() {
|
||||
echo -e "[错误] $(date '+%Y-%m-%d %H:%M:%S') $@"
|
||||
}
|
||||
|
||||
# 打印警告
|
||||
warn() {
|
||||
echo -e "[警告] $(date '+%Y-%m-%d %H:%M:%S') $@"
|
||||
}
|
||||
|
||||
# 打印信息
|
||||
opt() {
|
||||
echo -e "[操作] $(date '+%Y-%m-%d %H:%M:%S') $@"
|
||||
}
|
||||
|
||||
cmd() {
|
||||
echo -e "[指令] $(date '+%Y-%m-%d %H:%M:%S') $@"
|
||||
}
|
||||
|
||||
exit1() {
|
||||
lock_release
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
# 检查锁
|
||||
lock_check(){
|
||||
local task=$1
|
||||
lock=/tmp/server_shell_pub.lock
|
||||
if [ -f $lock ]; then
|
||||
error "正在执行其他任务..., 如确认没有其他任务在执行,请删除文件${lock}"
|
||||
exit 1
|
||||
fi
|
||||
touch $lock # 加锁
|
||||
echo $task > $lock
|
||||
}
|
||||
|
||||
# 解锁
|
||||
lock_release(){
|
||||
local task=$1
|
||||
lock=/tmp/server_shell_pub.lock
|
||||
rm -f $lock
|
||||
}
|
||||
|
||||
|
||||
|
||||
# 使用说明
|
||||
Usage ()
|
||||
{
|
||||
echo "说明:"
|
||||
echo "当前路径:${ROOT}"
|
||||
echo "用法:"
|
||||
echo "动作 [选项]"
|
||||
echo "动作:"
|
||||
echo " pub_rel 发布全量包"
|
||||
echo " pub_up 发布升级包"
|
||||
echo ""
|
||||
echo "选项:"
|
||||
echo " -h, --help 显示本信息"
|
||||
echo " -v, --ver dev|beta|stable 推送的版本"
|
||||
echo " -t, --tag 游戏分支版本号"
|
||||
echo " -p, --plat android_cn|ios_cn|mix_cn 推送的平台"
|
||||
echo " -l, --lang CN | TW 推送的语言"
|
||||
echo " -s, --server game_server|login_server 推送的服务器类型"
|
||||
echo " -si, --server_id 重启/更新 的内网服务器id"
|
||||
echo " -m, --modules 热更的模块列表,不传或传空表示热更所有变更的模块"
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
##从svn下载对应的代码,并设置当前版本号
|
||||
SvnUpdate ()
|
||||
{
|
||||
# 使用中文utf8编码,避免中文名文件等导致admin执行命令终止
|
||||
export LANG=zh_CN.UTF-8
|
||||
|
||||
if [ -d ${TMP_SOURCE} ]; then
|
||||
opt "${TMP_SOURCE} 目录已存在,svn update"
|
||||
cmd "========= svn up --non-interactive --force --accept tc ${TMP_SOURCE} --username ${USER} ========="
|
||||
svn up --non-interactive --force --accept tc ${TMP_SOURCE} --username ${USER} --password ${PASSWORD}
|
||||
else
|
||||
opt "${TMP_SOURCE} 目录不存在,创建并svn checkout"
|
||||
cmd "========= svn co --non-interactive ${SVN_BASE_URL} ${TMP_SOURCE} --username ${USER} ========="
|
||||
mkdir -p ${TMP_SOURCE}
|
||||
svn co --non-interactive ${SVN_BASE_URL} ${TMP_SOURCE} --username ${USER} --password ${PASSWORD}
|
||||
fi
|
||||
# svn更新后使用英文utf8编码,
|
||||
# svn info取Last Changed Rev需要用到英文编码 / rebar3插件rebar3_vsn_plugin改每个app的版本也是用svn info取Last Changed Rev
|
||||
# 如果用中文utf8编码需要改这些用到svn取值的地方
|
||||
export LANG=en_US.UTF-8
|
||||
|
||||
cd ${ROOT}
|
||||
}
|
||||
|
||||
## 生成全量包
|
||||
Release ()
|
||||
{
|
||||
if [ ! -d ${PUB_ROOT} ]; then
|
||||
mkdir -p ${PUB_ROOT}
|
||||
fi
|
||||
|
||||
cd ${TMP_SOURCE} || exit1
|
||||
|
||||
REL_VERSION=`svn info ${TMP_SOURCE} | grep 'Last Changed Rev: ' | cut -d' ' -f4`
|
||||
|
||||
# 复制配置表,修改编译选项
|
||||
if [ "${VER}" != "dev" ]; then
|
||||
cmd "========= sed -i \"s/% {d, 'EXTERNAL'}/{d, 'EXTERNAL'}/g\" ${TMP_SOURCE}/rebar.config ========="
|
||||
sed -i "s/% {d, 'EXTERNAL'}/{d, 'EXTERNAL'}/g" ${TMP_SOURCE}/rebar.config
|
||||
fi
|
||||
|
||||
cmd "========= ${REBAR} as ${SERVER_TYPE} release ========="
|
||||
${REBAR} as ${SERVER_TYPE} release || exit1
|
||||
|
||||
if [ "${VER}" != "dev" ]; then
|
||||
# 这里拷贝只是为了确认是否修改成功
|
||||
cmd "========= rm -rf ${TMP_SOURCE}/rebar.config.release ========="
|
||||
rm -rf ${TMP_SOURCE}/rebar.config.release
|
||||
cmd "========= cp ${TMP_SOURCE}/rebar.config ${TMP_SOURCE}/rebar.config.release ========="
|
||||
cp ${TMP_SOURCE}/rebar.config ${TMP_SOURCE}/rebar.config.release
|
||||
cmd "========= sed -i \"s/{d, 'EXTERNAL'}/% {d, 'EXTERNAL'}/g\" ${TMP_SOURCE}/rebar.config ========="
|
||||
sed -i "s/{d, 'EXTERNAL'}/% {d, 'EXTERNAL'}/g" ${TMP_SOURCE}/rebar.config
|
||||
fi
|
||||
|
||||
# 删除旧代码
|
||||
cmd "========= rm -rf ${PUB_ROOT} ========="
|
||||
rm -rf ${PUB_ROOT}
|
||||
|
||||
PRJ=${TMP_SOURCE}/_build/${SERVER_TYPE}/rel/${SERVER_TYPE}
|
||||
# 记录svn版本号
|
||||
cmd "========= echo ${REL_VERSION} > ${PRJ}/releases/svn_version ========="
|
||||
echo ${REL_VERSION} > ${PRJ}/releases/svn_version
|
||||
# 记录游戏服的版本
|
||||
cmd "========= echo ${TAG} > ${PRJ}/version.txt ========="
|
||||
echo ${TAG} > ${PRJ}/version.txt
|
||||
# 拷贝console.sh脚本到bin目录
|
||||
cmd "========= cp shell/console.sh ${PRJ}/bin/console.sh ========="
|
||||
cp shell/console.sh ${PRJ}/bin/console.sh
|
||||
sed -i "s/game_server/${SERVER_TYPE}/g" "${PRJ}/bin/console.sh"
|
||||
if [ "${SERVER_TYPE}" = "${CLIENT_SERVER}" ]; then
|
||||
sed -i "s/remote_console/console/g" "${PRJ}/bin/console.sh"
|
||||
fi
|
||||
# 拷贝新代码到发版目录
|
||||
cmd "========= rsync --exclude=".svn" --delete-before -a -H -v ${PRJ}/ ${PUB_ROOT}/ ========="
|
||||
rsync --exclude=".svn" --delete-before -a -H -v ${PRJ}/ ${PUB_ROOT}/ || exit1
|
||||
|
||||
cd ${ROOT}
|
||||
}
|
||||
|
||||
## 生成热更包
|
||||
Update ()
|
||||
{
|
||||
if [ ! -d ${PUB_ROOT} ]; then
|
||||
mkdir -p ${PUB_ROOT}
|
||||
fi
|
||||
|
||||
cd ${TMP_SOURCE} || exit1
|
||||
|
||||
REL_VERSION=`svn info ${TMP_SOURCE} | grep 'Last Changed Rev: ' | cut -d' ' -f4`
|
||||
|
||||
# 复制配置表,修改编译选项
|
||||
if [ "${VER}" != "dev" ]; then
|
||||
cmd "========= sed -i \"s/% {d, 'EXTERNAL'}/{d, 'EXTERNAL'}/g\" ${TMP_SOURCE}/rebar.config ========="
|
||||
sed -i "s/% {d, 'EXTERNAL'}/{d, 'EXTERNAL'}/g" ${TMP_SOURCE}/rebar.config
|
||||
fi
|
||||
|
||||
cmd "========= ${REBAR} as ${SERVER_TYPE} release ========="
|
||||
${REBAR} as ${SERVER_TYPE} release || exit1
|
||||
|
||||
if [ "${VER}" != "dev" ]; then
|
||||
# 这里拷贝只是为了确认是否修改成功
|
||||
cmd "========= rm -rf ${TMP_SOURCE}/rebar.config.release ========="
|
||||
rm -rf ${TMP_SOURCE}/rebar.config.release
|
||||
cmd "========= cp ${TMP_SOURCE}/rebar.config ${TMP_SOURCE}/rebar.config.release ========="
|
||||
cp ${TMP_SOURCE}/rebar.config ${TMP_SOURCE}/rebar.config.release
|
||||
cmd "========= sed -i \"s/{d, 'EXTERNAL'}/% {d, 'EXTERNAL'}/g\" ${TMP_SOURCE}/rebar.config ========="
|
||||
sed -i "s/{d, 'EXTERNAL'}/% {d, 'EXTERNAL'}/g" ${TMP_SOURCE}/rebar.config
|
||||
fi
|
||||
|
||||
# 同步热更的代码和sql语句
|
||||
PRJ=${TMP_SOURCE}/_build/${SERVER_TYPE}/rel/${SERVER_TYPE}
|
||||
cmd "========= rsync --exclude=".svn" --delete-before -a -H -v ${PRJ}/lib/ ${PUB_ROOT}/lib/ ========="
|
||||
rsync --exclude=".svn" --delete-before -a -H -v ${PRJ}/lib/ ${PUB_ROOT}/lib/ || exit1
|
||||
|
||||
if [ -d ${PRJ}/sql ]; then
|
||||
cmd "========= rsync --exclude=".svn" --delete-before -a -H -v ${PRJ}/sql/ ${PUB_ROOT}/sql/ ========="
|
||||
rsync --exclude=".svn" --delete-before -a -H -v ${PRJ}/sql/ ${PUB_ROOT}/sql/ || exit1
|
||||
fi
|
||||
|
||||
# 记录svn版本号
|
||||
cmd "========= echo ${REL_VERSION} > ${PRJ}/releases/svn_version ========="
|
||||
echo ${REL_VERSION} > ${PRJ}/releases/svn_version
|
||||
|
||||
cd ${ROOT}
|
||||
}
|
||||
|
||||
PubUpdate ()
|
||||
{
|
||||
SvnUpdate
|
||||
|
||||
Update
|
||||
|
||||
cmd "========= sh ${PUB_CMD} server ${PUSH_LANG} ${VER} ${PLAT} ========="
|
||||
sh ${PUB_CMD} server ${PUSH_LANG} ${VER} ${PLAT}
|
||||
|
||||
cd ${ROOT}
|
||||
}
|
||||
|
||||
# 发布代码
|
||||
PubRelease()
|
||||
{
|
||||
opt "推送${VER}版本${SERVER_TYPE}全量包到外网"
|
||||
|
||||
SvnUpdate
|
||||
|
||||
cd ${TMP_SOURCE} || exit1
|
||||
|
||||
# 删除beam文件重新编译
|
||||
cmd "========= ${REBAR} as ${SERVER_TYPE} clean ========="
|
||||
${REBAR} as ${SERVER_TYPE} clean || exit1
|
||||
|
||||
cd ${ROOT}
|
||||
|
||||
Release
|
||||
|
||||
cmd "========= sh ${PUB_CMD} server ${PUSH_LANG} ${VER} ${PLAT} ========="
|
||||
sh ${PUB_CMD} server ${PUSH_LANG} ${VER} ${PLAT}
|
||||
|
||||
cd ${ROOT}
|
||||
}
|
||||
|
||||
IsRun(){
|
||||
RUN_PROC_CNT=`ps -ef | grep server_pub.sh | grep -v grep | grep -v vi | wc -l`
|
||||
if [ ${RUN_PROC_CNT} -gt 2 ]; then
|
||||
opt "run proc cnt = ${RUN_PROC_CNT}"
|
||||
error "其他人正在运行中"
|
||||
exit1
|
||||
fi
|
||||
}
|
||||
|
||||
START_TIME=$(date '+%Y-%m-%d %H:%M:%S')
|
||||
|
||||
lock_check
|
||||
|
||||
# parse command line parameters
|
||||
while [ $# -ne 0 ] ; do
|
||||
PARAM=$1
|
||||
shift
|
||||
case $PARAM in
|
||||
--) break ;;
|
||||
--help|-h) Usage; exit 0 ;;
|
||||
--server|-s) SERVER_TYPE=$1; shift ;;
|
||||
--ver|-v) VER=$1; shift ;;
|
||||
--plat|-p) PLAT=$1; shift ;;
|
||||
--lang|-l) PUSH_LANG=$1; shift ;;
|
||||
--tag|-t) TAG=$1; shift ;;
|
||||
--server_id|-si) SERVER_ID=$1; shift ;;
|
||||
--modules|-m) MODULES=$1; shift ;;
|
||||
*) ARGS="$ARGS $PARAM" ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ "${SERVER_TYPE}" = "" ]; then
|
||||
Usage
|
||||
error "需要指定服务器类型 -s 参数"
|
||||
exit1
|
||||
fi
|
||||
|
||||
#if [ ${TAG} != 'trunk' ]; then
|
||||
# TAG=branches/${TAG}
|
||||
#fi
|
||||
|
||||
# svn目录
|
||||
SVN_BASE_URL=${SVN_BASE_URL}/${TAG}/server
|
||||
# 发布目录
|
||||
PUB_ROOT=${PUB_ROOT}/${PUSH_LANG}/${VER}/${PLAT}/${SERVER_TYPE}
|
||||
# 代码临时编译目录
|
||||
TMP_SOURCE=${TMP_SOURCE}/${PUSH_LANG}/${TAG}
|
||||
|
||||
#先确定更新的服务器类型
|
||||
#确定最终发布路径
|
||||
opt "ver=${VER} server=${SERVER_TYPE} root =${PUB_ROOT} tmp_source=${TMP_SOURCE}"
|
||||
|
||||
set -- $ARGS
|
||||
ACTION=$1
|
||||
shift
|
||||
|
||||
case ${ACTION} in
|
||||
'pub_rel') PubRelease ;;
|
||||
'pub_up') PubUpdate ;;
|
||||
*) Usage ; exit1;;
|
||||
esac
|
||||
|
||||
lock_release
|
||||
|
||||
END_TIME=$(date '+%Y-%m-%d %H:%M:%S')
|
||||
|
||||
echo -e "start_time = ${START_TIME}, end_time = ${END_TIME}"
|
||||
Reference in New Issue
Block a user