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 { sshagent(credentials: [env.SSH_CREDENTIALS_ID]) { sh ''' set -e if [ ! -d dist ]; then echo "错误: dist 目录不存在,构建可能失败" exit 1 fi echo "开始部署到 ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}" # 确保目标目录存在 ssh -o StrictHostKeyChecking=no ${DEPLOY_USER}@${DEPLOY_HOST} \ "mkdir -p ${DEPLOY_PATH}" # 将 dist 目录内容同步到网站根目录(不含 dist 文件夹本身) rsync -avz --delete \ -e "ssh -o StrictHostKeyChecking=no" \ dist/ \ ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH} echo "部署完成" ''' } } } } post { success { echo "网站已成功部署至 ${DEPLOY_HOST}:${DEPLOY_PATH}" } failure { echo '部署失败,请查看上方日志' } always { cleanWs() } } }