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

标签 node.js macos jenkins npm vagrant

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

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

Jenkin's build failing on npm install

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

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

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

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

实际失败的命令是 $/bin/sh -xe/var/folders/wr/g_dl81tn5_x0t_yz3jw602cr0000gn/T/hudson8770480548136671253.sh 并且“令人惊讶地”当我在终端中运行相同的命令时它成功了。

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

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

注意事项:

  • 我正在运行 Jenkins 1.613 并尝试使用 1.5**
  • 我没有创建“Jenkins”特定用户,而是使用管理员。这恰好是 Jenkins 运行的同一用户,因为可执行脚本中的 who am i 命令会生成管理员的用户名。
  • sudo 没有帮助
  • 我还在虚拟环境中运行整个过程 - vagrant
  • 我没有将 Jenkins 作为守护进程运行,因为它与 xtools 有冲突,而是作为一个简单的进程运行
  • 我还尝试了带有各种配置的 jenkins-node 插件(如果需要可以详细说明)

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

最佳答案

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

enter image description here

但这感觉像是一个 hack!

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

enter image description here

关于node.js - 在 mac-os-x Yosemite 上调用 "npm"时 Jenkins 构建步骤失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30179557/

相关文章:

linux - 带有地址清理器的 Linux 和 Mac 的 Makefile

docker - 将 dockerfile 与 Jenkins 脚本化流水线语法一起使用

javascript - NODE.JS 使用 audioconcat ,配置了 ffmpeg 但仍然有问题

node.js - Sequelize 和 PostGIS 几何列未返回正确的 JSON

java - 应用程序菜单加速器和 OpenFileHandler 在 Swing 应用程序中不起作用

objective-c - 奇怪的 xcode 问题

javascript - Nodemailer 和 "SSL23_GET_SERVER_HELLO:unknown protocol"错误

node.js - 在Sequelize中选择列的子串

json - 在 Jenkins Pipeline 中从 Groovy 变量创建 JSON 字符串

具有多个 WebApps 的 Tomcat 实例 - session 相互干扰