aab0b9bdf6
Co-authored-by: Cursor <cursoragent@cursor.com>
68 lines
1.8 KiB
Bash
Executable File
68 lines
1.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# deploy/lib/update.sh — 更新(仅 git pull,禁止 scp);支持单槽位或全部串行
|
||
set -e
|
||
set -u
|
||
if [ -n "${BASH_VERSION:-}" ]; then
|
||
set -o pipefail
|
||
fi
|
||
|
||
LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
# shellcheck source=common.sh
|
||
source "${LIB_DIR}/common.sh"
|
||
|
||
update_one_slot() {
|
||
local slot="$1"
|
||
resolve_slot "${slot}"
|
||
if ! repo_ready "${INSTALL_ROOT}"; then
|
||
log "槽位 ${slot} 未安装(${INSTALL_ROOT}),跳过"
|
||
return 0
|
||
fi
|
||
step "更新槽位 ${slot}: ${INSTALL_ROOT} :${API_PORT} ${PM2_APP_NAME}"
|
||
ensure_system_deps
|
||
bash "${INSTALL_ROOT}/deploy/pull_and_restart.sh"
|
||
verify_health "${API_PORT}" || true
|
||
log "槽位 ${slot} 更新完成"
|
||
}
|
||
|
||
update_all_slots() {
|
||
local s
|
||
local any=0
|
||
step "串行更新全部已安装策略机槽位(避免同机并行 npm build)"
|
||
for s in $(list_installed_slots); do
|
||
any=1
|
||
update_one_slot "${s}"
|
||
done
|
||
if [[ "${any}" -eq 0 ]]; then
|
||
die "未找到已安装的策略机(槽位 1/2/3)"
|
||
fi
|
||
echo ""
|
||
log "全部槽位更新完成"
|
||
}
|
||
|
||
main_update() {
|
||
require_root
|
||
local mode="${EHS_UPDATE_MODE:-one}"
|
||
if [[ "${mode}" == "all" ]]; then
|
||
update_all_slots
|
||
return 0
|
||
fi
|
||
|
||
resolve_slot "${INSTANCE_SLOT:-1}"
|
||
if ! REPO_ROOT="$(resolve_repo_root)"; then
|
||
die "未找到安装目录 ${INSTALL_ROOT},请先执行「1) 一键部署策略机」并选择该槽位"
|
||
fi
|
||
if ! repo_ready "${REPO_ROOT}"; then
|
||
die "安装不完整: ${REPO_ROOT}"
|
||
fi
|
||
|
||
step "更新 — 环境检测 (缺则装,有则跳过)"
|
||
ensure_system_deps
|
||
step "更新槽位 ${INSTANCE_SLOT} (git pull + 构建 + pm2 reload)"
|
||
bash "${REPO_ROOT}/deploy/pull_and_restart.sh"
|
||
verify_health "${API_PORT}" || true
|
||
echo ""
|
||
log "更新完成 slot=${INSTANCE_SLOT} http://127.0.0.1:${API_PORT}/health"
|
||
}
|
||
|
||
main_update "$@"
|