Nodeshift
Nodeshift is a Plugin for running openshift deployments for node.js projects
Disclaimer: Nodeshift is extremely experimental at the moment. This means it is under heavy development, api's could change at any time until a 1.0.0 release
Install
To install globally: npm install -g nodeshift
or to use in an npm script
npm install --save-dev nodeshift
// inside package.json
scripts: {
nodeshift: nodeshift
}
$ npm run nodeshift
Example Usage
Prerequisites
For this example, we will run against an Openshift Cluster running locally using Minishift.
There are directions here to install Minishift
I installed using Homebrew and use Virtual Box as my hypervisor provider, so my command to initially start minishift was something like this: minishift start --vm-driver=virtualbox
These are also part of the minishift install, and step 2 of this section tells you how to put them on your path.
This guide also assumes you have a modern version(4+) of Node.js and npm installed.
Example
For this example, we will use this very simple express based node app, https://github.com/bucharest-gold/nodejs-rest-http
From this point on, all commands will assume you are in the directory of this source code
Notice that there is a .nodeshift
directory in the project, this will hold application specific resource files for creating Routes/Serivces/DeploymentConfigs
Before running the nodeshift command, we first need to login to our Openshift Cluster running on Minishift using the oc login
command
oc login -u developer
for example.
Also make sure to either create a new project or change into an existing one.
Lets just create a new project for this example: oc new-project node-demo
All that is left is to run the nodeshift command.
The examples package.json has a script defined called "openshift" that will run the nodeshift command, run that like this:
$ npm run openshift
There is a file called runner.js
, this makes use of the one(currently) public API called deployApplication
, that can be run like so:
$ node runner.js
Or just calling nodeshift directly if you have it installed globally
$ nodeshift
Whatever is run, you will see output similiar to this:
~/s/nodejs-rest-http ❯❯❯ nodeshift --osc.strictSSL false
2017-07-12T18:56:28.850Z INFO loading configuration
2017-07-12T18:56:28.866Z INFO using namespace nodeshift-demo at https://192.168.99.100:8443
2017-07-12T18:56:28.882Z INFO creating archive of package.json, README.md, app.js, public, bin
2017-07-12T18:56:28.934Z INFO creating build configuration nodejs-rest-http-s2i
2017-07-12T18:56:28.952Z INFO creating image stream nodejs-rest-http
2017-07-12T18:56:28.962Z INFO uploading binary archive /usr/src/nodejs-rest-http/tmp/nodeshift/build/archive.tar
2017-07-12T18:56:31.138Z INFO binary upload complete
2017-07-12T18:56:31.138Z INFO waiting for build to finish
2017-07-12T18:56:31.192Z TRACE Receiving source from STDIN as archive ...
2017-07-12T18:56:31.399Z TRACE ---> Installing application source
2017-07-12T18:56:31.418Z TRACE ---> Building your Node application from source
2017-07-12T18:56:31.418Z TRACE ---> Using 'npm install'
2017-07-12T18:56:34.294Z TRACE added 50 packages in 2.441s
2017-07-12T18:56:34.913Z TRACE
2017-07-12T18:56:34.913Z TRACE Pushing image 172.30.1.1:5000/nodeshift-demo/nodejs-rest-http:latest ...
2017-07-12T18:56:34.986Z TRACE Pushed 3/8 layers, 38% complete
2017-07-12T18:56:34.986Z TRACE Pushed 4/8 layers, 51% complete
2017-07-12T18:56:35.000Z TRACE Pushed 5/8 layers, 64% complete
2017-07-12T18:56:35.004Z TRACE Pushed 6/8 layers, 77% complete
2017-07-12T18:56:35.006Z TRACE Pushed 7/8 layers, 89% complete
2017-07-12T18:56:35.315Z TRACE Pushed 8/8 layers, 100% complete
2017-07-12T18:56:35.610Z TRACE Push successful
2017-07-12T18:56:39.139Z INFO build nodejs-rest-http-s2i-1 complete
2017-07-12T18:56:39.147Z INFO docker image repository 172.30.1.1:5000/nodeshift-demo/nodejs-rest-http
2017-07-12T18:56:39.171Z INFO creating deployment configuration nodejs-rest-http
2017-07-12T18:56:39.177Z INFO creating new serivce nodejs-rest-http
2017-07-12T18:56:39.178Z INFO creating new route nodejs-rest-http
2017-07-12T18:56:39.187Z INFO route host mapping nodejs-rest-http-nodeshift-demo.192.168.99.100.nip.io
2017-07-12T18:56:39.199Z INFO done
If you login to your local Openshift cluster and navigate to the "node-demo" project, there should be a new deployment with a route to your application.
For example: http://nodejs-rest-http-node-demo.192.168.99.100.nip.io/
please note: Currently, once a route, service, deployment config, build config, and imagestream config are created, those are re-used. The only thing that changes from deployment to deployment is the source code. This will change in the future
.Nodeshift Directory
The .nodeshift
directory is responsible for holding your resource files. These are .yml
files that describe you service, deployments and routes.
Currently, nodeshift will only create resources based on the files specified, in the future, its possible somethings could be created by default
Advanced Options
There are a few options available on the CLI or when using the API
Usage: nodeshift [--options]
Options:
--version Show version number [boolean]
--projectLocation change the default location of the project [string]
--configLocation change the default location of the config [string]
--nodeshiftDirectory change the default name of the directory nodeshift looks
at for resource files [string]
--osc.strictSSL setting to pass to the Openshift Rest Client. Set to
false if using a self-sign cert
--nodeVersion, -n the version of Node.js to use for the deployed
application.
[string] [choices: "latest", "8.x", "7.x", "6.x", "5.x", "4.x"] [default:
"latest"]
--help Show help [boolean]
Contributing
Please read the contributing guide