显示“xxx:command not found”的解决办法
现象描述
在Jenkins流水线脚本中执行命令,显示“xxx:command not found”,但是登录shell,能成功执行当前命令。
可能原因
在服务器上修改环境变量PATH值,未在Jenkins流水线脚本执行环境上生效。
处理步骤
- 方案一
在服务器中“~/.bashrc”文件中添加对应环境变量后,重启Jenkins服务。
systemctl daemon-reload systemctl restart jenkins
- 方案二
- 创建“~/jenkins.bashrc”文件,添加对应命令的环境变量,例如:
export HELLO_WORLD=/opt/path/helloworld export PATH=$HELLO_WORLD/bin:$PATH
- 在流水线脚本中添加以下shell命令。
source ~/jenkins.bashrc
- 创建“~/jenkins.bashrc”文件,添加对应命令的环境变量,例如:
- 方案三
在节点配置中,添加环境变量设置,配置路径为“系统管理 > 节点管理 > 选择对应的节点 > 配置从节点 > 节点属性”。

- 方案一中,重启Jenkins服务后,只会应用用户环境变量“~/.bashrc”的修改,不会应用系统环境变量“/etc/profile”的修改。即通过“/etc/profile”来修改环境变量,不会在Jenkins上设置出对应的环境变量的值。
- 使用sudo执行命令时,默认只会在 “/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin”目录下查找,不会按照PATH值去查找。在这类情况下,建议不要使用sudo,如果一定需要使用sudo,可以通过添加该命令软链接到sudo查找目录下的方式修改(其他方式还有通过修改sudoers等,可自行查找修改方案)。
- 服务器上存在多个命令可执行版本,例如Java8、Java11,将Java执行的环境变量从Java8修改为Java11后,此时若依然使用的是Java8的版本,注意应该按照首部追加环境变量的方式进行修改。
执行命令时,系统会按照环境变量的值并按照首尾顺序进行查找。在已有多个可执行命令的服务器中,如果是尾部追加环境变量“$PATH:xxx”的方式,新的路径可能会被原有的路径覆盖,从而依然选中旧的版本,所以应该选择首部追加环境变量的方式“xxx:$PATH”。
# export PATH=/opt/path/binary/bin:$PATH