qiangdanxitong/deploy_from_git.sh

90 lines
2.5 KiB
Bash
Executable File

#!/bin/bash
###############################################################################
# 从Git拉取代码并部署到服务器
# 服务器: 45.192.99.48
###############################################################################
SERVER_IP="45.192.99.48"
SERVER_USER="root"
SERVER_PASSWORD="1blZllMIp7"
APP_DIR="/opt/designhub"
GIT_REPO="http://chenpei:jsjj654321@git.1080p.hk/chenpei/qiangdanxitong.git"
# 颜色定义
GREEN='\033[0;32m'
BLUE='\033[0;34m'
RED='\033[0;31m'
NC='\033[0m'
echo "========================================"
echo -e "${GREEN}从Git拉取代码并部署${NC}"
echo "========================================"
echo ""
echo "服务器: ${SERVER_IP}"
echo "Git仓库: ${GIT_REPO}"
echo ""
# 检查sshpass
if ! command -v sshpass &> /dev/null; then
echo "正在安装sshpass..."
if [[ "$OSTYPE" == "darwin"* ]]; then
brew install hudochenkov/sshpass/sshpass 2>/dev/null || {
echo -e "${RED}请先安装sshpass: brew install hudochenkov/sshpass/sshpass${NC}"
exit 1
}
fi
fi
# 在服务器上执行部署
sshpass -p "${SERVER_PASSWORD}" ssh -o StrictHostKeyChecking=no ${SERVER_USER}@${SERVER_IP} << ENDSSH
set -e
echo -e "${BLUE}[1/6] 检查Git仓库...${NC}"
cd ${APP_DIR}
if [ ! -d ".git" ]; then
echo "初始化Git仓库..."
# 先暂存现有文件
git init
git remote add origin ${GIT_REPO} 2>/dev/null || git remote set-url origin ${GIT_REPO}
# 添加现有文件到Git
git add -A 2>/dev/null || true
git commit -m "Backup existing files" 2>/dev/null || true
# 拉取最新代码(允许合并)
git pull origin main --allow-unrelated-histories || git fetch origin main:main && git checkout main
else
echo "拉取最新代码..."
git fetch origin
git reset --hard origin/main
fi
echo -e "${BLUE}[2/6] 备份当前JAR文件...${NC}"
if [ -f "${APP_DIR}/designhub.jar" ]; then
cp ${APP_DIR}/designhub.jar ${APP_DIR}/designhub.jar.backup.\$(date +%Y%m%d_%H%M%S) || true
fi
echo -e "${BLUE}[3/6] 构建后端...${NC}"
cd ${APP_DIR}/backend
mvn clean package -DskipTests
echo -e "${BLUE}[4/6] 复制JAR文件...${NC}"
cp target/designhub-backend-1.0.0.jar ${APP_DIR}/designhub.jar
echo -e "${BLUE}[5/6] 重启服务...${NC}"
systemctl restart designhub
echo ""
echo -e "${GREEN}等待服务启动...${NC}"
sleep 5
echo ""
echo -e "${BLUE}[6/6] 检查服务状态...${NC}"
systemctl status designhub --no-pager | head -15
echo ""
echo -e "${GREEN}✅ 部署完成!${NC}"
ENDSSH
echo ""
echo -e "${GREEN}✅ 部署脚本执行完成!${NC}"