如何通过Jenkins在远程服务器执行shell命令完成Node项目PM2部署
问题排查与修复方案
原有脚本错误原因
- ssh命令格式错误:远程服务器地址和目标路径不能拼接在一起,
username@ip/backend的写法不符合ssh语法,会直接导致连接失败 - 后续命令执行位置错误:你写在ssh行之后的
npm install等命令默认执行在Jenkins本地机器,而非远程服务器,完全达不到预期效果 - 启动逻辑和需求不符:你原本写的
node server.js没有用到PM2,也没有重载pm2.json的逻辑
正确脚本实现
前置校验
先确认以下前置条件已经满足:
- Jenkins机器上存放的私钥
privKey权限设置为600(ssh要求私钥不能有其他用户可读权限,否则会拒绝连接) - 远程服务器上的对应用户已经全局安装PM2,且PM2路径已经加入该用户的环境变量中
- 远程服务器的
/backend目录对应用户有读写执行权限
可直接使用的Shell脚本
#!/bin/bash # 替换为你自己的实际参数 REMOTE_USER="实际用户名" REMOTE_IP="实际服务器IP" PRIVATE_KEY_PATH="Jenkins上私钥的实际路径,例如./privKey" REMOTE_PROJECT_PATH="/backend" # 远程批量执行所有命令 ssh -i ${PRIVATE_KEY_PATH} ${REMOTE_USER}@${REMOTE_IP} << EOF cd ${REMOTE_PROJECT_PATH} # 安装生产环境依赖 npm install --production # 重载PM2配置,实现零宕机重启 pm2 reload pm2.json # 可选:验证PM2进程运行状态 pm2 status EOF
常见问题补充
如果执行时提示找不到pm2命令,可以先在远程服务器上执行which pm2拿到PM2的绝对路径,把脚本里的pm2替换为该绝对路径即可。如果连接时报错,可以在ssh命令上加-v参数输出详细连接日志排查问题。
内容的提问来源于stack exchange,提问作者user15564093
相关产品推荐
相关产品推荐

