Jenkins build step fails when calling “npm” on mac

2019-03-16 07:32发布

问题:

Before I start, I want to say that I already checked these answers:

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

Jenkin's build failing on npm install

Now, I'm dealing with this issue for a while already and thus I tried a bunch of stuff.

Firstly, I installed node + npm via homebrew. A simple $ node -v and $ npm -v echoed the version v0.10.36 for node and v2.3.* for npm, which also means I HAVE THEM IN THE PATH and they work while called in the terminal.

Simply adding node -v; npm -v to the execute shell in Jenkins didn't do it. After a bit of tinkering I copied what $: which node yielded in the terminal to the above mentioned script, which now looked like this: /usr/local/bin/node and apparently that worked. The Jenkins build succeeded and 'node-v0.10.36' was proudly displayed in the console output.

When doing the same for 'npm' which happened to be /usr/local/bin/npm --version the computing gods weren't so merciful anymore. A big 'env: node: No such file or directory' error was thrown this time and the whole build failed.

The actual command that fails is $ /bin/sh -xe /var/folders/wr/g_dl81tn5_x0t_yz3jw602cr0000gn/T/hudson8770480548136671253.sh and "surprisingly" when I run the same command in the terminal it succeeds.

I also uninstalled the homebrew node & npm versions and installed them afterwards via the package manager. Same results.

Ultimately I also did this: https://gist.github.com/DanHerbert/9520689, with no luck.

Notes:

  • I'm running Jenkins 1.613 and tried with 1.5**
  • I didn't create a "Jenkins" specific user but instead I'm using the admin. This happens to be the same user that Jenkins runs, since the who am i command inside the executable script yields the admin's user name.
  • sudo'ing doens't help
  • I'm also running the whole thing in a Virtual Environment - vagrant
  • I'm not running Jenkins as a deamon, as it's conflicting with xtools, but as a simple process
  • I also tried out jenkins-node plugin with various configs (can detail if needed)

Thanks a lot for your help, and let me know if you need any other info, screenshots, logs, etc.

回答1:

I found my own solution. The problem was that the PATH although visible in shell was not exported for the Jenkins job, and so, the first workaround, as found here, was to export it in the actual script like so:

but this feels like a hack!

The right and elegant solution is to use Jenkins EnvInject Plugin and export the path in the added Properties content textarea on the configuration page, like so: