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 '❌ 项目部署/同步失败，请排查问题后重试！'
        }
    }
}