{"id":3049,"date":"2017-04-19T00:58:53","date_gmt":"2017-04-19T07:58:53","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=3049"},"modified":"2023-09-09T03:02:30","modified_gmt":"2023-09-09T10:02:30","slug":"enable-continuous-deployment-nodejs-jenkins","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/","title":{"rendered":"Create a Continuous Deployment Pipeline with Node.js and Jenkins"},"content":{"rendered":"<p>We&#8217;re going to see how you can easily get started with <a href=\"https:\/\/jenkins.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">Jenkins<\/a><span style=\"font-weight: 400\"> and Node.js can be made to work together to enable continuous deployment <\/span>based on changes made to a GitHub repository.<\/p>\n<p><!--more--><\/p>\n<p>So let&#8217;s figure out the plan here. We&#8217;re going to be using an already existing React JS repository <a href=\"https:\/\/github.com\/couchbaselabs\/space-x-app\" target=\"_blank\" rel=\"noopener noreferrer\">from our popular &#8220;React From Scratch&#8221; workshop<\/a>. When changes are made to this repository, Jenkins could build the application and deploy or run the application. Because of the nature of Node.js, the build process will ensure the NPM modules are present.<\/p>\n<h2>Project Requirements<\/h2>\n<p>The following software requirements must be met in order to use this guide:<\/p>\n<ul>\n<li><a href=\"https:\/\/nodejs.org\" target=\"_blank\" rel=\"noopener noreferrer\">Node.js<\/a><\/li>\n<li><a href=\"https:\/\/www.oracle.com\/java\/technologies\/javase-downloads.html\">JDK<\/a><\/li>\n<li><a href=\"https:\/\/jenkins.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">Jenkins<\/a><\/li>\n<\/ul>\n<p>Since this is a Node.js with Jenkins pipeline, we&#8217;ll need the latest version of Node.js installed. Since Jenkins is a Java application, we&#8217;ll also need Java installed. My sample Jenkins pipeline for Node.js application does not use Couchbase, this will ensure anyone can easily use this guide.<\/p>\n<h2>Configuring Jenkins with the Necessary Plugins<\/h2>\n<p>You should have already downloaded Jenkins by now. If you haven&#8217;t, go ahead and obtain the WAR file from the Jenkins website.<\/p>\n<p>To start Jenkins, execute the following command from your Command Prompt or Terminal:<\/p>\n<pre class=\"lang:default highlight:0 decode:true \">java -jar jenkins.war -httpPort=8080<\/pre>\n<p>This will make Jenkins accessible from a web browser at <strong>https:\/\/localhost:8080<\/strong>. Upon the first launch, you&#8217;ll be placed in a configuration wizard.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3058 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/03\/jenkins-config-1.png\" alt=\"Jenkins Configuration Part 1\" width=\"1100\" height=\"522\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/jenkins-config-1.png 1100w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/jenkins-config-1-300x142.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/jenkins-config-1-1024x486.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/jenkins-config-1-768x364.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/jenkins-config-1-20x9.png 20w\" sizes=\"auto, (max-width: 1100px) 100vw, 1100px\" \/><\/p>\n<p>The first screen in this configuration wizard will ask you for the password that Jenkins generates. Find it in the location presented on the screen.<\/p>\n<p>The second screen will ask you which plugins you&#8217;d like to install.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3059 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/03\/jenkins-config-2.png\" alt=\"Jenkins Configuration Part 2\" width=\"1100\" height=\"521\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/jenkins-config-2.png 1100w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/jenkins-config-2-300x142.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/jenkins-config-2-1024x485.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/jenkins-config-2-768x364.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/jenkins-config-2-20x9.png 20w\" sizes=\"auto, (max-width: 1100px) 100vw, 1100px\" \/><\/p>\n<p>For now, we&#8217;re going to install the suggested plugins. We&#8217;ll be installing extra plugins later.<\/p>\n<p>The third screen will ask us to create our first administrative user. Technically, the generated password you&#8217;re using is an administrative user, but you may want to create a new one.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3060 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/03\/jenkins-config-3.png\" alt=\"Jenkins Configuration Part 3\" width=\"1100\" height=\"520\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/jenkins-config-3.png 1100w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/jenkins-config-3-300x142.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/jenkins-config-3-1024x484.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/jenkins-config-3-768x363.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/jenkins-config-3-20x9.png 20w\" sizes=\"auto, (max-width: 1100px) 100vw, 1100px\" \/><\/p>\n<p>After you create a user, Jenkins is ready to go. However, we are going to need another plugin and it can vary depending on how we wish to build and deploy the Node.js application.<\/p>\n<p>From the main Jenkins screen, choose to\u00a0<strong>Manage Jenkins<\/strong> to see a list of administration options.<\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/01-jennkins-manage-plugins.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-10720\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/01-jennkins-manage-plugins.png\" alt=\"Manage Jenkins\" width=\"2044\" height=\"1107\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/01-jennkins-manage-plugins.png 2044w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/01-jennkins-manage-plugins-300x162.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/01-jennkins-manage-plugins-1024x555.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/01-jennkins-manage-plugins-768x416.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/01-jennkins-manage-plugins-1536x832.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/01-jennkins-manage-plugins-20x11.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/01-jennkins-manage-plugins-1320x715.png 1320w\" sizes=\"auto, (max-width: 2044px) 100vw, 2044px\" \/><\/a><\/p>\n<p>What we care about is managing the available plugins. After choosing <strong>Manage Plugins<\/strong> we want to search for and install a plugin by the name of\u00a0<strong>PostBuildScript<\/strong>.<\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/02-search-plugins.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-10727 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/02-search-plugins.png\" alt=\"Install Jenkins Post-Build Script Plugin\" width=\"2044\" height=\"678\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/02-search-plugins.png 2044w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/02-search-plugins-300x100.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/02-search-plugins-1024x340.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/02-search-plugins-768x255.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/02-search-plugins-1536x509.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/02-search-plugins-20x7.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/02-search-plugins-1320x438.png 1320w\" sizes=\"auto, (max-width: 2044px) 100vw, 2044px\" \/><\/a><\/p>\n<p>This plugin allows us to execute shell commands or scripts after the build stage has completed. In this Node.js and Jenkins pipeline example we\u2019ll be building and deploying to the same host, we can run everything locally via shell commands. In a production environment, you might want to use the SSH plugin to migrate the code to a remote server and run it there.<\/p>\n<p>With the plugins available, let&#8217;s create our continuous deployment workflow for Node.js in Jenkins.<\/p>\n<h2>Creating a Jenkins Continuous Deployment Workflow for Node.js<\/h2>\n<p>Just to reiterate, our goal here is to create a workflow that will pull a project from GitHub, build it by installing all the dependencies, and deploy it by running it on a server, in this case, our local machine.<\/p>\n<p>Start by creating a new item, otherwise known as a new job or workflow.<\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/04-rage-with-couchbase-freestyle.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-10726 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/04-rage-with-couchbase-freestyle-e1613023969760.png\" alt=\"Jenkins Node.js Freestyle Project\" width=\"2046\" height=\"1519\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/04-rage-with-couchbase-freestyle-e1613023969760.png 2046w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/04-rage-with-couchbase-freestyle-e1613023969760-300x223.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/04-rage-with-couchbase-freestyle-e1613023969760-1024x760.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/04-rage-with-couchbase-freestyle-e1613023969760-768x570.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/04-rage-with-couchbase-freestyle-e1613023969760-1536x1140.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/04-rage-with-couchbase-freestyle-e1613023969760-20x15.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/04-rage-with-couchbase-freestyle-e1613023969760-1320x980.png 1320w\" sizes=\"auto, (max-width: 2046px) 100vw, 2046px\" \/><\/a><\/p>\n<p>We&#8217;re going to be creating a\u00a0<strong>Freestyle Project<\/strong>. There are three things that need to be done on the next screen.<\/p>\n<p>The source of our workspace will come from GitHub. In your own project, it can come from elsewhere, but for this one, we need to define our source control information. You can also select the branch if your project is not using the master branch.<\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/05-git-repo.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-10724\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/05-git-repo.png\" alt=\"Jenkins Node.js Source Control\" width=\"2048\" height=\"752\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/05-git-repo.png 2048w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/05-git-repo-300x110.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/05-git-repo-1024x376.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/05-git-repo-768x282.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/05-git-repo-1536x564.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/05-git-repo-20x7.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/05-git-repo-1320x485.png 1320w\" sizes=\"auto, (max-width: 2048px) 100vw, 2048px\" \/><\/a><\/p>\n<p>The GitHub project is one that I had previously created and written about, like mentioned before. \u00a0The project can be found at:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">https:\/\/github.com\/couchbaselabs\/space-x-app<\/pre>\n<p>Now in a production environment, you&#8217;ll probably want to set up GitHub hooks to trigger the job process, but since this is all on localhost, GitHub won&#8217;t allow it. \u00a0Instead, we&#8217;ll be triggering the job manually.<\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/06-npm-install.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-10725\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/06-npm-install.png\" alt=\"Jenkins Node.js Build Step\" width=\"2048\" height=\"604\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/06-npm-install.png 2048w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/06-npm-install-300x88.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/06-npm-install-1024x302.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/06-npm-install-768x227.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/06-npm-install-1536x453.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/06-npm-install-20x6.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/06-npm-install-1320x389.png 1320w\" sizes=\"auto, (max-width: 2048px) 100vw, 2048px\" \/><\/a><\/p>\n<p>After configuring the source control section we&#8217;ll need to configure the build step. For Node.js, building only consists of installing dependencies, but you could easily have unit testing or other tests in this step. In the <a href=\"https:\/\/www.couchbase.com\/blog\/create-a-continuous-deployment-pipeline-with-jenkins-and-java\/\" target=\"_blank\" rel=\"noopener noreferrer\">Jenkins Java project<\/a>, the build step has more to it. In this Node.js example we just have the following:<\/p>\n<pre class=\"lang:default highlight:0 decode:true \">npm install<\/pre>\n<p>Finally, we get to define what happens after the project is built.<\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/07-start.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-10721\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/07-start.png\" alt=\"Jenkins Node.js Post Build Step\" width=\"2046\" height=\"932\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/07-start.png 2046w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/07-start-300x137.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/07-start-1024x466.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/07-start-768x350.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/07-start-1536x700.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/07-start-20x9.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/07-start-1320x601.png 1320w\" sizes=\"auto, (max-width: 2046px) 100vw, 2046px\" \/><\/a><\/p>\n<p>In this example, we will be deploying the application locally on our machine. Probably not the case in your production scenario.<\/p>\n<p>So you&#8217;ll notice in our post-build step we have the following commands:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">npm start<\/pre>\n<p>Go ahead and try to run the job choosing\u00a0<strong>Build Now<\/strong> from the list of options. It should obtain the project, install the dependencies, and make the project available at <strong>https:\/\/localhost:3000<\/strong>. Just make sure Couchbase Server is running for this project, otherwise, you&#8217;ll get errors.<\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/app.gif\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-10728\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/app.gif\" alt=\"React Application\" width=\"1024\" height=\"876\" \/><\/a><\/p>\n<h2>Conclusion<\/h2>\n<p>You just saw how to use Jenkins to continuously deploy your Node.js applications based on changes that have been made in GitHub. A similar version of this guide was created for Java applications called, <a href=\"https:\/\/www.couchbase.com\/blog\/create-a-continuous-deployment-pipeline-with-jenkins-and-java\/\" target=\"_blank\" rel=\"noopener noreferrer\">Create a Continuous Deployment Pipeline with Jenkins and Java<\/a>, which is worth reviewing if you&#8217;re a Java developer.<\/p>\n<p>Want information on <a href=\"https:\/\/www.couchbase.com\/blog\/build-a-rest-api-with-node-js-express-and-couchbase\/\">using Node.js<\/a> with Couchbase NoSQL? Check out the <a href=\"https:\/\/www.couchbase.com\/developers\/\" target=\"_blank\" rel=\"noopener noreferrer\">Couchbase Developer Portal<\/a> for documentation and examples.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We&#8217;re going to see how you can easily get started with Jenkins and Node.js can be made to work together to enable continuous deployment based on changes made to a GitHub repository.<\/p>\n","protected":false},"author":53002,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,1822],"tags":[1919,1920,1567,1565,1921,1922],"ppma_author":[8922],"class_list":["post-3049","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-node-js","tag-cd","tag-continuous-delivery","tag-continuous-deployment","tag-jenkins","tag-pipeline","tag-ssh"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Node.js and Jenkins: Create Continuous Deployment Pipeline<\/title>\n<meta name=\"description\" content=\"See how Jenkins and Node.js can be made to work together to enable continuous deployment pipelines based on changes made to a GitHub repository.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Create a Continuous Deployment Pipeline with Node.js and Jenkins\" \/>\n<meta property=\"og:description\" content=\"See how Jenkins and Node.js can be made to work together to enable continuous deployment pipelines based on changes made to a GitHub repository.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-04-19T07:58:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-09T10:02:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/03\/jenkins-config-1.png\" \/>\n<meta name=\"author\" content=\"Eric Bishard\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@httpJunkie\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Eric Bishard\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/\"},\"author\":{\"name\":\"Eric Bishard\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/67d3a4b597e42370ccd34b715a6b1f4c\"},\"headline\":\"Create a Continuous Deployment Pipeline with Node.js and Jenkins\",\"datePublished\":\"2017-04-19T07:58:53+00:00\",\"dateModified\":\"2023-09-09T10:02:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/\"},\"wordCount\":906,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"cd\",\"continuous delivery\",\"Continuous Deployment\",\"Jenkins\",\"pipeline\",\"ssh\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Node.js\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/\",\"name\":\"Node.js and Jenkins: Create Continuous Deployment Pipeline\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-04-19T07:58:53+00:00\",\"dateModified\":\"2023-09-09T10:02:30+00:00\",\"description\":\"See how Jenkins and Node.js can be made to work together to enable continuous deployment pipelines based on changes made to a GitHub repository.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create a Continuous Deployment Pipeline with Node.js and Jenkins\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/67d3a4b597e42370ccd34b715a6b1f4c\",\"name\":\"Eric Bishard\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/b7d1d2580c41d35a21654fb1abe65d23\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a316a2658772914defd259571b8cad18878eb23c9d0cc3a97dd803deca0c09ca?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a316a2658772914defd259571b8cad18878eb23c9d0cc3a97dd803deca0c09ca?s=96&d=mm&r=g\",\"caption\":\"Eric Bishard\"},\"description\":\"International speaker, blogging and advocating for the JavaScript, React, GraphQL and NoSQL community working as a Senior Developer Advocate for Couchbase.\",\"sameAs\":[\"https:\/\/www.reactstateofmind.com\",\"https:\/\/www.linkedin.com\/in\/eric-b\/\",\"https:\/\/x.com\/httpJunkie\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/eric-bishard\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Node.js and Jenkins: Create Continuous Deployment Pipeline","description":"See how Jenkins and Node.js can be made to work together to enable continuous deployment pipelines based on changes made to a GitHub repository.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/","og_locale":"en_US","og_type":"article","og_title":"Create a Continuous Deployment Pipeline with Node.js and Jenkins","og_description":"See how Jenkins and Node.js can be made to work together to enable continuous deployment pipelines based on changes made to a GitHub repository.","og_url":"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-04-19T07:58:53+00:00","article_modified_time":"2023-09-09T10:02:30+00:00","og_image":[{"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/03\/jenkins-config-1.png","type":"","width":"","height":""}],"author":"Eric Bishard","twitter_card":"summary_large_image","twitter_creator":"@httpJunkie","twitter_misc":{"Written by":"Eric Bishard","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/"},"author":{"name":"Eric Bishard","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/67d3a4b597e42370ccd34b715a6b1f4c"},"headline":"Create a Continuous Deployment Pipeline with Node.js and Jenkins","datePublished":"2017-04-19T07:58:53+00:00","dateModified":"2023-09-09T10:02:30+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/"},"wordCount":906,"commentCount":1,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["cd","continuous delivery","Continuous Deployment","Jenkins","pipeline","ssh"],"articleSection":["Best Practices and Tutorials","Node.js"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/","url":"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/","name":"Node.js and Jenkins: Create Continuous Deployment Pipeline","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-04-19T07:58:53+00:00","dateModified":"2023-09-09T10:02:30+00:00","description":"See how Jenkins and Node.js can be made to work together to enable continuous deployment pipelines based on changes made to a GitHub repository.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Create a Continuous Deployment Pipeline with Node.js and Jenkins"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"The Couchbase Blog","description":"Couchbase, the NoSQL Database","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/67d3a4b597e42370ccd34b715a6b1f4c","name":"Eric Bishard","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/b7d1d2580c41d35a21654fb1abe65d23","url":"https:\/\/secure.gravatar.com\/avatar\/a316a2658772914defd259571b8cad18878eb23c9d0cc3a97dd803deca0c09ca?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a316a2658772914defd259571b8cad18878eb23c9d0cc3a97dd803deca0c09ca?s=96&d=mm&r=g","caption":"Eric Bishard"},"description":"International speaker, blogging and advocating for the JavaScript, React, GraphQL and NoSQL community working as a Senior Developer Advocate for Couchbase.","sameAs":["https:\/\/www.reactstateofmind.com","https:\/\/www.linkedin.com\/in\/eric-b\/","https:\/\/x.com\/httpJunkie"],"url":"https:\/\/www.couchbase.com\/blog\/author\/eric-bishard\/"}]}},"authors":[{"term_id":8922,"user_id":53002,"is_guest":0,"slug":"eric-bishard","display_name":"Eric Bishard","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/a316a2658772914defd259571b8cad18878eb23c9d0cc3a97dd803deca0c09ca?s=96&d=mm&r=g","author_category":"","last_name":"Bishard","first_name":"Eric","job_title":"","user_url":"https:\/\/www.reactstateofmind.com","description":"International speaker, blogging and advocating for the JavaScript, React, GraphQL and NoSQL community working as a Senior Developer Advocate for Couchbase."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/3049","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/53002"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=3049"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/3049\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=3049"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=3049"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=3049"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=3049"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}