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 版本(需 Jenkins 安装 NodeJS 插件并配置同名工具) NODEJS_TOOL = 'NodeJS-20' } options { buildDiscarder(logRotator(numToKeepStr: '10')) timeout(time: 30, unit: 'MINUTES') timestamps() } stages { stage('Checkout') { steps { checkout scm } } stage('Install & Build') { steps { nodejs(nodeJSInstallationName: env.NODEJS_TOOL) { sh ''' 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() } } }