#!/bin/bash set -e export NODE_HOME=/data/tools/node-16 export PATH=$NODE_HOME/bin:$PATH cd /data/saas-web || exit # ========== 更新最新代码(先检查冲突,无冲突才更新) ========== echo "检查最新代码更新..." BRANCH=$(git rev-parse --abbrev-ref HEAD) if ! git fetch origin "$BRANCH"; then echo "拉取远程分支失败,终止部署" exit 1 fi LOCAL_HEAD=$(git rev-parse HEAD) REMOTE_HEAD=$(git rev-parse "origin/$BRANCH") if [ "$LOCAL_HEAD" = "$REMOTE_HEAD" ]; then echo "本地代码已是最新,无需更新" else echo "本地与远程不一致,先进行冲突检测..." if git merge --no-commit --no-ff "origin/$BRANCH" > /tmp/git_merge_check.log 2>&1; then git merge --abort >/dev/null 2>&1 || true echo "无冲突,开始更新代码..." if ! git pull origin "$BRANCH"; then echo "代码更新失败,终止部署" exit 1 fi echo "代码更新完成" else echo "!!! 检测到冲突(或本地未提交修改阻止更新),详情:" cat /tmp/git_merge_check.log CONFLICT_FILES=$(git diff --name-only --diff-filter=U 2>/dev/null) if [ -n "$CONFLICT_FILES" ]; then echo "冲突文件列表:" echo "$CONFLICT_FILES" fi git merge --abort >/dev/null 2>&1 || true echo "存在冲突,终止更新并退出部署" exit 1 fi fi echo '开始安装依赖' /data/tools/node-16/bin/npm --registry=http://registry.npmmirror.com install echo '开始构建' /data/tools/node-16/bin/npm --registry=http://registry.npmmirror.com run build:prod zip -r saas-web.zip saas-web echo '开始传输..' scp -P 22 -o "ProxyCommand ssh -W %h:%p root@47.115.213.168" saas-web.zip root@192.168.1.158:/data/services/saas-web.zip echo "开始替换..." ssh -p 22 -o "ProxyCommand ssh -W %h:%p root@47.115.213.168" root@192.168.1.158 "cd /data/services; unzip -o saas-web.zip" echo "上线成功...." rm -rf saas-web rm -rf saas-web.zip echo "上线完毕...."