You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Jenkins将Node.js应用部署至远程主机?

如何在Jenkins中部署独立的Node.js项目到远程服务器?

看起来你已经搞定了Jenkins拉取GitLab代码的环节,接下来要解决的就是跨服务器部署的核心问题——毕竟Jenkins、Node服务器、GitLab是完全独立的,关键是让Jenkins能安全地远程操作Node服务器,下面一步步来:

第一步:先搞定Jenkins与Node服务器的SSH免密登录

要让Jenkins能远程执行命令、传输文件,首先得让Jenkins服务器能免密登录到Node服务器,这样部署时不用手动输密码:

  • 登录到Jenkins服务器,切换到Jenkins运行用户(一般是jenkins用户),执行ssh-keygen -t rsa -b 4096,一路按回车用默认配置即可,这会在~/.ssh目录下生成id_rsa(私钥)和id_rsa.pub(公钥)
  • 把id_rsa.pub里的内容复制出来,登录到Node服务器,找到你要部署的用户的~/.ssh/authorized_keys文件(如果没有就新建一个),把公钥内容粘贴进去,保存后记得设置权限:chmod 600 ~/.ssh/authorized_keys、chmod 700 ~/.ssh
  • 测试连接:在Jenkins服务器上执行ssh 你的Node服务器用户名@Node服务器IP,如果能直接登录,说明免密配置成功

第二步:修改Jenkinsfile,完善部署流程

你原来的Jenkinsfile只有简单的scp命令,我们需要扩展成完整的部署流程,包括传代码、装依赖、启动服务。这里给你一个实用的示例,你可以根据项目调整:

pipeline {
    agent any
    triggers {
        pollSCM('* * * * *') // 每分钟轮询GitLab,有代码变更就触发部署
    }
    // 定义环境变量,后续修改更方便
    environment {
        NODE_SERVER_IP = '你的Node服务器IP地址'
        NODE_SERVER_USER = 'Node服务器上的操作用户名'
        DEPLOY_DIR = '/opt/my-node-app' // 远程服务器的项目部署目录
    }
    stages {
        stage('拉取最新代码') {
            steps {
                checkout scm // Jenkins自动拉取GitLab代码,显式写出更清晰
            }
        }
        stage('同步代码到Node服务器') {
            steps {
                sh """
                    # 先在远程服务器创建部署目录(不存在则新建)
                    ssh ${NODE_SERVER_USER}@${NODE_SERVER_IP} "mkdir -p ${DEPLOY_DIR}"
                    # 同步Jenkins工作区代码到远程,排除.git、node_modules等无用文件
                    scp -r ./* ${NODE_SERVER_USER}@${NODE_SERVER_IP}:${DEPLOY_DIR}/
                """
            }
        }
        stage('远程安装依赖并启动服务') {
            steps {
                sh """
                    ssh ${NODE_SERVER_USER}@${NODE_SERVER_IP} "
                        cd ${DEPLOY_DIR}
                        # 安装生产环境依赖,跳过开发依赖提升速度
                        npm install --production
                        # 用pm2管理Node进程(崩溃自动重启,比直接node app.js更稳定)
                        # 先检查pm2是否安装,未安装则全局安装
                        if ! command -v pm2 &> /dev/null; then
                            npm install -g pm2
                        fi
                        # 重启应用,首次启动则直接启动
                        pm2 restart app.js || pm2 start app.js --name 'my-node-service'
                        # 保存pm2进程列表,确保服务器重启后自动启动应用
                        pm2 save
                        pm2 startup
                    "
                """
            }
        }
    }
    // 部署完成后的状态提示
    post {
        success {
            echo '✅ Node项目部署成功!'
        }
        failure {
            echo '❌ 部署失败,请查看Jenkins日志排查问题!'
        }
    }
}

一些实用细节提醒

  • 如果是前端项目(如React/Vue),需要先构建再部署:可以在Jenkins本地先执行npm install && npm run build,再把dist目录同步到远程服务器的静态文件目录
  • 若Node服务器有防火墙,需确保Jenkins服务器IP能访问Node服务器的22端口(SSH),以及Node应用对外暴露的端口
  • 不想用pm2的话,也可以用systemd管理Node进程:把启动命令写成systemd服务脚本,在Jenkins里执行systemctl restart your-service-name即可
  • 觉得原生ssh/scp繁琐的话,可安装Jenkins的SSH插件,用sshCommand、sshPut等步骤简化操作,不过原生命令无需额外插件,兼容性更好

内容的提问来源于stack exchange,提问作者ace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:57:26