feat(deploy): 零SSH自动化部署——update.sh自动同步systemd单元/更新timer缩至1分钟/新增deploy.sh一键部署验证脚本
This commit is contained in:
+27
-1
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
# vps-manager 自动更新脚本(由 systemd timer 定时触发)
|
||||
# 从 Gitea 拉取最新代码,如有更新则重启服务
|
||||
# 1. 自动同步 deploy/ 下的 systemd 单元文件(有变更才拷贝 + daemon-reload)
|
||||
# 2. 从 Gitea 拉取最新代码,如有更新则装依赖并重启服务
|
||||
#
|
||||
# 可配置项(环境变量):
|
||||
# VPS_MANAGER_DIR 项目根目录(默认 /opt/vps-manager)
|
||||
@@ -28,6 +29,31 @@ print_version() {
|
||||
echo "[$(date '+%F %T')] 当前版本: v${semver} (${commit})"
|
||||
}
|
||||
|
||||
# 同步 systemd 单元文件:deploy/ 下的 .service/.timer 与 /etc/systemd/system
|
||||
# 不一致时拷贝并 reload;timer 变更额外 restart 使新调度周期立即生效。
|
||||
# 每次都执行(而非仅版本更新时),保证单元变更不依赖代码变更触发。
|
||||
sync_units() {
|
||||
local changed=0 f base
|
||||
for f in "$APP_DIR"/deploy/*.service "$APP_DIR"/deploy/*.timer; do
|
||||
[ -f "$f" ] || continue
|
||||
base=$(basename "$f")
|
||||
if ! cmp -s "$f" "/etc/systemd/system/$base"; then
|
||||
cp "$f" "/etc/systemd/system/$base"
|
||||
echo "[$(date '+%F %T')] 单元已更新: $base"
|
||||
changed=1
|
||||
case "$base" in
|
||||
*.timer) systemctl restart "$base" 2>/dev/null || true ;;
|
||||
esac
|
||||
fi
|
||||
done
|
||||
if [ "$changed" -eq 1 ]; then
|
||||
systemctl daemon-reload
|
||||
echo "[$(date '+%F %T')] systemd 单元同步完成"
|
||||
fi
|
||||
}
|
||||
|
||||
sync_units
|
||||
|
||||
git fetch -q origin "$BRANCH"
|
||||
|
||||
LOCAL=$(git rev-parse HEAD)
|
||||
|
||||
Reference in New Issue
Block a user