0%

jenkins 构建angular项目时的版本问题

今天想将一个angular的项目用jenkins来进行发布,但是无论怎么配置,jenkins运行shell的时候使用的是node 6.11,而不是node 8.11,但angular项目是只能运行在node 8.9及以上,这就很绝望,咋办?

检查了创建的发布项目是绝对没问题的,谷歌了半天,也没发现什么值得参考的消息,只能自己看了。

在服务器里面查看node的版本:

1
2
# node -v
v8.11.4

再查看node的路径:

1
2
# which node
/usr/local/bin/node

然后查看jenkins里面node的路径,让jenkins执行shell的时候里面添加语句:

1
echo $PATH

发现输出的是:

1
2
+ echo /sbin:/usr/sbin:/bin:/usr/bin
/sbin:/usr/sbin:/bin:/usr/bin

得,就是没有/usr/local/bin,那咋办?

我们先看看usr是指Unix System Resource,而不是User。通常/usr/bin下面的都是系统预装的可执行程序,而随着系统升级而改变。/usr/local/bin目录是给用户防止自己的可执行程序的地方,不会被系统升级而覆盖同名文件。如果两个目录下有相同的可执行程序,谁优先执行受到PATH环境变量的影响。

那么再看看我服务器里面的$PATH

1
2
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

果然啊,服务器里面正常使用node 8是因为环境变量里面,/usr/local/bin/usr/bin之前,而在jenkins里面,jenkins的环境变量/usr/local/bin/usr/bin之后,所以在jenkins里面使用的node是/usr/bin里面的node 6

ok,知道原因了我们可以得到解决办法,/usr/bin里面的node我们是不用删的,我们只需要在jenkins里面的环境变量之前加上usr/local/bin就ok了。

怎么加?

谷歌一下,你就知道。然而我谷歌了好久,都没一个具体的方法。尝试了在系统管理的节点那里添加环境变量来着,添加成功了,但是测试发布了一下,并没有起作用。

还是粗暴点,使用export命令。

export命令可以新增、修改或删除环境变量,供后续程序使用,我们希望使用/usr/local/bin来替换默认的那些环境变量,所以直接:

1
export PATH=/usr/local/bin:$PATH

我们在执行发布shell的时候,在export之前和之后分别来输出下环境变量,可以看到,在执行export之前是默认的/usr/bin,在执行export之后是我们系统里面的/usr/loca/bin。而且我们发布也正常了,good~


归根结底,是jenkins的环境变量读取的问题,奇诡了,之前也发布过,没这个问题,怎么忽然就这样了。。。。问题已解决,就是在执行shell之前先执行export命令修改环境变量为/usr/local/bin

啊,我这该死的,机智~😌