mirror of
https://github.com/kuaifan/dootask.git
synced 2025-12-12 11:19:56 +00:00
no message
This commit is contained in:
parent
c3994ddbea
commit
6677e6e74f
133
cmd
133
cmd
@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
#cached execution
|
# 缓存执行
|
||||||
if [ -z "$CACHED_EXECUTION" ] && [ "$1" == "update" ]; then
|
if [ -z "$CACHED_EXECUTION" ] && [ "$1" == "update" ]; then
|
||||||
cat "$0" > ._cmd
|
cat "$0" > ._cmd
|
||||||
chmod +x ._cmd
|
chmod +x ._cmd
|
||||||
@ -11,7 +11,7 @@ if [ -z "$CACHED_EXECUTION" ] && [ "$1" == "update" ]; then
|
|||||||
exit $EXIT_STATUS
|
exit $EXIT_STATUS
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#fonts color
|
# 颜色
|
||||||
Green="\033[32m"
|
Green="\033[32m"
|
||||||
Yellow="\033[33m"
|
Yellow="\033[33m"
|
||||||
Red="\033[31m"
|
Red="\033[31m"
|
||||||
@ -20,7 +20,7 @@ YellowBG="\033[43;37m"
|
|||||||
RedBG="\033[41;37m"
|
RedBG="\033[41;37m"
|
||||||
Font="\033[0m"
|
Font="\033[0m"
|
||||||
|
|
||||||
#notification information
|
# 通知信息
|
||||||
OK="${Green}[OK]${Font}"
|
OK="${Green}[OK]${Font}"
|
||||||
Warn="${Yellow}[警告]${Font}"
|
Warn="${Yellow}[警告]${Font}"
|
||||||
Error="${Red}[错误]${Font}"
|
Error="${Red}[错误]${Font}"
|
||||||
@ -29,6 +29,7 @@ cur_path="$(pwd)"
|
|||||||
cur_arg=$@
|
cur_arg=$@
|
||||||
COMPOSE="docker-compose"
|
COMPOSE="docker-compose"
|
||||||
|
|
||||||
|
# 判断是否成功
|
||||||
judge() {
|
judge() {
|
||||||
if [[ 0 -eq $? ]]; then
|
if [[ 0 -eq $? ]]; then
|
||||||
success "$1 完成"
|
success "$1 完成"
|
||||||
@ -39,22 +40,42 @@ judge() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 执行并判断是否成功
|
||||||
|
exec_judge() {
|
||||||
|
local cmd="$1"
|
||||||
|
local error_desc="$2"
|
||||||
|
local success_desc="$3"
|
||||||
|
eval "$cmd"
|
||||||
|
if [[ 0 -ne $? ]]; then
|
||||||
|
error "$error_desc"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [[ -n "$success_desc" ]]; then
|
||||||
|
success "$success_desc"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 成功
|
||||||
success() {
|
success() {
|
||||||
echo -e "${OK} ${GreenBG}$1${Font}"
|
echo -e "${OK} ${GreenBG}$1${Font}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 警告
|
||||||
warning() {
|
warning() {
|
||||||
echo -e "${Warn} ${YellowBG}$1${Font}"
|
echo -e "${Warn} ${YellowBG}$1${Font}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 错误
|
||||||
error() {
|
error() {
|
||||||
echo -e "${Error} ${RedBG}$1${Font}"
|
echo -e "${Error} ${RedBG}$1${Font}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 信息
|
||||||
info() {
|
info() {
|
||||||
echo -e "$1"
|
echo -e "$1"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 随机数
|
||||||
rand() {
|
rand() {
|
||||||
local min=$1
|
local min=$1
|
||||||
local max=$(($2-$min+1))
|
local max=$(($2-$min+1))
|
||||||
@ -62,6 +83,7 @@ rand() {
|
|||||||
echo $(($num%$max+$min))
|
echo $(($num%$max+$min))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 随机字符串
|
||||||
rand_string() {
|
rand_string() {
|
||||||
local lan=$1
|
local lan=$1
|
||||||
if [[ `uname` == 'Linux' ]]; then
|
if [[ `uname` == 'Linux' ]]; then
|
||||||
@ -71,6 +93,7 @@ rand_string() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 重启php
|
||||||
restart_php() {
|
restart_php() {
|
||||||
local RES=`run_exec php "supervisorctl update php"`
|
local RES=`run_exec php "supervisorctl update php"`
|
||||||
if [ -z "$RES" ]; then
|
if [ -z "$RES" ]; then
|
||||||
@ -85,6 +108,7 @@ restart_php() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 切换调试模式
|
||||||
switch_debug() {
|
switch_debug() {
|
||||||
local debug="false"
|
local debug="false"
|
||||||
if [[ "$1" == "true" ]] || [[ "$1" == "dev" ]] || [[ "$1" == "open" ]]; then
|
if [[ "$1" == "true" ]] || [[ "$1" == "dev" ]] || [[ "$1" == "open" ]]; then
|
||||||
@ -96,6 +120,7 @@ switch_debug() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 检查docker、docker-compose
|
||||||
check_docker() {
|
check_docker() {
|
||||||
docker --version &> /dev/null
|
docker --version &> /dev/null
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
@ -118,6 +143,7 @@ check_docker() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 检查node
|
||||||
check_node() {
|
check_node() {
|
||||||
npm --version &> /dev/null
|
npm --version &> /dev/null
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
@ -136,10 +162,12 @@ check_node() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 获取容器名称
|
||||||
docker_name() {
|
docker_name() {
|
||||||
echo `$COMPOSE ps | awk '{print $1}' | grep "\-$1\-"`
|
echo `$COMPOSE ps | awk '{print $1}' | grep "\-$1\-"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 编译前端
|
||||||
run_compile() {
|
run_compile() {
|
||||||
local type=$1
|
local type=$1
|
||||||
check_node
|
check_node
|
||||||
@ -160,6 +188,7 @@ run_compile() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 运行electron
|
||||||
run_electron() {
|
run_electron() {
|
||||||
local argv=$@
|
local argv=$@
|
||||||
check_node
|
check_node
|
||||||
@ -187,6 +216,7 @@ run_electron() {
|
|||||||
env BUILD_FRONTEND=$BUILD_FRONTEND node ./electron/build.js $argv
|
env BUILD_FRONTEND=$BUILD_FRONTEND node ./electron/build.js $argv
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 执行容器命令
|
||||||
run_exec() {
|
run_exec() {
|
||||||
local container=$1
|
local container=$1
|
||||||
shift 1
|
shift 1
|
||||||
@ -199,6 +229,7 @@ run_exec() {
|
|||||||
docker exec -it "$name" /bin/sh -c "$cmd"
|
docker exec -it "$name" /bin/sh -c "$cmd"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 备份数据库、还原数据库
|
||||||
run_mysql() {
|
run_mysql() {
|
||||||
if [ "$1" = "backup" ]; then
|
if [ "$1" = "backup" ]; then
|
||||||
database=$(env_get DB_DATABASE)
|
database=$(env_get DB_DATABASE)
|
||||||
@ -240,6 +271,7 @@ run_mysql() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 根据网络名称删除所有容器
|
||||||
remove_by_network() {
|
remove_by_network() {
|
||||||
local app_id=$(env_get APP_ID)
|
local app_id=$(env_get APP_ID)
|
||||||
local network_name="dootask-networks-${app_id}"
|
local network_name="dootask-networks-${app_id}"
|
||||||
@ -248,10 +280,12 @@ remove_by_network() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 卸载appstore
|
||||||
uninstall_appstore() {
|
uninstall_appstore() {
|
||||||
docker run -it --rm -v ${cur_path}/docker/appstore:/appstore nginx:alpine sh -c "find /appstore/config -mindepth 1 -type d | sort -r | xargs rm -rf; rm -f /appstore/log/*.log"
|
docker run -it --rm -v ${cur_path}/docker/appstore:/appstore nginx:alpine sh -c "find /appstore/config -mindepth 1 -type d | sort -r | xargs rm -rf; rm -f /appstore/log/*.log"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 自动配置https
|
||||||
https_auto() {
|
https_auto() {
|
||||||
restart_nginx="n"
|
restart_nginx="n"
|
||||||
if [[ "$(env_get APP_PORT)" != "80" ]]; then
|
if [[ "$(env_get APP_PORT)" != "80" ]]; then
|
||||||
@ -306,12 +340,14 @@ https_auto() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 获取env参数
|
||||||
env_get() {
|
env_get() {
|
||||||
local key=$1
|
local key=$1
|
||||||
local value=`cat ${cur_path}/.env | grep "^$key=" | awk -F '=' '{print $2}' | tr -d '\r\n'`
|
local value=`cat ${cur_path}/.env | grep "^$key=" | awk -F '=' '{print $2}' | tr -d '\r\n'`
|
||||||
echo "$value"
|
echo "$value"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 设置env参数
|
||||||
env_set() {
|
env_set() {
|
||||||
local key=$1
|
local key=$1
|
||||||
local val=$2
|
local val=$2
|
||||||
@ -331,6 +367,7 @@ env_set() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 初始化env
|
||||||
env_init() {
|
env_init() {
|
||||||
if [ ! -f ".env" ]; then
|
if [ ! -f ".env" ]; then
|
||||||
cp .env.docker .env
|
cp .env.docker .env
|
||||||
@ -346,6 +383,7 @@ env_init() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 获取命令参数
|
||||||
arg_get() {
|
arg_get() {
|
||||||
local find="n"
|
local find="n"
|
||||||
local value=""
|
local value=""
|
||||||
@ -364,6 +402,75 @@ arg_get() {
|
|||||||
echo $value
|
echo $value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 更新函数
|
||||||
|
run_update() {
|
||||||
|
local target_branch=$(arg_get branch)
|
||||||
|
local is_local=$(arg_get local)
|
||||||
|
local force_update=$(arg_get force)
|
||||||
|
|
||||||
|
if [[ -z "$is_local" ]]; then
|
||||||
|
# 远程更新模式
|
||||||
|
exec_judge "git fetch --all" "获取远程更新失败"
|
||||||
|
|
||||||
|
# 确定目标分支
|
||||||
|
if [[ -n "$target_branch" ]]; then
|
||||||
|
current_branch="$target_branch"
|
||||||
|
exec_judge "git checkout $target_branch" "切换分支到 $target_branch 失败"
|
||||||
|
else
|
||||||
|
current_branch=$(git branch | sed -n -e 's/^\* \(.*\)/\1/p')
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查数据库迁移变动
|
||||||
|
db_changes=$(git diff --name-only HEAD..origin/$current_branch | grep -E "^database/" || true)
|
||||||
|
if [[ -n "$db_changes" ]]; then
|
||||||
|
info "数据库有迁移变动,执行数据库备份..."
|
||||||
|
exec_judge "run_mysql backup" "数据库备份失败" "数据库备份完成"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查本地修改
|
||||||
|
if ! git diff --quiet || ! git diff --cached --quiet; then
|
||||||
|
if [[ "$force_update" != "yes" ]]; then
|
||||||
|
warning "检测到本地修改,是否强制更新?[Y/n]"
|
||||||
|
read -r confirm_force
|
||||||
|
[[ -z ${confirm_force} ]] && confirm_force="Y"
|
||||||
|
case $confirm_force in
|
||||||
|
[yY][eE][sS] | [yY])
|
||||||
|
force_update="yes"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
error "取消更新,请先处理本地修改"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 更新代码
|
||||||
|
if [[ "$force_update" == "yes" ]]; then
|
||||||
|
exec_judge "git reset --hard origin/$current_branch" "强制更新代码失败"
|
||||||
|
else
|
||||||
|
exec_judge "git pull --ff-only origin $current_branch" "代码拉取失败,可能存在冲突,请使用 --force 参数"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 更新依赖
|
||||||
|
exec_judge "run_exec php 'composer install --no-dev --optimize-autoloader'" "更新PHP依赖失败"
|
||||||
|
else
|
||||||
|
# 本地更新模式
|
||||||
|
info "执行数据库备份..."
|
||||||
|
exec_judge "run_mysql backup" "数据库备份失败" "数据库备份完成"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 数据库迁移
|
||||||
|
exec_judge "run_exec php 'php artisan migrate'" "数据库迁移失败"
|
||||||
|
|
||||||
|
# 重启服务
|
||||||
|
exec_judge "run_exec nginx 'nginx -s reload'" "重载Nginx失败"
|
||||||
|
restart_php
|
||||||
|
$COMPOSE up -d --remove-orphans
|
||||||
|
|
||||||
|
success "更新完成!"
|
||||||
|
}
|
||||||
|
|
||||||
####################################################################################
|
####################################################################################
|
||||||
####################################################################################
|
####################################################################################
|
||||||
####################################################################################
|
####################################################################################
|
||||||
@ -454,25 +561,7 @@ if [ $# -gt 0 ]; then
|
|||||||
run_exec mariadb "sh /etc/mysql/repassword.sh"
|
run_exec mariadb "sh /etc/mysql/repassword.sh"
|
||||||
elif [[ "$1" == "update" ]]; then
|
elif [[ "$1" == "update" ]]; then
|
||||||
shift 1
|
shift 1
|
||||||
if [[ -z "$(arg_get local)" ]]; then
|
run_update
|
||||||
git fetch --all
|
|
||||||
current_branch=$(git branch | sed -n -e 's/^\* \(.*\)/\1/p')
|
|
||||||
db_changes=$(git diff --name-only HEAD..origin/$current_branch | grep -E "^database/")
|
|
||||||
if [[ -n "$db_changes" ]]; then
|
|
||||||
info "数据库有迁移变动,执行数据库备份..."
|
|
||||||
run_mysql backup
|
|
||||||
fi
|
|
||||||
git reset --hard origin/$current_branch
|
|
||||||
git pull
|
|
||||||
run_exec php "composer update"
|
|
||||||
else
|
|
||||||
info "执行数据库备份..."
|
|
||||||
run_mysql backup
|
|
||||||
fi
|
|
||||||
run_exec php "php artisan migrate"
|
|
||||||
run_exec nginx "nginx -s reload"
|
|
||||||
restart_php
|
|
||||||
$COMPOSE up -d --remove-orphans
|
|
||||||
elif [[ "$1" == "uninstall" ]]; then
|
elif [[ "$1" == "uninstall" ]]; then
|
||||||
shift 1
|
shift 1
|
||||||
read -rp "确定要卸载(含:删除容器、数据库、日志)吗?(Y/n): " uninstall
|
read -rp "确定要卸载(含:删除容器、数据库、日志)吗?(Y/n): " uninstall
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user