website/Jenkinsfile
2025-11-10 01:14:55 +08:00

88 lines
3.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/website' // 主节点部署目录
DIST_PATH = 'dist' // 编译产物目录
SLAVE_IP = '172.16.0.10' // 从节点 IP
SLAVE_DEPLOY_DIR = '/data/nginx/www/fafamall/website' // 从节点目标目录(与主节点一致)
SSH_PORT = '2203' // 从节点 SSH 端口
SSH_KEY = '/root/.ssh/id_rsa' // Jenkins 服务器(主节点)免密私钥路径
}
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 """
# 核心逻辑1. 远程创建从节点目录(不存在则创建) 2. rsync 同步文件
echo "开始同步主节点 ${DEPLOY_DIR} → 从节点 ${SLAVE_IP}:${SLAVE_DEPLOY_DIR}"
# 步骤1远程创建从节点目标目录-p 递归创建父目录,已存在不报错)
ssh -i ${SSH_KEY} -p ${SSH_PORT} -o StrictHostKeyChecking=no root@${SLAVE_IP} "mkdir -p ${SLAVE_DEPLOY_DIR}"
if [ \$? -ne 0 ]; then
echo "错误:从节点目录创建失败,请检查 SSH 免密/端口/权限"
exit 1
fi
# 步骤2rsync 同步文件(保持主从一致)
rsync -avz --delete \
-e "ssh -i ${SSH_KEY} -p ${SSH_PORT} -o StrictHostKeyChecking=no" \
${DEPLOY_DIR}/ \
root@${SLAVE_IP}:${SLAVE_DEPLOY_DIR}/
# 验证同步结果
if [ \$? -eq 0 ]; then
echo "✅ 从节点同步完成!主从目录已一致"
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 "🎉 整体部署+同步流程全部成功" }
failure { echo "❌ 部署/同步流程失败,请排查问题" }
}
}