在mac-os-x Yosemite上调用“npm”时,Jenkins构build步骤失败

在我开始之前,我想说我已经检查了这些答案:

Jenkins构build步骤在'npm install <whatever>'上失败

Jenkin的构build在npm安装上失败

现在,我正在处理这个问题已经有一段时间了,于是我尝试了一堆东西。

首先,我通过自制软件安装了node + npm。 一个简单的$ node -v$ npm -v与v0.10.36节点和v2.3。*的npm版本相呼应,这也意味着我在path中拥有它们,并且在terminal中调用它们时工作。

只需添加node -v; npm -v node -v; npm -v到Jenkins的执行shell并没有这样做。 经过一些修补之后,我把$: which node在terminal中产生的$: which node复制到上面提到的脚本中,现在看起来像这样: /usr/local/bin/node ,显然这很有效。 Jenkins构build成功,并在控制台输出中自豪地显示了“node-v0.10.36”。

在为'npm'正好是/usr/local/bin/npm --version情况下做同样的事情/usr/local/bin/npm --version计算机上的神不再那么仁慈了。 一个很大的' env:node:这个文件或目录 '错误被抛出,整个构build失败。

失败的实际命令是$ /bin/sh -xe /var/folders/wr/g_dl81tn5_x0t_yz3jw602cr0000gn/T/hudson8770480548136671253.sh和“令人惊讶”,当我在terminal成功运行相同的命令。

我也卸载了自制软件节点&npm版本,然后通过软件包pipe理器安装。 相同的结果。

最终我也做到了这一点: https : //gist.github.com/DanHerbert/9520689 ,没有运气。

笔记:

  • 我正在运行Jenkins 1.613,并尝试1.5 **
  • 我没有创build一个“jenkins”特定用户,而是我使用pipe理员。 这恰好与Jenkins运行的用户相同,因为who am i在可执行脚本中的命令产生pipe理员的用户名。
  • sudo'ing不帮助
  • 我也在虚拟环境中运行整个事情 – stream浪汉
  • 我没有将Jenkins作为deamon运行,因为它与xtools相冲突,而是一个简单的过程
  • 我也尝试了jenkins-node插件与各种configuration(可以详细如果需要)

非常感谢您的帮助,如果您需要其他信息,屏幕截图,日志等,请告诉我们。

我find了自己的解决scheme。 问题是,尽pipe在shell中可见的PATH没有被导出用于Jenkins作业,所以,第一种解决方法,如在这里find的,是在实际的脚本中导出它,如下所示:

在这里输入图像描述

但这感觉像一个黑客!

正确和优雅的解决scheme是使用Jenkins EnvInject插件,并在configuration页面上添加属性内容textarea中的path,如下所示:

在这里输入图像描述