From 196c0b08375e62323789db838737c8d4dc8cf80d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=A8=E9=B1=BC=E5=92=8C=E9=87=91=E9=B1=BC?= <1711559666@qq.com> Date: Sat, 24 Jan 2026 13:38:40 +0800 Subject: [PATCH] Update Jenkinsfile --- Jenkinsfile | 97 +++++++++++++++++++++++++++-------------------------- 1 file changed, 49 insertions(+), 48 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 47c5e0f..b78f50b 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -74,55 +74,56 @@ pipeline { } } - stage('Deploy via SSH') { - steps { - withEnv([]) { - echo "通过 SSH 部署到宿主机: ${HOST_TARGET}" - sh ''' - # 1. 宿主机创建备份目录(通过 SSH 执行宿主机命令) - #ssh -i -p "${HOST_PASS}" ssh -o StrictHostKeyChecking=no ${HOST_USER}@${HOST_IP} "mkdir -p ${HOST_BACKUP}" - # 使用SSH密钥认证 - ssh -i ${SSH_KEY_PATH} -o StrictHostKeyChecking=no ${HOST_USER}@${HOST_IP} "mkdir -p ${HOST_BACKUP}" - - - # 2. 宿主机备份原有部署目录(如有) - ssh -i ${SSH_KEY_PATH} -o StrictHostKeyChecking=no ${HOST_USER}@${HOST_IP} " - if [ -d '${HOST_TARGET}' ]; then - TIMESTAMP=$(date +%Y%m%d%H%M%S) - mv '${HOST_TARGET}' '${HOST_BACKUP}/backup_$TIMESTAMP' - fi - " - - # 3. SCP 传输构建产物到宿主机 - ssh -i ${SSH_KEY_PATH} scp -r -o StrictHostKeyChecking=no build-output/* ${HOST_USER}@${HOST_IP}:${HOST_TARGET}/ - - # 4. 宿主机修复目录权限(确保 Web 服务可访问) - ssh -i ${SSH_KEY_PATH} -o StrictHostKeyChecking=no ${HOST_USER}@${HOST_IP} "chmod -R 755 ${HOST_TARGET}" - - # 安装后端生产依赖(避免复制 node_modules,减少体积) - echo "安装后端生产依赖..." - cd ${PROJECT_DEPLOY_DIR}/backend - npm install --production - - # 启动/重启后端服务(根据项目实际启动方式调整) - echo "启动后端服务..." - # 方式1:直接通过 node 启动(前台运行,适合简单场景) - # nohup node dist/index.js > ${PROJECT_DEPLOY_DIR}/backend.log 2>&1 & - - - - # 配置目录权限(确保 Web 服务器和 Node 服务可访问) - chmod -R 755 ${PROJECT_DEPLOY_DIR} - # 若 Web 服务器用户为 www(如 Nginx/Apache),添加权限 - if id -u www >/dev/null 2>&1; then - chown -R www:www ${PROJECT_DEPLOY_DIR} + stage('Deploy via SSH') { + steps { + withEnv([]) { + echo "通过 SSH 部署到宿主机: ${HOST_TARGET}" + sh ''' + # 1. 检查SSH密钥文件是否存在 + if [ ! -f "${SSH_KEY_PATH}" ]; then + echo "❌ 错误: SSH密钥文件不存在: ${SSH_KEY_PATH}" + exit 1 + fi + + # 2. 设置密钥权限(确保只有所有者可读) + chmod 600 ${SSH_KEY_PATH} + + # 3. 宿主机创建备份目录 + ssh -i ${SSH_KEY_PATH} -o StrictHostKeyChecking=no ${HOST_USER}@${HOST_IP} "mkdir -p ${HOST_BACKUP}" + + # 4. 宿主机备份原有部署目录(如有) + ssh -i ${SSH_KEY_PATH} -o StrictHostKeyChecking=no ${HOST_USER}@${HOST_IP} " + if [ -d '${HOST_TARGET}' ]; then + TIMESTAMP=$(date +%Y%m%d%H%M%S) + mv '${HOST_TARGET}' '${HOST_BACKUP}/backup_$TIMESTAMP' fi - - echo "✅ 部署完成!" - echo "前端访问地址: http://192.168.10.168/aistudy" - echo "后端服务目录: ${PROJECT_DEPLOY_DIR}/backend" - ''' - } + " + + # 5. SCP传输构建产物到宿主机(注意:scp命令的-i参数位置) + scp -i ${SSH_KEY_PATH} -r -o StrictHostKeyChecking=no build-output/* ${HOST_USER}@${HOST_IP}:${HOST_TARGET}/ + + # 6. 宿主机修复目录权限 + ssh -i ${SSH_KEY_PATH} -o StrictHostKeyChecking=no ${HOST_USER}@${HOST_IP} "chmod -R 755 ${HOST_TARGET}" + + # 7. 安装后端生产依赖 + echo "安装后端生产依赖..." + ssh -i ${SSH_KEY_PATH} -o StrictHostKeyChecking=no ${HOST_USER}@${HOST_IP} " + cd ${HOST_TARGET}/backend + npm install --production + " + + # 8. 配置目录权限 + ssh -i ${SSH_KEY_PATH} -o StrictHostKeyChecking=no ${HOST_USER}@${HOST_IP} " + chmod -R 755 ${HOST_TARGET} + if id -u www >/dev/null 2>&1; then + chown -R www:www ${HOST_TARGET} + fi + " + + echo "✅ 部署完成!" + echo "前端访问地址: http://192.168.10.168/aistudy" + echo "后端服务目录: ${HOST_TARGET}/backend" + ''' } } }