diff --git a/docs/guides/branch-environment-installation.md b/docs/guides/branch-environment-installation.md index ef69b6f4..1ec562cf 100644 --- a/docs/guides/branch-environment-installation.md +++ b/docs/guides/branch-environment-installation.md @@ -155,6 +155,8 @@ bash scripts/install.sh release --base-url https://ctms.example.com 7. 检查容器状态、后端环境、/health、/api/v1/auth/login-key。 ``` +更新进入“执行部署更新”后会持续显示 Docker 镜像拉取与构建进度:交互终端使用滚动实时输出窗口,CI、远程面板或管道环境直接流式输出构建日志,并在两种模式下显示累计耗时。 + 脚本不会执行: ```text diff --git a/scripts/common.sh b/scripts/common.sh index 829bfb2f..3d489a55 100644 --- a/scripts/common.sh +++ b/scripts/common.sh @@ -345,7 +345,7 @@ ctms_run_quiet() { mkdir -p "$CTMS_LOG_DIR" local log_file log_file="$(mktemp "$CTMS_LOG_DIR/cmd_XXXXXXXX")" - local start_ts elapsed exit_code + local start_ts elapsed exit_code streamed_output=0 start_ts="$(date +%s)" set +e @@ -368,9 +368,16 @@ ctms_run_quiet() { printf '\r\033[K' fi else - printf ' %s%s%s %s …\n' "${CC_MUTED}" "$ICON_INFO" "${C_RESET}" "$label" - "$@" >"$log_file" 2>&1 - exit_code=$? + if [[ "${CTMS_LIVE_OUTPUT:-0}" -eq 1 ]]; then + printf ' %s%s%s %s(实时输出)\n' "${CC_INFO}${C_BOLD}" "$ICON_INFO" "${C_RESET}" "$label" + "$@" 2>&1 | tee "$log_file" + exit_code="${PIPESTATUS[0]}" + streamed_output=1 + else + printf ' %s%s%s %s …\n' "${CC_MUTED}" "$ICON_INFO" "${C_RESET}" "$label" + "$@" >"$log_file" 2>&1 + exit_code=$? + fi fi set -e @@ -381,11 +388,17 @@ ctms_run_quiet() { return 0 fi - printf '\n %s%s%s %s%s 失败(耗时 %ss),完整输出:%s\n\n' \ - "${CC_DANGER}${C_BOLD}" "$ICON_FAIL" "${C_RESET}" "${CC_DANGER}" "$label" "$elapsed" "${C_RESET}" >&2 - sed 's/^/ /' "$log_file" >&2 - printf '\n' >&2 - ctms_fail "命令执行失败,详细日志保留于:${log_file#"$CTMS_ROOT_DIR"/}(追加 --verbose 可看实时输出)" + if [[ "$streamed_output" -eq 1 ]]; then + printf '\n %s%s%s %s%s 失败(耗时 %ss),输出已在上方实时展示。%s\n\n' \ + "${CC_DANGER}${C_BOLD}" "$ICON_FAIL" "${C_RESET}" "${CC_DANGER}" "$label" "$elapsed" "${C_RESET}" >&2 + ctms_fail "命令执行失败,详细日志保留于:${log_file#"$CTMS_ROOT_DIR"/}" + else + printf '\n %s%s%s %s%s 失败(耗时 %ss),完整输出:%s\n\n' \ + "${CC_DANGER}${C_BOLD}" "$ICON_FAIL" "${C_RESET}" "${CC_DANGER}" "$label" "$elapsed" "${C_RESET}" >&2 + sed 's/^/ /' "$log_file" >&2 + printf '\n' >&2 + ctms_fail "命令执行失败,详细日志保留于:${log_file#"$CTMS_ROOT_DIR"/}(追加 --verbose 可看实时输出)" + fi } # 固定占用 9 行:上边框 + 6 行日志 + 下边框 + 状态行。 diff --git a/scripts/update.sh b/scripts/update.sh index 0cee0001..f2a3c2d6 100755 --- a/scripts/update.sh +++ b/scripts/update.sh @@ -554,8 +554,9 @@ run_install_script() { local install_script="$CTMS_ROOT_DIR/scripts/install.sh" [[ -x "$install_script" ]] || ctms_fail "安装脚本不可执行: $install_script" - ctms_info "调用安装脚本完成容器更新..." - "$install_script" "$TARGET_ENV" "${INSTALL_ARGS[@]}" + ctms_info "调用安装脚本完成容器更新,镜像拉取与构建进度将在下方实时显示..." + COMPOSE_PROGRESS=plain BUILDKIT_PROGRESS=plain \ + "$install_script" "$TARGET_ENV" "${INSTALL_ARGS[@]}" } # ── 完成提示 ─────────────────────────────────