中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

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

现象描述

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

可能原因

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

处理步骤

  • 方案一

    在服务器中“~/.bashrc”文件中添加对应环境变量后,重启Jenkins服务。

    systemctl daemon-reload
    systemctl restart jenkins
  • 方案二
    1. 创建“~/jenkins.bashrc”文件,添加对应命令的环境变量,例如:
      export HELLO_WORLD=/opt/path/helloworld
      export PATH=$HELLO_WORLD/bin:$PATH
    2. 在流水线脚本中添加以下shell命令。
      source ~/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