Plugin Information |
---|
View NodeJS on the plugin site for more information. |
Download & Installation
You can download the latest .hpi and install it from the Manage Plugins menu, or install this plugin directly from the Plugins Update Center.
Main features
- Provides NodeJS auto-installer, allowing to create as many NodeJS installations "profiles" as you want.
The auto-installer will automatically install a given version of NodeJS, on every jenkins slave where it will be needed - Allows to install globally some npm packages inside each installations, these npm packages will be made available to the PATH
- Allows to execute some NodeJS script, under a given NodeJS installation
- Allows use custom NPM user configuration file defined with config-file-provider plugin to setup custom NPM settings
- Add a lightweight support to DSL pipeline
- Force 32bit architecture
Usage
- After installing the plugin, go to the global jenkins configuration panel (JENKINS_URL/configure or JENKINS_URL/configureTools if using jenkins 2),
and add new NodeJS installations. For every Nodejs installation, you can choose to install some global npm packages.
Note that you might provide npm package's version (with syntax "package@0.1.2" for instance, or maybe better, "package@~0.1.0") in order to enforce
Since 1.2.6 you could force the installation of the 32bit package for the underlying architecture if supported. If the package is not available the build will fail.
reproductibility of your npm execution environnment (the ~ syntax allows to benefits from bugfixes without taking the risk of a major version upgrade)
See below:
- Now, go to a job configuration screen, you will have 2 new items :
- On the "Build environnment" section, you will be able to pick one of the NodeJS installations to provide its bin/ folder to the PATH.
This way, during shell build scripts, you will have some npm executables available to the command line (like bower or grunt)
See below:
- On the "Build" section, you will be able to add a "Execute NodeJS script" build step
This way, you will be able to fill a textarea with the script content you want to execute.
Note that you will have to select a NodeJS runtime you previously installed, to specify the NodeJS version you want to use
during your NodeJS script execution.
- On the "Build environnment" section, you will be able to pick one of the NodeJS installations to provide its bin/ folder to the PATH.
- You can customise any NPM settings you need creating a NPM config file where you can also setup multiple npm registry (scoped or public)
and select for each one stored credential (only user/password supported type) as follow:
and than select the config file to use for each configured build step
Pipeline
The current supported DSL steps are:
- nodejs (as buildwrapper)
- tools
In a Declarative pipeline you can add any configured NodeJS tool to your job, and it will enhance
the PATH variable with the selected NodeJS installation folder, instead in scripted pipeline you have to do it manually.
node { env.NODEJS_HOME = "${tool 'Node 6.x'}" // on linux / mac env.PATH="${env.NODEJS_HOME}/bin:${env.PATH}" // on windows env.PATH="${env.NODEJS_HOME};${env.PATH}" sh 'npm --version' }
This example show the use of buildwrapper, where enhanced PATH will be available only inside the brace block
pipeline { agent any stages { stage('Build') { steps { nodejs(nodeJSInstallationName: 'Node 6.x', configId: '<config-file-provider-id>') { sh 'npm config ls' } } } } }
Known limitations / issues
NodeJS version 1.0 has adapted its code to the most recent Jenkins API (1.6xx). If also EnvInject is installed you will fall in JENKINS-26583
that corrupts setup of the nodejs installation bin folder into PATH environment. In this case consider if update or not or use an own build from
this branch untill the JENKINS-26583 will not be fixed.
- If you update from NodeJS 0.2.2 or earlier to newer version materializes a data migration. This data migration is transparent to the users but
you can not back to 0.2.2 without lost global configuration tools and job build step configuration. - NodeJS versions prior to 0.9.0 won't be available at the moment (directory structure was not the same as today on distribution site).
This might be handled in the future (this is exposed as PathResolver implementation) :
don't hesitate to provide new implementations for previous versions and submit a PR on github. - Supported architecture are:
- Windows 32/64 bit
- Linux 32/64 bit
- OSX (intel) 64 bit
- Arm 6l/7l/64
- SunOS
Releases
1.2.6 (April, 7th, 2018)
Improvements
- JENKINS-50378 Nodejs plugin should allow to force 32bit architecture (nfalco79)
Bugfixes
- Fix credentials combo box when setup NPMRC file
1.2.5 (March, 10th, 2018)
Improvements
- JENKINS-49469 Nodejs plugin should be able to access npmrc files configured inside folders (nfalco79)
- JENKINS-48456 Add support for Sun OS platforms (nfalco79 to antoninBr)
1.2.4 (Sep, 6th, 2017)
Improvements
- Remove JENKINS-14807 patch because released in Jenkins 2.71 and in 2.60.3 LTS (nfalco79)
1.2.3 (Jul, 29th, 2017)
Improvements
- JENKINS-45840 : Verify if the NodeJS executable exists before continue with the build step to improve problem determination (nfalco79)
- Set configId as optional parameter (nfalco79)
1.2.2 (May, 22th, 2017)
Improvements
- JENKINS-42262 : Supports the new config-file-provider APIs so it can provides the correct content of the npm config file (nfalco79)
Bugfixes
- Quotes the target directory when install NodeJS on windows machine to allow spaces in the installation folder path (nfalco79 to gwynjudd)
1.2.1 (April, 23th, 2017)
Bugfixes
- Fix NPM config registry URL and authentication entries in case of scoped registry (nfalco79)
1.2.0 (March, 31th, 2017)
Improvements
- JENKINS-43102 : Add support for ARM CPUs (armv7l, armv6l, arm64) (nfalco79)
1.1.3 (March, 15th, 2017)
Bugfixes
- JENKINS-42775 : NodeJS Plugin - Unresolvable nodeJS installer for version in Windows i386 (nfalco79)
1.1.2 (February, 22th, 2017)
Bugfixes
- JENKINS-42232 : Node executable is not begin initialised on slave node (nfalco79)
1.1.1 (February, 20th, 2017)
Bugfixes
- JENKINS-41947 : PATH value is being overwritten in declarative pipeline syntax (nfalco79)
- JENKINS-29266 : Install global package don't use default proxy (nfalco79)
1.1.0 (February, 13th, 2017)
Improvements
- JENKINS-40624 : nodejs installer not compatible with declarative pipeline definition (nfalco79 to imod)
Bugfixes
- Add some test cases
- JENKINS-41876 : Not respecting configuration in regards of global modules (nfalco79)
1.0.1 (February, 3rd, 2017)
Bugfixes
- JENKINS-41535 : NodeJS installation configuration is not persisted to file (nfalco79)
1.0 (January, 27th, 2017)
Improvements
- JENKINS-35182 : Support credential plugin to handle publish (nfalco79)
- JENKINS-40364 : Support npm configuration file (nfalco79)
- JENKINS-26828 : Add support for installing the NodeJS windows msi (nfalco79 to icoulter)
Bugfixes
- JENKINS-21953 : NodeJs plugin doesn't work on windows based Jenkins machine (nfalco79)
- JENKINS-22102 : NodeJS plugin does not remember the saved "NodeJS Installation" (nfalco79 to unilama)
0.2.2 (December, 12th, 2016)
Bugfixes
- JENKINS-27170 : "Provide Node & npm bin/ folder to PATH" not working for "npm install" (ndeloof)
- JENKINS-30380 : Downloads of NodeJS binaries are now in https (aheritier)
0.2.1 (February, 10th, 2014)
Bugfixes
- JENKINS-21726 : Fix path separator issue when master & slave OS are not the same (kudos to ljohnston)
- Adding node executable at the beginning (instead of end) of the PATH (kudos to trecloux)
0.2 (August, 24th, 2013)
Improvements
- Provided NodeJS Auto-installers based on available NodeJS versions on nodejs.org
Auto-installer will automatically install NodeJS for target node's OS/CPU type (only linux x86/64 supported ATM)
You will be able to define global npm packages installed during the NodeJS installation. - Updated "Execute NodeJS script" build step, to allow selection of a NodeJS installation
- Added a new "Build environnment" checkbox allowing to provide a specific NodeJS installation to the PATH
This way, you will be able to execute npm packages, such as grunt or bower, in your shell scripts
0.1 (August, 13th, 2010)
Improvements
- Provided new build step : "Execute NodeJS script"
15 Comments
Jonathan Langevin
Several tickets exist around NodeJS plugin mangling PATH vars, conflicting w/ rbenv/RVM plugins. Please address.
Silvio Giannese
There is a compatibility problem with simultaneous use of MySQL Job Database Plugin (0.1.0) and NodeJS Plugin (0.2.1) in the "Build Environment" definition of a Jenkins job.
The environment, where job runs, is a Jenkins master (core version:1.565) on Ubuntu 12.04 with a MySQL installation (5.5.3) and NodeJS installation is 0.10.x (I also used a 0.11.x).
Below there is the log of the build that fails for a "bash: mysql: command not found" error. If Jenkins doesn't find a NodeJS installation, it tries to perform a NodeJS installation and then uses MySQL Job Database plugin to create a mysql database. The issue could be about the path that MySQL Job Database uses to run bash commands, maybe it could be modified by NodeJS Plugin before. Obviously, without the use of NodeJS plugin, MySQL Job Database Plugin works correctly. What does NodeJS Plugin do when it tries to install a specific NodeJS?
Looking for your feedback, thank you in advance,
Silvio
Building on master in workspace /var/lib/jenkins/jobs/Testmysql-clone/workspace
Updating http://163.162.63.177/myproject/trunk/project at revision '2015-02-10T15:52:58.795 +0100'
At revision 2289
no change for http://163.162.63.177/myproject/trunk/project since the previous build
Ensuring MySQL database for job exists
$ bash -c 'mysql --host='127.0.0.1' --port='3306' --user='jenkins' --password='jenkins' --execute "CREATE DATABASE IF NOT EXISTS test;"'
MySQL command failed:
bash: mysql: command not found
ERROR: null
[htmlpublisher] Archiving HTML reports...
[htmlpublisher] Archiving at PROJECT level /var/lib/jenkins/jobs/Testmysql-clone/workspace/project/coverage/lcov-report to /var/lib/jenkins/jobs/Testmysql-clone/htmlreports/Code_Coverage_analysis
ERROR: Specified HTML directory '/var/lib/jenkins/jobs/Testmysql-clone/workspace/project/coverage/lcov-report' does not exist.
Drop MySQL database for job if exists
$ bash -c 'mysql --host='127.0.0.1' --port='3306' --user='jenkins' --password='jenkins' --execute "DROP DATABASE IF EXISTS test;"'
MySQL command failed:
bash: mysql: command not found
Drop MySQL user for job if exists
$ bash -c 'mysql --host='127.0.0.1' --port='3306' --user='jenkins' --password='jenkins' --execute "REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'jenkinsuser'@'%';"'
MySQL command failed:
bash: mysql: command not found
Finished: FAILURE
Thomas McCabe
npm that is installed by this plugin is broken. Any npm action fails as follows:
Wasted an entire day on this plugin.
Samuel Adams
I have found some extra steps are needed for installation to windows.
For either a manual or Jenkins node install these two steps need to be added.
1. In the windows nodejs install folder add a new folder "bin" and copy in the node.exe
2. In Manage Jenkins -> Configure -> Shell, set the shell path as
C:\Windows\system32\cmd.exe
(or whatever is appropriate).
Credits to:
https://issues.jenkins-ci.org/browse/JENKINS-21953
and
http://stackoverflow.com/questions/15135771/hudson-on-windows-error-java-io-ioexception-cannot-run-program-sh
Claudio Barca
Thank's Samuel, it work fine.
Ricky Wu
Sorry, I couldn't find any place to customise any NPM settings in step 4 of Usage, any one can help me?
Did I missed anything?
Nikolas Falco
Claudio Barca since 1.0 is no more necessary add node binary to the bin folder. Windows is fully supported.
Ricky Wu You have to create a NPM config file in Manage Jenkins -> Managed Files (config-file-provider plugin)
Ronald Gundlach-Chmara
Changing the scripted pipeline example, I had to use:
env.PATH=
"${env.NODEJS_HOME}/bin/:${env.PATH}"
...since my auto-installed tool places the binaries for node and npm at that location (/bin/).
Nikolas Falco
yes it is correct, the bin folder of node js depends from S.O.
GK Nonni
In the declarative pipeline, the correct format (as Pipeline v2.5) is:
pixman20
It appears that though JENKINS-26583 - Getting issue details... STATUS was fixed, the workaround given is still required.
I just updated both the env-inject plugin and the nodejs plugin to the latest versions (2.1.4 and 1.2.4 respectively) and this is still an issue: node is not added to PATH
Justin Georgeson
Is it possible to specify a config file using tool in a declarative pipeline?
The name installation's pre-installed packages may need to go through an authenticated proxy specified in the managed config file.
Nikolas Falco
it's not possible use the proxy defined in manage file during installation of pre-installed packages because managed files are wired to the build job and not to Jenkins instance. For example is not possible retrieve managed file defined in a Folder (kind of Jenkins project).
If you would use an HTTP proxy define the http proxy in the Manage Jenkins page (see JENKINS-29266).
Pavel Zelenka
Hi, our Jenkins is behind corporate proxy. Which proxy settings is used when I add new NodeJS installation?
Is it possible to install the NodeJS manually?
Thanks
Nikolas Falco
The proxy settings are those defined in Jenkins (third tab of manage plugin page).
It is possible to provide a manual installation in the same way of other tools, or a custom URL to a zip archive that contains the NodeJS installer