From 61e5ce99054220974aabb2ecc2d96b09e54ce3f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=8B=A4=E6=B0=91?= Date: Wed, 29 Jul 2026 00:16:12 +0800 Subject: [PATCH] fix(update): tolerate optional database identity fields --- CHANGELOG.md | 2 ++ scripts/update.sh | 15 +++++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1618e9c..9524cb4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ docs-site 独立镜像定义;文档站继续由 tenant-web 在 `/docs/` 提供。 - 修正环境加载优先级:`config/infra.env` 仅作为默认值,部署生成的 `.env` 为 MySQL/Redis 模式和 profile 的权威来源,避免托管数据库被备份脚本误判为外部数据库。 +- 可选 MySQL 用户配置缺失时不再被 Bash `set -e` 误判为升级致命错误;只有真正 + 必需的数据库/Redis 密码缺失才会在修改容器前给出明确失败信息。 ## 2026.06.18-private.1 diff --git a/scripts/update.sh b/scripts/update.sh index 2a25a64..61cf640 100755 --- a/scripts/update.sh +++ b/scripts/update.sh @@ -118,12 +118,14 @@ ok "目标私有化版本=${PRIVATE_VERSION}" # 变量替换失败时覆盖成空字符串(deploy.sh 新建部署已自动写入,此处仅升级兼容) _patched=0 if ! grep -q "^SPRING_DATASOURCE_PASSWORD=" "$ROOT_DIR/config/secrets.env" 2>/dev/null; then - _mp="$(grep '^MYSQL_PASSWORD=' "$ROOT_DIR/config/secrets.env" | cut -d= -f2-)" + _mp="$(grep '^MYSQL_PASSWORD=' "$ROOT_DIR/config/secrets.env" 2>/dev/null | cut -d= -f2- || true)" + [ -n "$_mp" ] || fail "config/secrets.env 缺少 MYSQL_PASSWORD,无法补齐数据库运行配置" printf '\nSPRING_DATASOURCE_PASSWORD=%s\n' "$_mp" >> "$ROOT_DIR/config/secrets.env" _patched=1 fi if ! grep -q "^SPRING_DATA_REDIS_PASSWORD=" "$ROOT_DIR/config/secrets.env" 2>/dev/null; then - _rp="$(grep '^REDIS_PASSWORD=' "$ROOT_DIR/config/secrets.env" | cut -d= -f2-)" + _rp="$(grep '^REDIS_PASSWORD=' "$ROOT_DIR/config/secrets.env" 2>/dev/null | cut -d= -f2- || true)" + [ -n "$_rp" ] || fail "config/secrets.env 缺少 REDIS_PASSWORD,无法补齐缓存运行配置" printf 'SPRING_DATA_REDIS_PASSWORD=%s\n' "$_rp" >> "$ROOT_DIR/config/secrets.env" _patched=1 fi @@ -163,7 +165,7 @@ if ! grep -q "^PRIVATE_DEPLOY_ROOT=" "$ROOT_DIR/.env" 2>/dev/null; then fi _CONSOLE_DOMAIN="$(grep '^CONSOLE_DOMAIN=' "$ROOT_DIR/config/xuqm.env" 2>/dev/null \ - | cut -d= -f2- | tr -d '"' | tr -d "'")" + | cut -d= -f2- | tr -d '"' | tr -d "'" || true)" _NGINX_BIND="${NGINX_BIND:-80}" _NGINX_PORT="${_NGINX_BIND##*:}" @@ -553,9 +555,10 @@ if grep -q 'bugcollect-service:' "$ROOT_DIR/docker-compose.yml" 2>/dev/null; the if [ -n "$_mysql_ctr" ]; then _bc_db="${BUGCOLLECT_DB:-xuqm_bugcollect}" _secrets="$ROOT_DIR/config/secrets.env" - _mysql_root_pw="$(grep '^MYSQL_ROOT_PASSWORD=' "$_secrets" 2>/dev/null | cut -d= -f2-)" - _mysql_user="$(grep '^MYSQL_USERNAME=' "$_secrets" 2>/dev/null | cut -d= -f2-)" - [ -z "$_mysql_user" ] && _mysql_user="$(grep '^MYSQL_USER=' "$_secrets" 2>/dev/null | cut -d= -f2-)" + _mysql_root_pw="$(grep '^MYSQL_ROOT_PASSWORD=' "$_secrets" 2>/dev/null | cut -d= -f2- || true)" + _mysql_user="$(grep '^MYSQL_USERNAME=' "$_secrets" 2>/dev/null | cut -d= -f2- || true)" + [ -z "$_mysql_user" ] && \ + _mysql_user="$(grep '^MYSQL_USER=' "$_secrets" 2>/dev/null | cut -d= -f2- || true)" # docker-compose.yml 中 SPRING_DATASOURCE_USERNAME 默认值为 xuqm,与此保持一致 [ -z "$_mysql_user" ] && _mysql_user="xuqm" info "建库检查: container=${_mysql_ctr} db=${_bc_db} user=${_mysql_user}"