优化部署脚本非交互变量支持
This commit is contained in:
@@ -6,7 +6,15 @@ set -e # 发生错误时终止脚本执行
|
||||
if [[ "${1:-}" =~ ^(-h|--help)$ ]]; then
|
||||
echo "用法: $0"
|
||||
echo ""
|
||||
echo "脚本将提示选择更新方式,默认拉取仓库并更新镜像。"
|
||||
echo "默认拉取仓库并更新镜像;也可通过环境变量跳过交互选择。"
|
||||
echo ""
|
||||
echo "环境变量:"
|
||||
echo " UPDATE_MODE=full|image"
|
||||
echo " full 更新并拉取仓库(git pull)+ 更新镜像并重启"
|
||||
echo " image 仅更新镜像并重启(跳过 git pull)"
|
||||
echo " UPDATE_SKIP_REPO_UPDATE=true|false"
|
||||
echo " true 等同 UPDATE_MODE=image"
|
||||
echo " false 等同 UPDATE_MODE=full"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
@@ -15,18 +23,68 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && pwd)"
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
# 命令行内选择更新方式(默认:更新并拉取仓库)
|
||||
echo ""
|
||||
echo "请选择更新方式:"
|
||||
echo " [1] 更新并拉取仓库(git pull)+ 更新镜像并重启(默认)"
|
||||
echo " [2] 仅更新镜像并重启(跳过 git pull)"
|
||||
read -r -p "请选择 [1/2,回车默认 1]: " choice
|
||||
choice="${choice:-1}"
|
||||
SKIP_REPO_UPDATE=false
|
||||
case "$choice" in
|
||||
2) SKIP_REPO_UPDATE=true ;;
|
||||
1) ;;
|
||||
*) echo "❌ 无效选择,将使用默认:更新并拉取仓库"; SKIP_REPO_UPDATE=false ;;
|
||||
esac
|
||||
|
||||
normalize_bool() {
|
||||
local value
|
||||
value="$(printf '%s' "$1" | tr '[:upper:]' '[:lower:]')"
|
||||
case "$value" in
|
||||
1|true|yes|y|on) echo "true" ;;
|
||||
0|false|no|n|off|"") echo "false" ;;
|
||||
*)
|
||||
echo "❌ 布尔变量值不合法: $1(支持 true/false/1/0/yes/no/y/n/on/off)" >&2
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
resolve_update_mode() {
|
||||
local mode
|
||||
if [ -n "${UPDATE_SKIP_REPO_UPDATE:-}" ]; then
|
||||
mode="$(normalize_bool "$UPDATE_SKIP_REPO_UPDATE")" || exit 1
|
||||
SKIP_REPO_UPDATE="$mode"
|
||||
echo "使用环境变量: UPDATE_SKIP_REPO_UPDATE=$SKIP_REPO_UPDATE"
|
||||
return
|
||||
fi
|
||||
|
||||
if [ -n "${UPDATE_MODE:-}" ]; then
|
||||
mode="$(printf '%s' "$UPDATE_MODE" | tr '[:upper:]' '[:lower:]')"
|
||||
case "$mode" in
|
||||
full|repo|pull|git|1)
|
||||
SKIP_REPO_UPDATE=false
|
||||
;;
|
||||
image|images|docker|skip-git|skip_repo|skip-repo|2)
|
||||
SKIP_REPO_UPDATE=true
|
||||
;;
|
||||
*)
|
||||
echo "❌ UPDATE_MODE 只能是 full 或 image,当前为: $UPDATE_MODE"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
echo "使用环境变量: UPDATE_MODE=$UPDATE_MODE"
|
||||
return
|
||||
fi
|
||||
|
||||
if [ "${UPDATE_NON_INTERACTIVE:-0}" = "1" ] || [ "${CI:-}" = "true" ] || [ ! -t 0 ]; then
|
||||
echo "使用默认更新方式: 更新并拉取仓库(git pull)+ 更新镜像并重启"
|
||||
SKIP_REPO_UPDATE=false
|
||||
return
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "请选择更新方式:"
|
||||
echo " [1] 更新并拉取仓库(git pull)+ 更新镜像并重启(默认)"
|
||||
echo " [2] 仅更新镜像并重启(跳过 git pull)"
|
||||
read -r -p "请选择 [1/2,回车默认 1]: " choice
|
||||
choice="${choice:-1}"
|
||||
case "$choice" in
|
||||
2) SKIP_REPO_UPDATE=true ;;
|
||||
1) ;;
|
||||
*) echo "❌ 无效选择,将使用默认:更新并拉取仓库"; SKIP_REPO_UPDATE=false ;;
|
||||
esac
|
||||
}
|
||||
|
||||
resolve_update_mode
|
||||
|
||||
# 拉取整个仓库更新
|
||||
if [ "$SKIP_REPO_UPDATE" = false ]; then
|
||||
|
||||
Reference in New Issue
Block a user