在 mac-os-x Yosemite 上调用 "npm" 时 Jenkins 构建步骤失败

Jenkins build step fails when calling "npm" on mac-os-x Yosemite

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

Jenkins build step fails on 'npm install <whatever>'

Jenkin's build failing on npm install

现在,我已经处理这个问题一段时间了,因此我尝试了很多东西。

首先,我通过自制软件安装了 node + npm。一个简单的 $ node -v$ npm -v 对应节点的版本 v0.10.36 和 npm 的 v2.3.*,这也意味着我将它们放在路径中,它们在终端中调用时工作。

简单地将node -v; npm -v添加到执行shell并没有做到这一点。经过一番修改后,我将终端中生成的 $: which node 复制到上面提到的脚本,现在看起来像这样: /usr/local/bin/node 并且显然有效。 Jenkins 构建成功,'node-v0.10.36' 自豪地显示在 控制台输出 中。

当对 'npm' 做同样的事情时,碰巧是 /usr/local/bin/npm --version,计算之神不再那么仁慈了。这次抛出一个很大的'env: node: No such file or directory'错误,整个构建失败。

实际失败的命令是 $ /bin/sh -xe /var/folders/wr/g_dl81tn5_x0t_yz3jw602cr0000gn/T/hudson8770480548136671253.sh 和 "surprisingly" 当我 运行 在终端中执行相同的命令时它会成功。

我还卸载了自制节点和 npm 版本,然后通过包管理器安装了它们。相同的结果。

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

备注:

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

我找到了自己的解决方案。问题是 PATH 虽然在 shell 中可见,但并未为 Jenkins 作业导出,因此,第一个解决方法,如此处所示,是在实际脚本中导出它,如下所示:

但这感觉像是一个 hack!

正确而优雅的解决方案是使用Jenkins EnvInject Plugin并在配置页面添加的Properties content textarea中导出路径,如下所示: