我们在使用Jenkins进行构建项目时,绝大部分会使用到maven、nodejs相关的命令,有很多小伙伴肯定遇到了明明在服务器已经安装好了maven、nodejs相关程序,并且在jenkins配置了maven但是在Jenkins shell、pipeline script中使用mvn、npm命令还是报command not found的错误,如下图:

但是在Jenkins中执行上述命令时就会报错:

其实是因为jenkins里面没有我们服务器path的环境变量,所以才会出现找不到命令的错误。

解决方案:

在Jenkins部署服务器输出一下PATH路径:

echo $PATH

然后在Jenkins -> Manager Jenkins -> Configure System中添加环境变量:

找到 Global properties,勾选中Environment variables,一个PATH变量以后保存

注:PATH是大写哦

此时我们再构建一下刚才的测试项目:

Jenkins系列文章:

一、 Jenkins 系列教程-史上最简单Jenkins教程,教你一天学会使用Jenkins利器

二、 Centos 安装nodejs

三、 Centos 安装Maven

四、 Linux下安装java JDK

五、 jenkins启动报错 Job for jenkins.service failed because the control process exited with error code.

六、 jenkins启动成功,警告Warning: jenkins.service changed on disk.

七、 Jenkins以root用户运行

八、 Jenkins配置中文语言

九、 Jenkins 报mvn:command not found、npm:command not found

十、 Jenkins批量删除构建历史

十一、 Jenkins 部署前后端分离构建多git项目,打包后远程部署服务器

十二、 ssh-copy-id输入密码后Permission denied, please try again.

十三、 Jenkins Publish over SSH、SSH免密登录、SCP免密传输、Jenkins远程传输文件、Jenkins远程部署

. 对于java或 maven 的路径的环境变量是放在/etc/profile中的, 而/etc/profile只有在用户登录的时候才会被load, Jenkins 在运行命令时,使用的是Non-login的方式,而这种方式在运行命令时,/etc/profile是不会被load进来的,所以 jenkins 只能在当前路径下寻找可执行文件 解决方式: 在 Jenkins 的设置中可以设置全局变量, jenkins 主页面->Manage Jenkins ->Configure System->Global P 增加环境变量 节点管理->配置从节点,勾选下面环境变量,点击新增,添加环境变量, maven 依赖java,添加JAVA_HOME、 MAVEN _HOME、PATH。 PATH中,$JAVA_HOME/bin:$ MAVEN _HOME/bin:$PATH 构建脚本中,增加source /etc/profile(这个是agent节点上的环境配置 ,不是master上的) 要安装任何其他必需的软件包,请创建您自己的Dockerfile : FROM jc21/ jenkins -node RUN yum -y install nameofmypackage SSH密钥 该容器将启动ssh服务器。 尽管对于Docker容器来说是不好的做法,但在这种情况下, Jenkins 仍需要轻松地连接到该主机。 SSH登录名仅接受SSH密钥,而不接受密码。 要覆盖此映像中的SSH密钥,您可以使用新密钥扩展上述方法,也可以在容器中安装新密钥。 Jenkins 节点配置 使用以下命令向 Jenkins 添加一些SSH凭据: 用户名: jenkins SSH密钥: jenkins 节点配置示例: mvn command not found Jenkins 内无法使用, mvn command not found,这里我解决的方式是将 mvn 命令也指向 / usr/bin/ mvn ,如下: local apache maven 本机shell命令可以执行, jenkins 任务中无法执行,则是 jenkins 没有加载/etc/profile导致,需要在 jenkins 调用shell脚本的最前面加一行脚本,#!/bin/bash -ilex,可以通过-i参数和-l参数让bash为login shell and interactive shell,就可以读取/etc/profile和~/.bash_profile等文件 #!/bin... 由此证明的确系统中安装的 cmake 并不在 Jenkins agent 的环境变量中。有两种手段可以解决该问题,一种是修改 Jenkins file 手动新增,另外一种是直接修改 agent 配置将 /usr/local/bin 添加到 PATH 环境变量中。在一台 macOS 的 anget 中,我们的 pipeline 脚本一直 错:cmake: command not found,但实际系统中已经通过 brew 安装过 cmake。执行where coscmd。复制出路径 ,使用全路径调用。 因为我的项目中用到了这个 pre-commit 但是最近突然 commit的时候 一直 这个: command not found后面才发现 原来是因为我使用了 nvm 管理node 导致node 路径发生了变化 找到了 node_modules/pre-commit/hooks 中配置node命令的那行然后我本地查找下node地址 which node 更换下。就恢复正常了。网上找的一些方法都不能直接用。害 还是要根据自己的项目情况进行使用关注我 持续更新前端知识... 【 npm install】放到脚本里面, Jenkins 执行脚本 错 [test] $ /bin/sh -xe /tmp/ jenkins 617246321908774027.sh + sh /home/sh/test.sh /home/sh/test.sh: line 7: npm : command not found 3.1、查询系统环境变量: echo $PATH [root@localhost /]# ec echo $PATH /usr/local/node/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/www_app/.local/bin:/home/www_app/bin 2、把服务器的环境变量添加到 jenkins Node Properties &... stage('1. pull') { steps { checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs. 一个前端同事想做自动化测试,然后在 jenkins 上添加了job后发现 nvm命令找不到: + pwd /home/work/dev/security-trafficpurchase + nvm /tmp/hudson6734131322717002015.sh: line 8: nvm: command not found Build step 'Execute shell' marked bu jenkins 如果写shell里,会发现很多常用的bash命令都无法使用, command not found 网上说原因是 jenkins 是不去path里找,而是/usr/bin里找,所以,不在这里面的命令是无法执行的. 怎么办呢? 可以在命令的上面source一下环境变量 如果没有显示上面的信息,则需要重新安装 maven 环境后再往下进行 第二步,创建软链接,因为 Jenkins 通过shell脚本调用 mvn 命令的时候,是从/usr/bin 文件夹中找命令的 sudo ln -s /data/apache- maven -3.6.3/bin/ mvn /usr/bin/ mvn sudo ln -s /data/apache- maven -3.6.3/bin/ mvn /usr/local/bin/ mvn