From 918229cb8488b93eed6529aed691875c7babcff5 Mon Sep 17 00:00:00 2001 From: panjunjie <46790855@qq.com> Date: Mon, 10 Nov 2025 01:05:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BB=8E=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E9=83=A8=E7=BD=B2=E6=96=87=E4=BB=B6=E5=90=8C=E6=AD=A5=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加从节点部署文件同步逻辑。 Signed-off-by: panjunjie <46790855@qq.com> --- Jenkinsfile | 46 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 11a17eb..2b0fc69 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -2,8 +2,12 @@ pipeline { agent any environment { - DEPLOY_DIR = '/data/nginx/www/fafamall/website' - DIST_PATH = 'dist' + 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 { @@ -17,20 +21,50 @@ pipeline { } } - stage('部署') { + stage('主节点部署') { steps { sh """ mkdir -p ${DEPLOY_DIR} rm -rf ${DEPLOY_DIR}/* cp -r ${DIST_PATH}/* ${DEPLOY_DIR}/ - echo "部署完成:${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 + + # 步骤2:rsync 同步文件(保持主从一致) + 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 """ } } } post { - success { echo "✅ 部署成功" } - failure { echo "❌ 部署失败" } + success { echo "🎉 整体部署+同步流程全部成功" } + failure { echo "❌ 部署/同步流程失败,请排查问题" } } } \ No newline at end of file