当前位置: 首页 > news >正文

jenkins执行shell 找不到pm2

在 Jenkins 执行 Shell 时遇到pm2: command not found是非常常见的问题,根本原因是Jenkins 运行环境的 PATH 变量与用户登录环境不一致

以下是完整的解决方案,按推荐顺序排列:

1. 使用绝对路径(最可靠)

在 Jenkins 服务器上先查找 pm2 的真实路径:

bash

复制

which pm2 # 示例输出:/root/.nvm/versions/node/v16.15.1/bin/pm2

然后在 Jenkins Shell 中使用完整路径:

bash

复制

/root/.nvm/versions/node/v16.15.1/bin/pm2 restart your-app

2. 创建软链接(常用方案)

将 pm2 链接到系统 PATH 目录:

bash

复制

# 查找 pm2 路径 which pm2 # 输出如 /root/.nvm/versions/node/v16.15.1/bin/pm2 # 创建软链接(推荐 /usr/local/bin) sudo ln -s /root/.nvm/versions/node/v16.15.1/bin/pm2 /usr/local/bin/pm2 sudo ln -s /root/.nvm/versions/node/v16.15.1/bin/node /usr/local/bin/node sudo ln -s /root/.nvm/versions/node/v16.15.1/bin/npm /usr/local/bin/npm

3. 在 Jenkins Shell 中加载环境

在 Jenkins 的"执行 Shell"步骤开头添加:

bash

复制

# 加载系统环境变量 source /etc/profile # 如果使用 NVM,必须加载 NVM 脚本 export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # 然后执行 pm2 命令 pm2 restart your-app

4. 配置 Jenkins 全局环境变量

在 Jenkins 系统设置中:

  1. Manage Jenkins → System → Global Properties

  2. 勾选Environment variables

  3. 添加变量:

    • PATH/usr/local/bin:/usr/bin:/bin:/your/node/path

    • 或添加NODE_HOME/root/.nvm/versions/node/v16.15.1

5. 使用 npx(临时方案)

如果不想配置环境,可以直接使用 npx:

bash

复制

npx pm2 restart your-app

6. 权限问题处理

如果提示权限不足,确保 Jenkins 用户有权访问 pm2:

bash

复制

# 查看 Jenkins 运行用户 ps aux | grep jenkins # 如果是 jenkins 用户,建议用 root 运行或配置 sudo # 在 /etc/sudoers 中添加: jenkins ALL=(ALL) NOPASSWD: /usr/local/bin/pm2

然后在 Jenkins Shell 中使用:

bash

复制

sudo pm2 restart your-app

快速验证:在 Jenkins 中添加一个"执行 Shell"步骤,运行以下命令测试:

bash

复制

echo $PATH which node which pm2 pm2 --version

根据输出结果选择最适合你的解决方案。通常方案1或方案2能彻底解决大部分问题。

http://www.zskr.cn/news/116613.html

相关文章:

  • ViVeTool GUI:解锁Windows隐藏功能的图形化神器
  • Python注释:给代码“写说明书”,让程序会“说话”
  • Linux下创建线程:从入门到实践
  • 5分钟快速上手DWMBlurGlass:让你的Windows界面焕然一新
  • Python+Vue的图书馆借阅归还管理系统_ Pycharm django flask
  • 3步搞定李跳跳自定义规则:彻底告别手机弹窗的终极清净方案
  • 17、网络攻击与Apache服务器安全解析
  • Sist2搜索工具:快速构建个人知识库的终极指南
  • Flink状态监控实战:从数据倾斜到内存优化的完整解决路径
  • Headless Chrome Crawler终极指南:从零开始构建分布式爬虫系统
  • SystemInformer语言定制:从英文界面到多语言自由切换
  • SeedVR2:突破性AI视频增强技术,6GB显存实现专业级画质处理
  • 2025最新测评:SCIFIG科研绘图素材库,如何30分钟搞定“高颜值”SCI机制图
  • OkHttp跨平台网络库:构建多端统一API的高性能连接管理方案
  • 终极FreeMarker在线测试器:高效模板调试的免费神器
  • ViVeTool GUI:轻松解锁Windows隐藏功能的终极指南
  • 基于Spring Boot充电桩共享服务管理系统设计与实现(完整源码+万字论文+精品PPT)
  • 29、网络连接配置全攻略
  • EmotiVoice能否用于紧急疏散广播系统?可靠性验证
  • EmotiVoice在冥想引导音频中的舒缓语气呈现
  • EmotiVoice性能评测:响应速度、清晰度与情感丰富度全解析
  • 云服务器核心技术解析——虚拟化与分布式架构的奥秘
  • EmotiVoice是否支持商业用途?许可证条款解读
  • 5分钟掌握开源YouTube替代方案:Invidious隐私保护全攻略
  • EmotiVoice能否用于广播级音频制作?音质达标情况分析
  • Windows端口转发终极利器:PortProxyGUI图形化管理工具
  • EmotiVoice语音合成自动化标注辅助系统开发
  • 【收藏级】2025 动漫游戏 TRO 案件数据分析 + 跨境卖家风险防控实操手册
  • 告别机械音!EmotiVoice让AI语音真正‘像人’一样说话
  • Unitree机器人Python SDK终极指南:从零开始实现机器人控制