时空项目打包脚本初版,只包含游戏服打包功能

main
grimm 2024-07-15 11:29:28 +08:00
parent 3ac79e4951
commit 429700b9d7
4 changed files with 503 additions and 0 deletions

185
shikong.sh 100644
View File

@ -0,0 +1,185 @@
#!/bin/bash
# 删除命令乱码解决
stty erase ^h
# 文字颜色
red='\033[31m'
green='\033[32m'
yellow='\033[33m'
blue='\033[34m'
# shellcheck disable=SC2034
purple='\033[35m'
# shellcheck disable=SC2034
cyan='\033[36m'
# shellcheck disable=SC2034
white='\033[37m'
NC='\033[0m' # 恢复默认颜色
# 判断一个字符串是否是合法的IP地址
if_ip() {
local ip=$1
local pattern="^([0-9]{1,3}\.){3}[0-9]{1,3}$"
if [[ $ip =~ $pattern ]]; then
# 检查每个数字是否在0到255之间
local IFS='.'
read -ra octets <<< "$ip"
for octet in "${octets[@]}"; do
if (( octet < 0 || octet > 255 )); then
return 1
fi
done
return 0
else
return 1
fi
}
# 显示指定目录下的文件或目录
show_file(){
filer=$1
find /data/update/"$filer" -maxdepth 1 \( -type f -o -type d \) -printf "%T@\t%-20f\n" | sort -n | awk '{print strftime("%Y-%m-%d %H:%M:%S", $1)"\t"$2}'
}
# 获取当前时间,精确到秒,格式年月日时分秒
get_current_time() {
local current_time
current_time=$(date +"%Y%m%d_%H%M%S")
echo "$current_time"
}
# 发包并解压缩
send_server_package(){
# 服务器地址
local ip=${1}
# tar 包名
local package=${2}.tar.gz
# 源服务器上的tar压缩包路径
local source_tar=${3}
# 游戏服目标服务器上的目标目录路径
local destination_dir=${4}
if [ -e $source_tar ]; then
echo "正在处理服务器 $ip"
scp "$source_tar/$package" "$ip:$destination_dir" || { echo "SCP 失败"; exit 1; }
ssh "$ip" "tar -zxvf $destination_dir/$package -C $destination_dir"
ssh "$ip" "rm -f $destination_dir/$package"
echo "处理完成服务器 $ip "
else
echo "$source_tar/$package 不存在,请先去打包!"
return
fi
}
# 游戏代码更新
server_build_update(){
# 服务器代码
local code=$1
# 包名
show_file package | grep "$code"
read -rp "请输入包名(不带文件后缀):" package
# 机器列表
show_file script/txt
read -rp "请输入ip或文件名不带后缀: " channel
# 是否重启
read -r -p "更新完毕是否需要重启Y/N: " reboot
# 源服务器上的tar压缩包路径
local source_tar="/data/update/package/"
local destination_dir="/data/jieling/$code"
echo -e "开始发送游戏包,文件:$source_tar/$package, 机器:$channel, 重启:$reboot"
case $code in
"logic")
if if_ip "$channel"; then
send_server_package $channel $package $source_tar $destination_dir
case $reboot in
[yY][eE][sS]|[yY])
echo "暂未开放重启功能..."
;;
*)
echo "更新结束..."
;;
esac
else
for ip in $(awk '{print $2}' "txt/$channel")
do
send_server_package $ip $package $source_tar $destination_dir
case $reboot in
[yY][eE][sS]|[yY])
echo "暂未开放重启功能..."
;;
*)
echo "更新结束..."
;;
esac
done
fi
;;
"world")
;;
"chat")
;;
esac
}
# 游戏代码打包
server_code_build(){
local code=$1
# shellcheck disable=SC2155
local time=$(get_current_time)
show_file project | grep sk
read -rp "请输入项目地址: " project
local package="${project}_${time}"
case $code in
"logic")
bash ./update_sk_logic.sh "$project" "$package"
;;
"world")
bash ./update_sk_world.sh "$project" "$package"
;;
"chat")
bash ./update_sk_chat.sh "$project" "$package"
;;
esac
}
# 游戏服操作
game_server_option(){
local code=$1
echo -e "1.游戏服打包"
echo -e "2.游戏服更新"
read -rp "请输入选项编号: " choice
case $choice in
1) server_code_build "$code" ;;
2) server_build_update "$code" ;;
esac
}
# 主程序入口
main_menu() {
while true; do
local current_time
current_time=$(get_current_time)
echo -e "${blue}************************************${NC}"
echo -e "${purple}欢迎使用时空更新脚本...${current_time}${NC}"
echo -e "1.时空游戏服更新"
echo -e "2.时空世界服更新"
echo -e "3.时空聊天服更新"
echo -e "4.登陆服更新"
echo -e "5.支付服更新"
echo -e "6.gm后台更新"
echo -e "0.${red}退出${NC}"
echo -e "${blue}************************************${NC}"
read -rp "请输入选项编号: " choice
case $choice in
1) game_server_option "logic" ;;
2) game_server_option "world" ;;
3) game_server_option "chat" ;;
4) echo -e "${red}暂未开放!!!${NC}" ;;
5) echo -e "${red}暂未开放!!!${NC}" ;;
6) echo -e "${red}暂未开放!!!${NC}" ;;
0) echo -e "${red}谢谢使用,再见!${NC}"
exit 0
;;
*) echo -e "${red}无效的选项,请重新输入${NC}" ;;
esac
done
}
# 脚本开始执行
main

