我们在使用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