{"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\/pt\/enable-continuous-deployment-nodejs-jenkins\/","title":{"rendered":"Criar um pipeline de implanta\u00e7\u00e3o cont\u00ednua com o Node.js e o Jenkins"},"content":{"rendered":"<p>Veremos como voc\u00ea pode come\u00e7ar facilmente com <a href=\"https:\/\/jenkins.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">Jenkins<\/a><span style=\"font-weight: 400\"> e o Node.js podem trabalhar juntos para permitir a implanta\u00e7\u00e3o cont\u00ednua <\/span>com base nas altera\u00e7\u00f5es feitas em um reposit\u00f3rio do GitHub.<\/p>\n<p><!--more--><\/p>\n<p>Ent\u00e3o, vamos descobrir o plano aqui. Vamos usar um reposit\u00f3rio React JS j\u00e1 existente <a href=\"https:\/\/github.com\/couchbaselabs\/space-x-app\" target=\"_blank\" rel=\"noopener noreferrer\">de nosso popular workshop \"React From Scratch\" (Reagir do zero)<\/a>. Quando s\u00e3o feitas altera\u00e7\u00f5es nesse reposit\u00f3rio, o Jenkins pode compilar o aplicativo e implant\u00e1-lo ou execut\u00e1-lo. Devido \u00e0 natureza do Node.js, o processo de compila\u00e7\u00e3o garantir\u00e1 que os m\u00f3dulos NPM estejam presentes.<\/p>\n<h2>Requisitos do projeto<\/h2>\n<p>Os seguintes requisitos de software devem ser atendidos para que este guia possa ser usado:<\/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>Como este \u00e9 um pipeline do Node.js com o Jenkins, precisaremos da vers\u00e3o mais recente do Node.js instalada. Como o Jenkins \u00e9 um aplicativo Java, tamb\u00e9m precisaremos do Java instalado. Meu exemplo de pipeline Jenkins para aplicativo Node.js n\u00e3o usa o Couchbase, o que garantir\u00e1 que qualquer pessoa possa usar este guia com facilidade.<\/p>\n<h2>Configura\u00e7\u00e3o do Jenkins com os plug-ins necess\u00e1rios<\/h2>\n<p>A esta altura, voc\u00ea j\u00e1 deve ter feito o download do Jenkins. Se n\u00e3o tiver feito, v\u00e1 em frente e obtenha o arquivo WAR no site do Jenkins.<\/p>\n<p>Para iniciar o Jenkins, execute o seguinte comando em seu prompt de comando ou terminal:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">java -jar jenkins.war -httpPort=8080<\/pre>\n<p>Isso tornar\u00e1 o Jenkins acess\u00edvel a partir de um navegador da Web em <strong>https:\/\/localhost:8080<\/strong>. Ap\u00f3s a primeira inicializa\u00e7\u00e3o, voc\u00ea ser\u00e1 colocado em um assistente de configura\u00e7\u00e3o.<\/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>A primeira tela desse assistente de configura\u00e7\u00e3o solicitar\u00e1 a senha gerada pelo Jenkins. Encontre-a no local apresentado na tela.<\/p>\n<p>A segunda tela perguntar\u00e1 quais plug-ins voc\u00ea deseja instalar.<\/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>Por enquanto, vamos instalar os plug-ins sugeridos. Instalaremos plug-ins adicionais mais tarde.<\/p>\n<p>A terceira tela solicitar\u00e1 a cria\u00e7\u00e3o do nosso primeiro usu\u00e1rio administrativo. Tecnicamente, a senha gerada que voc\u00ea est\u00e1 usando \u00e9 um usu\u00e1rio administrativo, mas talvez voc\u00ea queira criar uma nova.<\/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>Depois de criar um usu\u00e1rio, o Jenkins est\u00e1 pronto para funcionar. No entanto, precisaremos de outro plugin e ele pode variar dependendo de como desejamos criar e implantar o aplicativo Node.js.<\/p>\n<p>Na tela principal do Jenkins, selecione\u00a0<strong>Gerenciar o Jenkins<\/strong> para ver uma lista de op\u00e7\u00f5es de administra\u00e7\u00e3o.<\/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>O que nos interessa \u00e9 gerenciar os plug-ins dispon\u00edveis. Depois de escolher <strong>Gerenciar plug-ins<\/strong> queremos procurar e instalar um plug-in com o nome de\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>Esse plug-in nos permite executar comandos ou scripts do shell ap\u00f3s a conclus\u00e3o do est\u00e1gio de compila\u00e7\u00e3o. Neste exemplo de pipeline do Node.js e do Jenkins, estaremos construindo e implantando no mesmo host, e podemos executar tudo localmente por meio de comandos do shell. Em um ambiente de produ\u00e7\u00e3o, talvez voc\u00ea queira usar o plug-in SSH para migrar o c\u00f3digo para um servidor remoto e execut\u00e1-lo l\u00e1.<\/p>\n<p>Com os plug-ins dispon\u00edveis, vamos criar nosso fluxo de trabalho de implanta\u00e7\u00e3o cont\u00ednua para o Node.js no Jenkins.<\/p>\n<h2>Cria\u00e7\u00e3o de um fluxo de trabalho de implanta\u00e7\u00e3o cont\u00ednua do Jenkins para Node.js<\/h2>\n<p>S\u00f3 para reiterar, nosso objetivo aqui \u00e9 criar um fluxo de trabalho que extraia um projeto do GitHub, construa-o instalando todas as depend\u00eancias e implemente-o executando-o em um servidor, neste caso, nossa m\u00e1quina local.<\/p>\n<p>Comece criando um novo item, tamb\u00e9m conhecido como um novo trabalho ou fluxo de trabalho.<\/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>Vamos criar um\u00a0<strong>Projeto Freestyle<\/strong>. H\u00e1 tr\u00eas coisas que precisam ser feitas na pr\u00f3xima tela.<\/p>\n<p>A fonte do nosso espa\u00e7o de trabalho vir\u00e1 do GitHub. No seu pr\u00f3prio projeto, ela pode vir de outro lugar, mas, para este, precisamos definir nossas informa\u00e7\u00f5es de controle de origem. Voc\u00ea tamb\u00e9m pode selecionar o ramo se o seu projeto n\u00e3o estiver usando o ramo mestre.<\/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>O projeto do GitHub \u00e9 um projeto que eu j\u00e1 havia criado e escrito sobre ele, como mencionado anteriormente.  O projeto pode ser encontrado em:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">https:\/\/github.com\/couchbaselabs\/space-x-app<\/pre>\n<p>Agora, em um ambiente de produ\u00e7\u00e3o, voc\u00ea provavelmente desejar\u00e1 configurar ganchos do GitHub para acionar o processo de trabalho, mas como tudo isso est\u00e1 no host local, o GitHub n\u00e3o permitir\u00e1 isso.  Em vez disso, acionaremos o trabalho manualmente.<\/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>Depois de configurar a se\u00e7\u00e3o de controle de origem, precisaremos configurar a etapa de compila\u00e7\u00e3o. Para o Node.js, a compila\u00e7\u00e3o consiste apenas na instala\u00e7\u00e3o de depend\u00eancias, mas voc\u00ea poderia facilmente ter testes de unidade ou outros testes nessa etapa. Na se\u00e7\u00e3o <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/create-a-continuous-deployment-pipeline-with-jenkins-and-java\/\" target=\"_blank\" rel=\"noopener noreferrer\">Projeto Jenkins Java<\/a>A etapa de compila\u00e7\u00e3o \u00e9 mais complexa. Neste exemplo do Node.js, temos apenas o seguinte:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">npm install<\/pre>\n<p>Por fim, podemos definir o que acontece depois que o projeto \u00e9 constru\u00eddo.<\/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>Neste exemplo, implantaremos o aplicativo localmente em nosso computador. Provavelmente n\u00e3o \u00e9 o caso em seu cen\u00e1rio de produ\u00e7\u00e3o.<\/p>\n<p>Portanto, voc\u00ea notar\u00e1 que, em nossa etapa p\u00f3s-compila\u00e7\u00e3o, temos os seguintes comandos:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">npm start<\/pre>\n<p>V\u00e1 em frente e tente executar o trabalho escolhendo\u00a0<strong>Construir agora<\/strong> da lista de op\u00e7\u00f5es. Ele deve obter o projeto, instalar as depend\u00eancias e disponibilizar o projeto em <strong>https:\/\/localhost:3000<\/strong>. Apenas certifique-se de que o Couchbase Server esteja em execu\u00e7\u00e3o para esse projeto, caso contr\u00e1rio, voc\u00ea receber\u00e1 erros.<\/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>Conclus\u00e3o<\/h2>\n<p>Voc\u00ea acabou de ver como usar o Jenkins para implantar continuamente seus aplicativos Node.js com base nas altera\u00e7\u00f5es que foram feitas no GitHub. Uma vers\u00e3o semelhante deste guia foi criada para aplicativos Java chamados, <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/create-a-continuous-deployment-pipeline-with-jenkins-and-java\/\" target=\"_blank\" rel=\"noopener noreferrer\">Criar um pipeline de implanta\u00e7\u00e3o cont\u00ednua com Jenkins e Java<\/a>que vale a pena ser revisado se voc\u00ea for um desenvolvedor Java.<\/p>\n<p>Deseja informa\u00e7\u00f5es sobre <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/build-a-rest-api-with-node-js-express-and-couchbase\/\">usando Node.js<\/a> com o Couchbase NoSQL? D\u00ea uma olhada na se\u00e7\u00e3o <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/developers\/\" target=\"_blank\" rel=\"noopener noreferrer\">Portal do desenvolvedor do Couchbase<\/a> para obter documenta\u00e7\u00e3o e exemplos.<\/p>","protected":false},"excerpt":{"rendered":"<p>Veremos como voc\u00ea pode come\u00e7ar a usar facilmente o Jenkins e o Node.js para trabalhar juntos e permitir a implanta\u00e7\u00e3o cont\u00ednua com base nas altera\u00e7\u00f5es feitas em um reposit\u00f3rio do GitHub.<\/p>","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 v26.1 (Yoast SEO v26.1.1) - 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\/pt\/enable-continuous-deployment-nodejs-jenkins\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\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\/pt\/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 minutos\" \/>\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\":\"pt-BR\",\"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\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\":\"pt-BR\",\"@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\/pt\/author\/eric-bishard\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Node.js and Jenkins: Create Continuous Deployment Pipeline","description":"Veja como o Jenkins e o Node.js podem trabalhar juntos para permitir pipelines de implanta\u00e7\u00e3o cont\u00ednua com base nas altera\u00e7\u00f5es feitas em um reposit\u00f3rio do GitHub.","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\/pt\/enable-continuous-deployment-nodejs-jenkins\/","og_locale":"pt_BR","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\/pt\/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 minutos"},"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":"pt-BR","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":"Veja como o Jenkins e o Node.js podem trabalhar juntos para permitir pipelines de implanta\u00e7\u00e3o cont\u00ednua com base nas altera\u00e7\u00f5es feitas em um reposit\u00f3rio do GitHub.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/enable-continuous-deployment-nodejs-jenkins\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@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":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","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":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@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":"pt-BR","@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":"Palestrante internacional, blogueiro e defensor da comunidade JavaScript, React, GraphQL e NoSQL, trabalhando como defensor s\u00eanior de desenvolvedores da Couchbase.","sameAs":["https:\/\/www.reactstateofmind.com","https:\/\/www.linkedin.com\/in\/eric-b\/","https:\/\/x.com\/httpJunkie"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/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":"Palestrante internacional, blogueiro e defensor da comunidade JavaScript, React, GraphQL e NoSQL, trabalhando como defensor s\u00eanior de desenvolvedores da Couchbase."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/3049","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/53002"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=3049"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/3049\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=3049"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=3049"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=3049"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=3049"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}