pipeline {
    agent any

    environment {
        // 部署目标
        DEPLOY_HOST = '120.26.186.130'
        DEPLOY_PATH = '/docker/middleware/nginx/html/alien_website/'
        // Jenkins 凭据 ID（SSH 私钥，需在 Jenkins 中预先配置）
        SSH_CREDENTIALS_ID = 'alien-website-deploy-ssh'
        // SSH 登录用户（按服务器实际用户修改）
        DEPLOY_USER = 'root'
        NODE_VERSION = '20'
    }

    options {
        buildDiscarder(logRotator(numToKeepStr: '10'))
        timeout(time: 30, unit: 'MINUTES')
        timestamps()
    }

    stages {
        stage('Checkout') {
            steps {
                checkout scm
            }
        }

        stage('Install & Build') {
            steps {
                sh '''
                    set -e

                    export NVM_DIR="$HOME/.nvm"
                    if [ ! -s "$NVM_DIR/nvm.sh" ]; then
                        echo "安装 nvm..."
                        curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
                    fi
                    . "$NVM_DIR/nvm.sh"

                    nvm install ${NODE_VERSION}
                    nvm use ${NODE_VERSION}

                    node -v
                    npm -v
                    npm ci
                    npm run build
                '''
            }
        }

        stage('Deploy') {
            steps {
                withCredentials([sshUserPrivateKey(
                    credentialsId: env.SSH_CREDENTIALS_ID,
                    keyFileVariable: 'SSH_KEY',
                    usernameVariable: 'SSH_USER'
                )]) {
                    sh '''
                        set -e

                        if [ ! -d dist ]; then
                            echo "错误: dist 目录不存在，构建可能失败"
                            exit 1
                        fi

                        chmod 600 "$SSH_KEY"
                        SSH_OPTS="-i $SSH_KEY -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"

                        echo "开始部署到 ${SSH_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}"

                        # 确保目标目录存在
                        ssh $SSH_OPTS ${SSH_USER}@${DEPLOY_HOST} \
                            "mkdir -p ${DEPLOY_PATH}"

                        # 将 dist 目录内容同步到网站根目录（不含 dist 文件夹本身）
                        rsync -avz --delete \
                            -e "ssh $SSH_OPTS" \
                            dist/ \
                            ${SSH_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}

                        echo "部署完成"
                    '''
                }
            }
        }
    }

    post {
        success {
            echo "网站已成功部署至 ${DEPLOY_HOST}:${DEPLOY_PATH}"
        }
        failure {
            echo '部署失败，请查看上方日志'
        }
        always {
            cleanWs()
        }
    }
}
