Lukas
Lukas

Reputation: 11

How to simultaneously deploy Node.js web app on multiple servers with Jenkins?

I'm gonna deploy a Node.js mobile web application on two remote servers.(Linux OS) I'm using SVN server to manage my project source code.

To simply and clearly manage the app, I decided to use Jenkins. I'm new to Jenkins so it was a quite difficult task installing and configuring Jenkins.

But I couldn't find how to set up Jenkins to build remote servers simultaneously.

Could you help me?

Upvotes: 1

Views: 2058

Answers (2)

Florent
Florent

Reputation: 1399

You should look into supervisor. It's language and application type agnostic, it just takes care of (re-) starting application.

So in your jenkins build:

  • You update your code from SVN
  • You run your unit tests (definitely a good idea)
  • You either launch an svn update on each host or copy the current content to them (I'd recommend this because there are many ways to make SVN fail and this allows to include SVN_REVISION in the some .JS file for instance)
  • You execute on each host: fuser -k -n tcp $DAEMON_PORT, this will kill the currently running application with the port $DAEMON_PORT (the one you use in your node.js's app)

And the best is obviously that it will automatically start your node.js at system's startup (provided supervisor is correctly installed (apt-get install supervisor on Debian)) and restart it in case of failure.

A node.js supervisord's subconfig looks like this:

# /etc/supervisor/conf.d/my-node-app.conf
[program:my-node-app]
user = running-user
environment = NODE_ENV=production
directory = /usr/local/share/dir_app
command = node app.js
stderr_logfile = /var/log/supervisor/my-node-app-stderr.log
stdout_logfile = /var/log/supervisor/my-node-app-stdout.log

There are many configuration parameters.

Note: There is a node.js's supervisor, it's not the one I'm talking about and I haven't tested it.

Upvotes: 1

shawnzhu
shawnzhu

Reputation: 7585

per Linux OS, you need to ssh to your hosts to run command to get application updated:

  1. work out the workflow of application update in shell script. Especially you need to daemonize your node app so that a completed jenkins job execution will not kill your app when exits. Here's a nice article to tell how to do this: Running node.js Apps With Upstart, or you can refer to pure nodejs tech like forever. Assume you worked out a script under /etc/init.d/myNodeApp

  2. ssh to your Linux OS from jenkins. so you need to make sure the ssh private key file has been copied to /var/lib/jenkins/.ssh/id_rsa with the ownership of jenkins user

Here's an example shell step in jenkins job configuration:

ssh <your application ip> "service myNodeApp stop; cd /ur/app/dir; svn update; service myNodeApp restart"

Upvotes: 0

Related Questions