java-mall-app/Jenkinsfile
panjunjie c63783a31d 增加从节点部署文件同步逻辑
增加从节点部署文件同步逻辑

Signed-off-by: panjunjie <46790855@qq.com>
2025-11-10 01:12:58 +08:00

106 lines
4.8 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/h5' // 主节点部署目录(保留原配置)
DIST_PATH = 'dist' // 编译产物目录(保留原配置)
SLAVE_IP = '172.16.0.10' // 从节点 IP与之前一致
SLAVE_DEPLOY_DIR = '/data/nginx/www/fafamall/h5' // 从节点目标目录(与主节点一致)
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('同步到从节点并重启 Nginx') {
steps {
sh """
echo "========================================"
echo "开始同步主节点 → 从节点h5 项目)+ 重启 Nginx"
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" \
--exclude="*.tmp" \
-e "ssh -i ${SSH_KEY} -p ${SSH_PORT} -o StrictHostKeyChecking=no" \
${DEPLOY_DIR}/ \
root@${SLAVE_IP}:${SLAVE_DEPLOY_DIR}/
# 检查同步结果,失败则终止
if [ \$? -eq 0 ]; then
echo "✅ 从节点同步成功!主从 h5 目录完全一致"
else
echo "❌ 从节点同步失败!请查看 Jenkins 控制台日志详情"
exit 1
fi
# 步骤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 "🎉 h5 项目 - 主节点部署+从节点同步+Nginx重启全部完成" }
failure { echo "❌ h5 项目 - 部署/同步流程失败,请排查问题后重试" }
}
}