显示“xxx:command not found”的解决办法

现象描述

在Jenkins流水线脚本中执行命令,显示“xxx:command not found”,但是登录shell,能成功执行当前命令。

可能原因

在服务器上修改环境变量PATH值,未在Jenkins流水线脚本执行环境上生效。

处理步骤

  • 方案一中,重启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