news 2026/4/16 12:38:51

jenkins执行shell 找不到pm2

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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能彻底解决大部分问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 9:08:01

【spring源码】从废弃的XmlBeanFactory到XmlBeanDefinitionReader

从废弃的XmlBeanFactory到XmlBeanDefinitionReader 统一术语 在开始之前,我们先明确几个关键术语: BeanFactory:Spring 容器的基础接口,负责 Bean 的创建、管理和获取BeanDefinition:Bean 的定义信息,包…

作者头像 李华
网站建设 2026/4/16 9:03:55

Linux下创建线程:从入门到实践

🐧 Linux下创建线程:从入门到实践 📚 线程基础概念🔧 Linux线程创建方法1. 基本线程创建2. 带参数的线程 ⚙️ 线程属性设置🔄 线程同步机制1. 互斥锁(Mutex)2. 条件变量(Condition …

作者头像 李华
网站建设 2026/4/16 10:45:32

《网络数据安全风险评估办法》出台在即,CCRC-DSA成关键人才!

随着国家互联网信息办公室在2025年12月发布《网络数据安全风险评估办法(征求意见稿)》,我国数据安全监管的“另一只靴子”即将落地。这份《办法》首次在国家法规层面,为企业开展数据安全风险评估构筑了强制性、系统化的操作框架&a…

作者头像 李华
网站建设 2026/4/16 2:07:38

魔兽世界:私服复刻经典版本让玩家重新回到60级的艾泽拉斯大陆

在游戏世界里,魔兽世界私服是一个特别的存在。它为一些玩家提供了重温经典的机会,让那些因各种原因无法在官服继续游戏的人,能再次踏入艾泽拉斯大陆。许多玩家在私服中找回了曾经在魔兽世界里的热血与激情,和老友们重新组队刷本&a…

作者头像 李华
网站建设 2026/4/16 11:02:43

26、Linux网络防御与入侵检测全解析

Linux网络防御与入侵检测全解析 1. iptables基础 iptables可用于设置、维护和检查Linux内核中指定的IP数据包过滤规则表。规则表包含两种链: - 内置链 - 用户自定义链 每条链由一组规则组成,这些规则用于匹配一组数据包,并确定匹配数据包时应采取的操作。iptables的使用…

作者头像 李华
网站建设 2026/4/11 15:58:18

Python+Vue的中医院问诊系统的设计与实现 私聊+可视化 Pycharm django flask

这里写目录标题项目介绍项目展示详细视频演示技术栈文章下方名片联系我即可~解决的思路开发技术介绍性能/安全/负载方面python语言Django框架介绍技术路线关键代码详细视频演示收藏关注不迷路!!需要的小伙伴可以发链接或者截图给我 项目介绍 本系统共有…

作者头像 李华