106
update_sk_chat.sh 100644
View File

@ -0,0 +1,106 @@
#!/bin/bash
#########################################################################
# File Name: b.sh
# Created on: 2018-06-28 17:01:15
# Author: Wu Kang
# Last Modified: 2019-01-23 10:51:34
# Description:
#########################################################################
. /etc/profile
branch=$1
package=$2
packages=${package}_chat.tar.gz
if [ ! $branch ];then
echo "branch is not exiting,"
exit 7
fi
hotfix_dir=/data/update/project/hotfix
#coretest_dir=/data/update/project/coretest
BASE_DIR=/data/update/project/${branch}
if [ ! -d $BASE_DIR ];then
echo -e "\033[31myour input branch not exist\033[0m"
echo -e "\033[31mplease check your input branch!!!\033[0m"
echo -e "\033[31mgood bye...\033[0m"
exit 7
fi
cd ${BASE_DIR}/sk_server || exit
echo "当前分支是: `git branch`"
git pull
#cd ${BASE_DIR}/miduo_protocol || exit
#echo "当前分支是: `git branch`"
#git pull
#protobuf
#rm -rf ./protobuf_temp
#mkdir ./protobuf_temp
#find ./protos -name "*.proto" -type f|xargs -i protoc --proto_path=./protos --java_out=./protobuf_temp {}
##find ./protos -name "*.proto" -type f -exec protoc --proto_path=./protos --java_out=./protobuf_temp {} +
#rm -rf ${BASE_DIR}/sk_server/gamecommon/src/main/java/rpc/global/*
#rm -rf ${BASE_DIR}/sk_server/gamecommon/src/main/java/rpc/protocols/*
#rm -rf ${BASE_DIR}/sk_server/gamecommon/src/main/java/rpc/world/*
#cp -rf ./protobuf_temp/rpc/global ${BASE_DIR}/sk_server/gamecommon/src/main/java/rpc/global
#cp -rf ./protobuf_temp/rpc/protocols ${BASE_DIR}/sk_server/gamecommon/src/main/java/rpc/protocols
#cp -rf ./protobuf_temp/rpc/world ${BASE_DIR}/sk_server/gamecommon/src/main/java/rpc/world
#gradlew build
cd ${BASE_DIR}/sk_server || exit
echo "gradlew clean..."
./gradlew clean
echo "gradlew build..."
./gradlew build
if [ $? != '0' ];then
echo "build error... please check your code !!!"
exit 7
fi
#生成jar
echo "gradlew jar..."
./gradlew jar
echo "gradlew copyJars..."
./gradlew copyJars
#svn update
cd ${BASE_DIR}/fighting || exit
svn up
#cd ${BASE_DIR}/data_excel || exit
#svn up
#cd ${BASE_DIR}/execl_to_txt || exit
#java17 -Dfile.encoding=UTF-8 -cp .:./lib/* ExcelUtils
#java -Dfile.encoding=UTF-8 -Djava.ext.dirs=./lib ExcelUtils
rm -rf ${BASE_DIR}/sk_server/release
rm -rf ${BASE_DIR}/sk_server/jieling.tar.gz
#mkdir -p ${BASE_DIR}/sk_server/release/jieling/bin
mkdir -p ${BASE_DIR}/sk_server/release/jieling/conf
mkdir -p ${BASE_DIR}/sk_server/release/jieling/lib
mkdir -p ${BASE_DIR}/sk_server/release/jieling/lib/serverlogiclib
cp -rf ${BASE_DIR}/sk_server/luafight/ ${BASE_DIR}/sk_server/release/jieling/
cp -rf ${BASE_DIR}/sk_server/chatserver/lib/*.jar ${BASE_DIR}/sk_server/release/jieling/lib/serverlogiclib/
cp -rf ${BASE_DIR}/sk_server/chatserver/build/libs/*.jar ${BASE_DIR}/sk_server/release/jieling/lib/
cp -rf ${BASE_DIR}/sk_server/conf/* ${BASE_DIR}/sk_server/release/jieling/conf/
cp -rf ${hotfix_dir}/* ${BASE_DIR}/sk_server/release/jieling/conf/
#cp -rf ${coretest_dir}/* ${BASE_DIR}/sk_server/release/jieling/bin/
cp -rf ${BASE_DIR}/fighting/Modules/ ${BASE_DIR}/sk_server/release/jieling/luafight/
cp -rf ${BASE_DIR}/fighting/BattleMain.lua ${BASE_DIR}/sk_server/release/jieling/luafight/
cd ${BASE_DIR}/sk_server/release/jieling/ || exit
tar -czvf jieling.tar.gz --exclude=jieling/bin ./*
mv jieling.tar.gz /data/update/package/${packages}
echo "打包${packages}完成"
#cd /data/update/package/${file}
#echo "删除分发服务器旧包"
#ssh 82.157.34.193 rm -rf /etc/ansible/roles/send_lib/files/*.tar.gz
#echo "开始拷贝${packages}到分发服务器 !"
#scp ${packages} root@82.157.34.193:/etc/ansible/roles/send_lib/files/
##echo "拷贝${packages}到分发服务器完成 !"
#scp ${packages} root@159.75.211.94:/data/op/jl_pack/${file}/
#tar -xvf jieling.tar.gz -C /data/jieling/scripts/release/patch

106
update_sk_logic.sh 100644
View File

@ -0,0 +1,106 @@
#!/bin/bash
#########################################################################
# File Name: b.sh
# Created on: 2018-06-28 17:01:15
# Author: Wu Kang
# Last Modified: 2019-01-23 10:51:34
# Description:
#########################################################################
. /etc/profile
branch=$1
package=$2
packages=${package}_logic.tar.gz
if [ ! $branch ];then
echo "branch is not exiting,"
exit 7
fi
hotfix_dir=/data/update/project/hotfix
#coretest_dir=/data/update/project/coretest
BASE_DIR=/data/update/project/${branch}
if [ ! -d $BASE_DIR ];then
echo -e "\033[31myour input branch not exist\033[0m"
echo -e "\033[31mplease check your input branch!!!\033[0m"
echo -e "\033[31mgood bye...\033[0m"
exit 7
fi
cd ${BASE_DIR}/sk_server || exit
echo "当前分支是: `git branch`"
git pull
#cd ${BASE_DIR}/miduo_protocol || exit
#echo "当前分支是: `git branch`"
#git pull
#protobuf
#rm -rf ./protobuf_temp
#mkdir ./protobuf_temp
#find ./protos -name "*.proto" -type f|xargs -i protoc --proto_path=./protos --java_out=./protobuf_temp {}
##find ./protos -name "*.proto" -type f -exec protoc --proto_path=./protos --java_out=./protobuf_temp {} +
#rm -rf ${BASE_DIR}/sk_server/gamecommon/src/main/java/rpc/global/*
#rm -rf ${BASE_DIR}/sk_server/gamecommon/src/main/java/rpc/protocols/*
#rm -rf ${BASE_DIR}/sk_server/gamecommon/src/main/java/rpc/world/*
#cp -rf ./protobuf_temp/rpc/global ${BASE_DIR}/sk_server/gamecommon/src/main/java/rpc/global
#cp -rf ./protobuf_temp/rpc/protocols ${BASE_DIR}/sk_server/gamecommon/src/main/java/rpc/protocols
#cp -rf ./protobuf_temp/rpc/world ${BASE_DIR}/sk_server/gamecommon/src/main/java/rpc/world
#gradlew build
cd ${BASE_DIR}/sk_server || exit
echo "gradlew clean..."
./gradlew clean
echo "gradlew build..."
./gradlew build
if [ $? != '0' ];then
echo "build error... please check your code !!!"
exit 7
fi
#生成jar
echo "gradlew jar..."
./gradlew jar
echo "gradlew copyJars..."
./gradlew copyJars
#svn update
cd ${BASE_DIR}/fighting || exit
svn up
#cd ${BASE_DIR}/data_excel || exit
#svn up
#cd ${BASE_DIR}/execl_to_txt || exit
#java17 -Dfile.encoding=UTF-8 -cp .:./lib/* ExcelUtils
#java -Dfile.encoding=UTF-8 -Djava.ext.dirs=./lib ExcelUtils
rm -rf ${BASE_DIR}/sk_server/release
rm -rf ${BASE_DIR}/sk_server/jieling.tar.gz
#mkdir -p ${BASE_DIR}/sk_server/release/jieling/bin
mkdir -p ${BASE_DIR}/sk_server/release/jieling/conf
mkdir -p ${BASE_DIR}/sk_server/release/jieling/lib
mkdir -p ${BASE_DIR}/sk_server/release/jieling/lib/serverlogiclib
cp -rf ${BASE_DIR}/sk_server/luafight/ ${BASE_DIR}/sk_server/release/jieling/
cp -rf ${BASE_DIR}/sk_server/serverlogic/lib/*.jar ${BASE_DIR}/sk_server/release/jieling/lib/serverlogiclib/
cp -rf ${BASE_DIR}/sk_server/serverlogic/build/libs/*.jar ${BASE_DIR}/sk_server/release/jieling/lib/
cp -rf ${BASE_DIR}/sk_server/conf/* ${BASE_DIR}/sk_server/release/jieling/conf/
cp -rf ${hotfix_dir}/* ${BASE_DIR}/sk_server/release/jieling/conf/
#cp -rf ${coretest_dir}/* ${BASE_DIR}/sk_server/release/jieling/bin/
cp -rf ${BASE_DIR}/fighting/Modules/ ${BASE_DIR}/sk_server/release/jieling/luafight/
cp -rf ${BASE_DIR}/fighting/BattleMain.lua ${BASE_DIR}/sk_server/release/jieling/luafight/
cd ${BASE_DIR}/sk_server/release/jieling/ || exit
tar -czvf jieling.tar.gz --exclude=jieling/bin ./*
mv jieling.tar.gz /data/update/package/${packages}
echo "打包${packages}完成"
#cd /data/update/package/${file}
#echo "删除分发服务器旧包"
#ssh 82.157.34.193 rm -rf /etc/ansible/roles/send_lib/files/*.tar.gz
#echo "开始拷贝${packages}到分发服务器 !"
#scp ${packages} root@82.157.34.193:/etc/ansible/roles/send_lib/files/
##echo "拷贝${packages}到分发服务器完成 !"
#scp ${packages} root@159.75.211.94:/data/op/jl_pack/${file}/
#tar -xvf jieling.tar.gz -C /data/jieling/scripts/release/patch

106
update_sk_world.sh 100644
View File

@ -0,0 +1,106 @@
#!/bin/bash
#########################################################################
# File Name: b.sh
# Created on: 2018-06-28 17:01:15
# Author: Wu Kang
# Last Modified: 2019-01-23 10:51:34
# Description:
#########################################################################
. /etc/profile
branch=$1
package=$2
packages=${package}_world.tar.gz
if [ ! $branch ];then
echo "branch is not exiting,"
exit 7
fi
hotfix_dir=/data/update/project/hotfix
#coretest_dir=/data/update/project/coretest
BASE_DIR=/data/update/project/${branch}
if [ ! -d $BASE_DIR ];then
echo -e "\033[31myour input branch not exist\033[0m"
echo -e "\033[31mplease check your input branch!!!\033[0m"
echo -e "\033[31mgood bye...\033[0m"
exit 7
fi
cd ${BASE_DIR}/sk_server || exit
echo "当前分支是: `git branch`"
git pull
#cd ${BASE_DIR}/miduo_protocol || exit
#echo "当前分支是: `git branch`"
#git pull
#protobuf
#rm -rf ./protobuf_temp
#mkdir ./protobuf_temp
#find ./protos -name "*.proto" -type f|xargs -i protoc --proto_path=./protos --java_out=./protobuf_temp {}
##find ./protos -name "*.proto" -type f -exec protoc --proto_path=./protos --java_out=./protobuf_temp {} +
#rm -rf ${BASE_DIR}/sk_server/gamecommon/src/main/java/rpc/global/*
#rm -rf ${BASE_DIR}/sk_server/gamecommon/src/main/java/rpc/protocols/*
#rm -rf ${BASE_DIR}/sk_server/gamecommon/src/main/java/rpc/world/*
#cp -rf ./protobuf_temp/rpc/global ${BASE_DIR}/sk_server/gamecommon/src/main/java/rpc/global
#cp -rf ./protobuf_temp/rpc/protocols ${BASE_DIR}/sk_server/gamecommon/src/main/java/rpc/protocols
#cp -rf ./protobuf_temp/rpc/world ${BASE_DIR}/sk_server/gamecommon/src/main/java/rpc/world
#gradlew build
cd ${BASE_DIR}/sk_server || exit
echo "gradlew clean..."
./gradlew clean
echo "gradlew build..."
./gradlew build
if [ $? != '0' ];then
echo "build error... please check your code !!!"
exit 7
fi
#生成jar
echo "gradlew jar..."
./gradlew jar
echo "gradlew copyJars..."
./gradlew copyJars
#svn update
cd ${BASE_DIR}/fighting || exit
svn up
#cd ${BASE_DIR}/data_excel || exit
#svn up
#cd ${BASE_DIR}/execl_to_txt || exit
#java17 -Dfile.encoding=UTF-8 -cp .:./lib/* ExcelUtils
#java -Dfile.encoding=UTF-8 -Djava.ext.dirs=./lib ExcelUtils
rm -rf ${BASE_DIR}/sk_server/release
rm -rf ${BASE_DIR}/sk_server/jieling.tar.gz
#mkdir -p ${BASE_DIR}/sk_server/release/jieling/bin
mkdir -p ${BASE_DIR}/sk_server/release/jieling/conf
mkdir -p ${BASE_DIR}/sk_server/release/jieling/lib
mkdir -p ${BASE_DIR}/sk_server/release/jieling/lib/serverlogiclib
cp -rf ${BASE_DIR}/sk_server/luafight/ ${BASE_DIR}/sk_server/release/jieling/
cp -rf ${BASE_DIR}/sk_server/worldserver/lib/*.jar ${BASE_DIR}/sk_server/release/jieling/lib/serverlogiclib/
cp -rf ${BASE_DIR}/sk_server/worldserver/build/libs/*.jar ${BASE_DIR}/sk_server/release/jieling/lib/
cp -rf ${BASE_DIR}/sk_server/conf/* ${BASE_DIR}/sk_server/release/jieling/conf/
cp -rf ${hotfix_dir}/* ${BASE_DIR}/sk_server/release/jieling/conf/
#cp -rf ${coretest_dir}/* ${BASE_DIR}/sk_server/release/jieling/bin/
cp -rf ${BASE_DIR}/fighting/Modules/ ${BASE_DIR}/sk_server/release/jieling/luafight/
cp -rf ${BASE_DIR}/fighting/BattleMain.lua ${BASE_DIR}/sk_server/release/jieling/luafight/
cd ${BASE_DIR}/sk_server/release/jieling/ || exit
tar -czvf jieling.tar.gz --exclude=jieling/bin ./*
mv jieling.tar.gz /data/update/package/${packages}
echo "打包${packages}完成"
#cd /data/update/package/${file}
#echo "删除分发服务器旧包"
#ssh 82.157.34.193 rm -rf /etc/ansible/roles/send_lib/files/*.tar.gz
#echo "开始拷贝${packages}到分发服务器 !"
#scp ${packages} root@82.157.34.193:/etc/ansible/roles/send_lib/files/
##echo "拷贝${packages}到分发服务器完成 !"
#scp ${packages} root@159.75.211.94:/data/op/jl_pack/${file}/
#tar -xvf jieling.tar.gz -C /data/jieling/scripts/release/patch