pipeline { agent any tools { nodejs 'NodeJS16' } environment { DEPLOY_DIR = '/data/nginx/www/fafamall/demo' // 主节点部署目录 SLAVE_IP = '172.16.0.10' // 从节点 IP SLAVE_DEPLOY_DIR = '/data/nginx/www/fafamall/demo' // 从节点目标目录(与主节点一致) SSH_PORT = '2203' // 从节点 SSH 端口 SSH_KEY = '/root/.ssh/id_rsa' // Jenkins 服务器(主节点)免密私钥路径 DIST_PATH = 'dist' // 编译产物目录(与 npm run build 输出目录一致) } stages { stage('拉取代码') { steps { checkout scm } } stage('安装依赖') { steps { sh ''' echo "清理旧依赖..." rm -rf node_modules package-lock.json npm cache clean --force echo "设置国内镜像源加速..." npm config set registry https://registry.npmmirror.com # 安装其他依赖 npm install ''' } } stage('构建项目') { steps { sh 'npm run build' // 验证构建产物是否存在(避免空同步) 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}" ''' } } } post { success { echo '🎉 项目部署+从节点同步全部成功!' } failure { echo '❌ 项目部署/同步失败,请排查问题后重试!' } } }