57 lines
1.9 KiB
Bash
57 lines
1.9 KiB
Bash
#!/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 "上线完毕...."
|