Jenkins script quitting prematurely when using npm

2019-03-25 06:19发布

问题:

In my Jenkins job I want to build a JavaScript app using Grunt. The Jenkins build scripts creates a build directory (if it doesn't already exist), changes to that directory and runs:

npm install grunt
npm install grunt-zip
grunt --gruntfile=[something]

(Of course grunt-cli is installed globally.) When I build the job, the first statement causes Grunt and dependencies to be pulled down as expected. However, the job then terminates successfully:

Archiving artifacts
No emails were triggered.
Finished: SUCCESS

The second npm install is not run. Any idea why the script is terminating after running npm install instead of continuing to the subsequent statements?

回答1:

So it turns out that npm is a batch file, not an executable, so it needs to be invoked using call from the Jenkins script:

call npm install grunt


回答2:

i would recommend not using the local grunt / nodejs install, but instead getting jenkins to do this for you!

it's much easier and means there's less coupling to system specific installs and variables.

steps:

a) use nodejs jenkins plugin + get it to install nodejs on machine/grunt-cli -> Jenkins integration with Grunt

b) populate your package.json with any nodejs dependances required, eg grunt/grunt-zip etc

c) when running grunt just do a "npm update" before "grunt" command

that way your not doing explicit npm install, it's all configured from your package.json, and your build scripts will be less brittle, and your developers can use the same steps as the build server, eg "npm update;grunt" locally same as build server