merchapp/java-mall-app-shop-admin/Jenkinsfile
panjunjie a2b5ce2ffc 重启 nginx
Signed-off-by: panjunjie <46790855@qq.com>
2025-11-10 01:17:06 +08:00

97 lines
4.2 KiB
Groovy
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

pipeline {
agent any
environment {
DEPLOY_DIR = '/data/nginx/www/fafamall/mchapp' // 主节点部署目录
DIST_PATH = './java-mall-app-shop-admin/dist/web' // 编译产物目录(按原脚本保留)
SLAVE_IP = '172.16.0.10' // 从节点 IP
SLAVE_DEPLOY_DIR = '/data/nginx/www/fafamall/mchapp' // 从节点目标目录(与主节点一致)
SSH_PORT = '2203' // 从节点 SSH 端口
SSH_KEY = '/root/.ssh/id_rsa' // 主节点免密私钥路径
}
stages {
stage('拉取代码并验证') {
steps {
checkout scm
sh """
[ -d "${DIST_PATH}" ] || { echo "错误:未找到 ${DIST_PATH} 文件夹"; exit 1; }
echo "${DIST_PATH} 验证通过"
"""
}
}
stage('主节点部署') {
steps {
sh """
mkdir -p ${DEPLOY_DIR}
rm -rf ${DEPLOY_DIR}/*
cp -r ${DIST_PATH}/* ${DEPLOY_DIR}/
echo "主节点部署完成:${DIST_PATH} → ${DEPLOY_DIR}"
"""
}
}
stage('同步到从节点') {
steps {
sh """
echo "========================================"
echo "开始同步主节点 → 从节点"
echo "主节点目录:${DEPLOY_DIR}"
echo "从节点信息:${SLAVE_IP}:${SLAVE_DEPLOY_DIR}SSH端口${SSH_PORT}"
echo "========================================"
# 步骤1远程创建从节点目标目录不存在则递归创建
echo "第一步:创建从节点目录..."
ssh -i ${SSH_KEY} \
-p ${SSH_PORT} \
-o StrictHostKeyChecking=no \
-o ConnectTimeout=10 \
root@${SLAVE_IP} \
"mkdir -p ${SLAVE_DEPLOY_DIR}"
# 检查目录创建结果
if [ \$? -ne 0 ]; then
echo "错误:从节点目录创建失败!请检查:"
echo "1. 主节点免密登录是否配置(私钥路径:${SSH_KEY}"
echo "2. 从节点 2203 端口是否放行"
echo "3. 从节点 root 权限是否正常"
exit 1
fi
# 步骤2rsync 同步文件(保持主从一致)
echo "第二步:执行 rsync 同步..."
rsync -avz \
--delete \
--exclude="*.log" \
-e "ssh -i ${SSH_KEY} -p ${SSH_PORT} -o StrictHostKeyChecking=no" \
${DEPLOY_DIR}/ \
root@${SLAVE_IP}:${SLAVE_DEPLOY_DIR}/
# 步骤3远程重启从节点 Nginx加载新代码
echo "第三步:重启从节点 Nginx 服务..."
ssh -i ${SSH_KEY} \
-p ${SSH_PORT} \
-o StrictHostKeyChecking=no \
-o ConnectTimeout=10 \
root@${SLAVE_IP} \
"systemctl restart nginx"
# 检查 Nginx 重启结果(容错处理:重启失败不终止流程,仅告警)
if [ \$? -eq 0 ]; then
echo "✅ 从节点 Nginx 重启成功!新代码已生效"
else
echo "⚠️ 警告:从节点 Nginx 重启失败!请手动执行以下命令排查:"
echo "ssh -i ${SSH_KEY} -p ${SSH_PORT} root@${SLAVE_IP} 'systemctl status nginx'"
echo "(同步已完成,仅 Nginx 重启失败,不影响代码一致性)"
fi
"""
}
}
}
post {
success { echo "🎉 主节点部署+从节点同步全部成功!" }
failure { echo "❌ 部署/同步失败,请排查问题后重试" }
}
}