在 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,没有运气。
备注:
- 我是 运行ning Jenkins 1.613 并尝试使用 1.5**
- 我没有创建 "Jenkins" 特定用户,而是使用管理员。这恰好是与 Jenkins 运行s 相同的用户,因为可执行脚本中的
who am i
命令会产生管理员的用户名。
- sudo 没有帮助
- 我也运行在虚拟环境中完成所有事情 - vagrant
- 我不是 运行将 Jenkins 作为守护进程,因为它与 xtools 有冲突,而是作为一个简单的过程
- 我还尝试了具有各种配置的 jenkins-node 插件(如果需要可以详细说明)
非常感谢您的帮助,如果您需要任何其他信息、屏幕截图、日志等,请告诉我
我找到了自己的解决方案。问题是 PATH 虽然在 shell 中可见,但并未为 Jenkins 作业导出,因此,第一个解决方法,如此处所示,是在实际脚本中导出它,如下所示:
但这感觉像是一个 hack!
正确而优雅的解决方案是使用Jenkins EnvInject Plugin并在配置页面添加的Properties content textarea中导出路径,如下所示:
在开始之前,我想说我已经检查了这些答案:
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,没有运气。
备注:
- 我是 运行ning Jenkins 1.613 并尝试使用 1.5**
- 我没有创建 "Jenkins" 特定用户,而是使用管理员。这恰好是与 Jenkins 运行s 相同的用户,因为可执行脚本中的
who am i
命令会产生管理员的用户名。 - sudo 没有帮助
- 我也运行在虚拟环境中完成所有事情 - vagrant
- 我不是 运行将 Jenkins 作为守护进程,因为它与 xtools 有冲突,而是作为一个简单的过程
- 我还尝试了具有各种配置的 jenkins-node 插件(如果需要可以详细说明)
非常感谢您的帮助,如果您需要任何其他信息、屏幕截图、日志等,请告诉我
我找到了自己的解决方案。问题是 PATH 虽然在 shell 中可见,但并未为 Jenkins 作业导出,因此,第一个解决方法,如此处所示,是在实际脚本中导出它,如下所示:
但这感觉像是一个 hack!
正确而优雅的解决方案是使用Jenkins EnvInject Plugin并在配置页面添加的Properties content textarea中导出路径,如下所示: