{"id":2386,"date":"2017-01-06T08:26:14","date_gmt":"2017-01-06T08:26:14","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2386"},"modified":"2023-05-18T05:25:23","modified_gmt":"2023-05-18T12:25:23","slug":"deployment-pipeline-docker-jenkins-java-couchbase","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/deployment-pipeline-docker-jenkins-java-couchbase\/","title":{"rendered":"Pipeline de despliegue usando Docker, Jenkins, Java y Couchbase"},"content":{"rendered":"<p>Este blog explica c\u00f3mo crear un Deployment Pipeline usando Jenkins y Docker para una aplicaci\u00f3n Java que habla con una base de datos.<\/p>\n<p>Jenkins soporta la creaci\u00f3n de pipelines. Se construyen con simples scripts de texto que utilizan un DSL (lenguaje espec\u00edfico del dominio) de Pipeline basado en el lenguaje de programaci\u00f3n Groovy. El script, normalmente llamado <code>Jenkinsfile<\/code>define m\u00faltiples<br \/>\npasos para ejecutar tareas tanto sencillas como complejas seg\u00fan los par\u00e1metros que establezcas. Una vez creados, los pipelines pueden construir c\u00f3digo y orquestar el trabajo necesario para impulsar las aplicaciones desde el commit hasta la entrega.<\/p>\n<p>Una tuber\u00eda consta de <em>pasos<\/em>, <em>nodo<\/em> y <em>escenario<\/em>. Un pipeline se ejecuta en un nodo - un ordenador que forma parte de la instalaci\u00f3n de Jenkins. Un pipeline a menudo consiste en m\u00faltiples etapas. Una etapa consiste en m\u00faltiples pasos. Leer<br \/>\n<a href=\"https:\/\/jenkins.io\/doc\/pipeline\/\">Primeros pasos con Pipeline<\/a> para m\u00e1s detalles.<\/p>\n<p>Para nuestra aplicaci\u00f3n, \u00e9ste es el flujo b\u00e1sico:<\/p>\n<p><a href=\"\/wp-content\/original-assets\/september-2016\/deployment-pipeline-using-docker-jenkins-java-and-couchbase\/docker-pipeline-jenkins-1024x450.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14287\" src=\"\/wp-content\/original-assets\/september-2016\/deployment-pipeline-using-docker-jenkins-java-and-couchbase\/docker-pipeline-jenkins-1024x450.png\" alt=\"docker-pipeline-jenkins\" width=\"604\" height=\"265\" \/><\/a><\/p>\n<p>El c\u00f3digo fuente completo de la aplicaci\u00f3n utilizada se encuentra en\u00a0<a href=\"https:\/\/github.com\/arun-gupta\/docker-jenkins-pipeline\">github.com\/arun-gupta\/docker-jenkins-pipeline<\/a>.<\/p>\n<p>La aplicaci\u00f3n se define en el\u00a0<code>aplicaci\u00f3n web<\/code> directorio. Abre una conexi\u00f3n con el <a href=\"https:\/\/developer.couchbase.com\/server\">Couchbase<\/a> y almacena un simple documento JSON utilizando <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/sdk\/java\/start-using-sdk.html\">SDK Java de Couchbase<\/a>.<br \/>\nLa aplicaci\u00f3n tambi\u00e9n tiene una prueba que verifica que la base de datos contiene efectivamente el documento que se persisti\u00f3.<\/p>\n<p>Muchas gracias a <a href=\"https:\/\/twitter.com\/alexsotob\">@alexsotob<\/a> por ayudarme con la configuraci\u00f3n de Jenkins.<\/p>\n<p>Empecemos.<\/p>\n<h2>Descargar e instalar Jenkins<\/h2>\n<ul>\n<li>Descargar Jenkins desde <a href=\"https:\/\/jenkins.io\">jenkins.io<\/a>. Esto se comprob\u00f3 con <a href=\"https:\/\/mirrors.jenkins-ci.org\/war\/2.21\/jenkins.war\">Jenkins 2.21<\/a>.<\/li>\n<li>Empieza Jenkins:\n<pre class=\"lang:default decode:true\">JENKINS_HOME=~\/.jenkins java -jar ~\/Downloads\/jenkins-2.21.war --httpPort=9090<\/pre>\n<p>Este comando inicia Jenkins especificando el directorio de inicio donde se almacena toda la informaci\u00f3n de configuraci\u00f3n. Tambi\u00e9n define el puerto en el que Jenkins<br \/>\nest\u00e1 escuchando, <code>9090<\/code> en este caso.<\/li>\n<li>El primer arranque de Jenkins muestra el siguiente mensaje en la consola:\n<pre class=\"lang:default decode:true\">*************************************************************\r\n*************************************************************\r\n*************************************************************\r\n\r\nJenkins initial setup is required. An admin user has been created and a password generated.\r\nPlease use the following password to proceed to installation:\r\n\r\n3521fbc3d40448efa8942f8e464b2dd9\r\n\r\nThis may also be found at: \/Users\/arungupta\/.jenkins\/secrets\/initialAdminPassword\r\n\r\n*************************************************************\r\n*************************************************************\r\n*************************************************************<\/pre>\n<p>Copie la contrase\u00f1a que se muestra aqu\u00ed. Esta se utilizar\u00e1 para desbloquear Jenkins.<\/li>\n<li>Acceda a la consola de Jenkins en <a href=\"https:\/\/localhost:9090\">localhost:9090<\/a> y pegue la contrase\u00f1a:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14279\" src=\"\/wp-content\/original-assets\/september-2016\/deployment-pipeline-using-docker-jenkins-java-and-couchbase\/docker-pipeline-jenkins-unlock-1024x525.png\" alt=\"docker-pipeline-jenkins-unlock\" width=\"604\" height=\"310\" \/><br \/>\nHaga clic en\u00a0<code>Siguiente<\/code>.<\/li>\n<li>Cree el primer usuario administrador como se muestra:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14271\" src=\"\/wp-content\/original-assets\/september-2016\/deployment-pipeline-using-docker-jenkins-java-and-couchbase\/docker-pipeline-jenkins-create-admin-user-1024x837.png\" alt=\"docker-pipeline-jenkins-create-admin-user\" width=\"604\" height=\"494\" \/><br \/>\nHaga clic en <code>Guardar y terminar<\/code>.<\/li>\n<li>Haga clic en <code>Instalar los plugins sugeridos<\/code>:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14278\" src=\"\/wp-content\/original-assets\/september-2016\/deployment-pipeline-using-docker-jenkins-java-and-couchbase\/docker-pipeline-jenkins-install-suggested-plugins-1024x668.png\" alt=\"docker-pipeline-jenkins-install-suggested-plugins\" width=\"604\" height=\"394\" \/><br \/>\nSe instalan varios plugins por defecto:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14273\" src=\"\/wp-content\/original-assets\/september-2016\/deployment-pipeline-using-docker-jenkins-java-and-couchbase\/docker-pipeline-jenkins-installing-suggested-plugins-1024x824.png\" alt=\"docker-pipeline-jenkins-installing-suggested-plugins\" width=\"604\" height=\"486\" \/><br \/>\nMe ha sorprendido que Ant y Subversion sean los plugins por defecto.<\/li>\n<li>Aparece la pantalla de inicio de sesi\u00f3n.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14274\" src=\"\/wp-content\/original-assets\/september-2016\/deployment-pipeline-using-docker-jenkins-java-and-couchbase\/docker-pipeline-jenkins-login-1024x402.png\" alt=\"docker-pipeline-jenkins-login\" width=\"604\" height=\"237\" \/><br \/>\nIntroduzca el nombre de usuario y la contrase\u00f1a especificados anteriormente.<\/li>\n<li>Por \u00faltimo, Jenkins est\u00e1 listo para su uso:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14277\" src=\"\/wp-content\/original-assets\/september-2016\/deployment-pipeline-using-docker-jenkins-java-and-couchbase\/docker-pipeline-jenkins-start-using-1024x835.png\" alt=\"docker-pipeline-jenkins-start-using\" width=\"604\" height=\"493\" \/><\/li>\n<\/ul>\n<p>Son bastantes pasos para empezar con Jenkins b\u00e1sico. \u00bfRealmente tengo que pasar por todos estos aros para empezar con Jenkins? \u00bfExiste una manera m\u00e1s f\u00e1cil, simple, tonta y perezosa de comenzar con Jenkins? Sigue Convenci\u00f3n-sobre-Configuraci\u00f3n<br \/>\ny darme una instalaci\u00f3n preconfigurada con un solo clic.<\/p>\n<h2>Instalar plugins de Jenkins<\/h2>\n<p>Instale los plugins necesarios en Jenkins.<\/p>\n<ol>\n<li>Si tu proyecto Java est\u00e1 construido usando Maven, entonces necesitas configurar Maven en Jenkins. Haga clic en <code>Gestionar Jenkins<\/code>, <code>Configuraci\u00f3n global de la herramienta<\/code>, <code>Instalaciones de Maven<\/code>y especifique la ubicaci\u00f3n de Maven.<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14269\" src=\"\/wp-content\/original-assets\/september-2016\/deployment-pipeline-using-docker-jenkins-java-and-couchbase\/docker-pipeline-jenkins-configure-maven-1024x328.png\" alt=\"docker-pipeline-jenkins-configure-maven\" width=\"604\" height=\"193\" \/><br \/>\nNombra la herramienta como <code>Maven3<\/code> ya que es el nombre utilizado en la configuraci\u00f3n posterior.De nuevo un poco cojo, \u00bfpor qu\u00e9 no puede Jenkins recoger la ubicaci\u00f3n predeterminada de Maven en lugar de esperar que el usuario especifique una ubicaci\u00f3n.<\/li>\n<li>Haga clic en <code>Gestionar Jenkins<\/code>, <code>Gestionar plugins<\/code>, <code>Disponible<\/code> busque <code>tuber\u00eda docker<\/code>. Seleccione <code>Canalizaci\u00f3n Docker de CloudBees<\/code>haga clic en <code>Instalar sin reiniciar<\/code>. <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14275\" src=\"\/wp-content\/original-assets\/september-2016\/deployment-pipeline-using-docker-jenkins-java-and-couchbase\/docker-pipeline-jenkins-pipeline-plugin-1024x277.png\" alt=\"docker-pipeline-jenkins-pipeline-plugin\" width=\"604\" height=\"163\" \/><br \/>\nHaga clic en <code>Instalar sin reiniciar<\/code>.<a href=\"https:\/\/go.cloudbees.com\/docs\/cloudbees-documentation\/cje-user-guide\/chapter-docker-workflow.html\">Plugin Docker Pipeline<\/a>\u00a0entiende el archivo Jenkins y ejecuta<br \/>\nlos comandos que all\u00ed se enumeran.<\/li>\n<li>La siguiente pantalla muestra la lista de plugins instalados:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14276\" src=\"\/wp-content\/original-assets\/september-2016\/deployment-pipeline-using-docker-jenkins-java-and-couchbase\/docker-pipeline-jenkins-pipeline-plugin-restart-jenkins-1024x541.png\" alt=\"docker-pipeline-jenkins-pipeline-plugin-restart-jenkins\" width=\"604\" height=\"319\" \/><br \/>\nLa \u00faltima l\u00ednea muestra que el plugin CloudBees Docker Pipeline se ha instalado correctamente. Seleccione <code>Reiniciar Jenkins<\/code> casilla de verificaci\u00f3n. Esto instalar\u00e1 reiniciar Jenkins tambi\u00e9n.<\/li>\n<\/ol>\n<h2>Crear trabajo Jenkins<\/h2>\n<p>Vamos a crear un trabajo en Jenkins que ejecutar\u00e1 la tuber\u00eda.<\/p>\n<ol>\n<li>Despu\u00e9s de que Jenkins se reinicie, mostrar\u00e1 la pantalla de inicio de sesi\u00f3n. Introduzca el nombre de usuario y la contrase\u00f1a creados anteriormente. Esto le devuelve a\u00a0<code>Instalaci\u00f3n de plugins\/actualizaciones<\/code> p\u00e1gina. Haga clic en el icono Jenkins de la esquina superior izquierda para ver el panel principal:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14288\" src=\"\/wp-content\/original-assets\/september-2016\/deployment-pipeline-using-docker-jenkins-java-and-couchbase\/docker-pipeline-jenkins-dashboard-1024x693.png\" alt=\"docker-pipeline-jenkins-dashboard\" width=\"604\" height=\"409\" \/><\/li>\n<li>Haga clic en <code>crear nuevos puestos de trabajo<\/code>indique el nombre como <code>docker-jenkins-pipeline<\/code> y elija el tipo como Tuber\u00eda:<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14272\" src=\"\/wp-content\/original-assets\/september-2016\/deployment-pipeline-using-docker-jenkins-java-and-couchbase\/docker-pipeline-jenkins-create-project-1024x867.png\" alt=\"docker-pipeline-jenkins-create-project\" width=\"604\" height=\"511\" \/><br \/>\nPulse OK.<\/li>\n<li>Configure Pipeline como se muestra:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14270\" src=\"\/wp-content\/original-assets\/september-2016\/deployment-pipeline-using-docker-jenkins-java-and-couchbase\/docker-pipeline-jenkins-configure-pipeline-1024x807.png\" alt=\"docker-pipeline-jenkins-configure-pipeline\" width=\"604\" height=\"476\" \/><br \/>\nEn este caso se utiliza un repositorio git local. Puedes elegir un repositorio alojado en github. Adem\u00e1s, este repositorio se puede configurar con un gancho git o sondear a un intervalo constante para activar la tuber\u00eda. Haga clic en<br \/>\n<code>Guardar<\/code> para guardar la configuraci\u00f3n.<\/li>\n<\/ol>\n<h2>Ejecutar Jenkins Build<\/h2>\n<p>Antes de iniciar el trabajo, la base de datos Couchbase debe iniciarse expl\u00edcitamente como:<\/p>\n<pre class=\"lang:default decode:true\">docker run -d --name db -p 8091-8093:8091-8093 -p 11210:11210 arungupta\/oreilly-couchbase:latest<\/pre>\n<p>Esto se resolver\u00e1 despu\u00e9s de <a href=\"https:\/\/github.com\/arun-gupta\/docker-jenkins-pipeline\/issues\/9\">#9<\/a> est\u00e1 arreglado.  Aseg\u00farese de que puede acceder a Couchbase en https:\/\/localhost:8091, utilice <code>Administrador<\/code> como nombre de usuario y <code>contrase\u00f1a<\/code> como contrase\u00f1a. Haga clic en <code>Cubos de datos<\/code>\u00a0y ver el <code>libros<\/code> cubo creado.<br \/>\n<a href=\"\/wp-content\/original-assets\/september-2016\/deployment-pipeline-using-docker-jenkins-java-and-couchbase\/docker-pipeline-couchbase-books-1024x307.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14290\" src=\"\/wp-content\/original-assets\/september-2016\/deployment-pipeline-using-docker-jenkins-java-and-couchbase\/docker-pipeline-couchbase-books-1024x307.png\" alt=\"docker-pipeline-couchbase-books\" width=\"604\" height=\"181\" \/><\/a><br \/>\nHaga clic en <code>Construir ahora<\/code> y deber\u00eda ver una salida similar a:<br \/>\n<a href=\"\/wp-content\/original-assets\/september-2016\/deployment-pipeline-using-docker-jenkins-java-and-couchbase\/docker-pipeline-jenkins-build-run-1024x498.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14289\" src=\"\/wp-content\/original-assets\/september-2016\/deployment-pipeline-using-docker-jenkins-java-and-couchbase\/docker-pipeline-jenkins-build-run-1024x498.png\" alt=\"docker-pipeline-jenkins-build-run\" width=\"604\" height=\"294\" \/><\/a><br \/>\n\u00a1Todo lo verde es bueno!<\/p>\n<p>Intentemos comprender lo que ocurri\u00f3 entre bastidores. <a href=\"https:\/\/github.com\/arun-gupta\/docker-jenkins-pipeline\/blob\/master\/Jenkinsfile\">Jenkinsfile<\/a>\u00a0describe c\u00f3mo se construye la canalizaci\u00f3n. En el nivel superior, consta de cuatro etapas: empaquetar, crear<br \/>\nImagen Docker, Ejecutar Aplicaci\u00f3n y Ejecutar Pruebas. Cada etapa se muestra como un cuadro en el panel de Jenkins. El tiempo total empleado en cada etapa se muestra en el recuadro.<\/p>\n<p>Entendamos lo que ocurre en cada etapa.<\/p>\n<ul>\n<li><strong>Paquete<\/strong> - El c\u00f3digo fuente de la aplicaci\u00f3n se encuentra en <code>aplicaci\u00f3n web<\/code> directorio. Comando Maven <code>mvn clean paquete -DskipTests<\/code> se utiliza para crear un archivo JAR de la aplicaci\u00f3n. Tenga en cuenta que el proyecto maven tambi\u00e9n incluye<br \/>\nlas pruebas y se omiten expl\u00edcitamente mediante <code>-DskipTests<\/code>. Normalmente, las pruebas se realizar\u00edan en un <a href=\"https:\/\/github.com\/arun-gupta\/docker-jenkins-pipeline\/issues\/7\">proyecto derivado independiente<\/a>El proyecto Maven crea un archivo JAR lejano<br \/>\nde la aplicaci\u00f3n e incluye todas las dependencias.<\/li>\n<li><strong>Crear imagen Docker<\/strong> - La imagen Docker de la aplicaci\u00f3n se construye utilizando el m\u00f3dulo <a href=\"https:\/\/github.com\/arun-gupta\/docker-jenkins-pipeline\/blob\/master\/webapp\/Dockerfile\">Dockerfile<\/a> en el <code>aplicaci\u00f3n web<\/code> directorio.<br \/>\nLa imagen simplemente incluye el JAR gordo y lo ejecuta utilizando <code>java -jar<\/code>Cada imagen se etiqueta con el n\u00famero de compilaci\u00f3n utilizando <code>${env.BUILD_NUMBER}<\/code>.<\/li>\n<li><strong>Ejecutar aplicaci\u00f3n<\/strong> - Ejecutar la aplicaci\u00f3n implica ejecutar el contenedor Docker de la aplicaci\u00f3n.La direcci\u00f3n IP del contenedor de la base de datos se identifica utilizando la etiqueta <code>docker inspeccionar<\/code> El contenedor de la base de datos y la aplicaci\u00f3n<br \/>\nse ejecutan en el contenedor por defecto <code>puente<\/code> red. Esto permite que los dos contenedores se comuniquen entre s\u00ed. Otra mejora ser\u00eda ejecutar la tuber\u00eda en un cl\u00faster en modo enjambre. Esto requerir\u00eda crear<br \/>\ny utilizar un <code>superponer<\/code> red.<\/li>\n<li><strong>Ejecutar pruebas<\/strong> - Las pruebas se ejecutan contra el contenedor utilizando la funci\u00f3n <code>prueba mvn<\/code> . Si se superan las pruebas, la imagen se env\u00eda a Docker Hub. Los resultados de las pruebas se capturan de cualquier manera.Esta etapa tambi\u00e9n muestra el uso de <code>pruebe<\/code>\/<code>captura<\/code>\/<code>finalmente<\/code> en Jenkinsfile. Si se superan las pruebas, la imagen se env\u00eda a Docker Hub. En este caso, est\u00e1 disponible en\u00a0<a href=\"https:\/\/hub.docker.com\/r\/arungupta\/docker-jenkins-pipeline\/tags\/\">hub.docker.com\/r\/arungupta\/docker-jenkins-pipeline\/tags\/<\/a>.<\/li>\n<\/ul>\n<p>Algunas tareas pendientes ...<\/p>\n<ul>\n<li>Trasladar las pruebas a un proyecto posterior (<a href=\"https:\/\/github.com\/arun-gupta\/docker-jenkins-pipeline\/issues\/7\">#7<\/a>)<\/li>\n<li>Utilizar Git hook o poll para activar el pipeline (<a href=\"https:\/\/github.com\/arun-gupta\/docker-jenkins-pipeline\/issues\/8\">#8<\/a>)<\/li>\n<li>Automatizar el inicio\/apagado de la base de datos (<a href=\"https:\/\/github.com\/arun-gupta\/docker-jenkins-pipeline\/issues\/9\">#9<\/a>)<\/li>\n<li>Ejecutar pipeline en un cluster de Docker Engines con modo Swarm (<a href=\"https:\/\/github.com\/arun-gupta\/docker-jenkins-pipeline\/issues\/10\">#10<\/a>)<\/li>\n<li>Mostrar configuraci\u00f3n alternativa para enviar la imagen a bintray (<a href=\"https:\/\/github.com\/arun-gupta\/docker-jenkins-pipeline\/issues\/11\">#11<\/a>)<\/li>\n<\/ul>\n<p>Otro punto doloroso es que la sintaxis de las variables globales no parece estar documentada en ninguna parte. S\u00f3lo est\u00e1 disponible en :\/job\/docker-jenkins-pipeline\/pipeline-syntax\/globals. De nuevo, \u00a1esto es un poco cutre!<br \/>\n&#8221;<br \/>\n<a href=\"https:\/\/twitter.com\/agentdero\/status\/773987834982076416\">no es imposible, s\u00f3lo que a\u00fan no se ha puesto en pr\u00e1ctica<\/a>\" #sadpanda<\/p>\n<p>Algunas referencias adicionales para leer:<\/p>\n<ul>\n<li><a href=\"https:\/\/jenkins.io\/doc\/pipeline\/\">Primeros pasos con el archivo Jenkins<\/a><\/li>\n<li><a href=\"https:\/\/wiki.jenkins-ci.org\/display\/JENKINS\/CloudBees+Docker+Pipeline+Plugin\">Plugin CloudBees Docker Pipeline<\/a><\/li>\n<li><a href=\"https:\/\/go.cloudbees.com\/docs\/cloudbees-documentation\/cje-user-guide\/chapter-docker-workflow.html\">Gu\u00eda del usuario del plugin CloudBees Docker Pipeline<\/a><\/li>\n<li><a href=\"https:\/\/jenkins.io\/doc\/pipeline\/steps\/\">Referencia DSL Jenkinsfile<\/a><\/li>\n<li><a href=\"https:\/\/2016.javazone.no\/program\/jenkins-pipeline-jenkins-2-0-and-beyond\">Charla sobre tuber\u00edas Jenkins de JavaZone 2016<\/a><\/li>\n<\/ul>\n<p>M\u00e1s informaci\u00f3n sobre Couchbase:<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.couchbase.com\/server\">Portal para desarrolladores de Couchbase<\/a><\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/es\/forums\/\">Foros de Couchbase<\/a><\/li>\n<li><a href=\"https:\/\/twitter.com\/couchbasedev\">@couchbasedev<\/a> o <a href=\"https:\/\/twitter.com\/couchbase\">@couchbase<\/a><\/li>\n<\/ul>\n<p>No dude en presentar errores en\u00a0<a href=\"https:\/\/github.com\/arun-gupta\/docker-jenkins-pipeline\/issues\">github.com\/arun-gupta\/docker-jenkins-pipeline\/issues<\/a> o enviar PR.<\/p>","protected":false},"excerpt":{"rendered":"<p>This blog explains how to create\u00a0a Deployment Pipeline using Jenkins and Docker for a Java application talking to a database. Jenkins support the creation of pipelines. They are\u00a0built with simple text scripts that use a Pipeline DSL (domain-specific language) based [&hellip;]<\/p>","protected":false},"author":58,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816],"tags":[],"ppma_author":[8933],"class_list":["post-2386","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Deploy Pipeline using Docker, Jenkins, Java &amp; Couchbase<\/title>\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\/es\/deployment-pipeline-docker-jenkins-java-couchbase\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Deployment Pipeline using Docker, Jenkins, Java and Couchbase\" \/>\n<meta property=\"og:description\" content=\"This blog explains how to create\u00a0a Deployment Pipeline using Jenkins and Docker for a Java application talking to a database. Jenkins support the creation of pipelines. They are\u00a0built with simple text scripts that use a Pipeline DSL (domain-specific language) based [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/deployment-pipeline-docker-jenkins-java-couchbase\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-01-06T08:26:14+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-05-18T12:25:23+00:00\" \/>\n<meta name=\"author\" content=\"Arun Gupta, VP, Developer Advocacy, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@arungupta\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Arun Gupta, VP, Developer Advocacy, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/deployment-pipeline-docker-jenkins-java-couchbase\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/deployment-pipeline-docker-jenkins-java-couchbase\/\"},\"author\":{\"name\":\"Arun Gupta, VP, Developer Advocacy, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/39d8caed0f536489b6aa6e8d31ee631f\"},\"headline\":\"Deployment Pipeline using Docker, Jenkins, Java and Couchbase\",\"datePublished\":\"2017-01-06T08:26:14+00:00\",\"dateModified\":\"2023-05-18T12:25:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/deployment-pipeline-docker-jenkins-java-couchbase\/\"},\"wordCount\":1115,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/deployment-pipeline-docker-jenkins-java-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Couchbase Server\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/deployment-pipeline-docker-jenkins-java-couchbase\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/deployment-pipeline-docker-jenkins-java-couchbase\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/deployment-pipeline-docker-jenkins-java-couchbase\/\",\"name\":\"Deploy Pipeline using Docker, Jenkins, Java & Couchbase\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/deployment-pipeline-docker-jenkins-java-couchbase\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/deployment-pipeline-docker-jenkins-java-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-01-06T08:26:14+00:00\",\"dateModified\":\"2023-05-18T12:25:23+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/deployment-pipeline-docker-jenkins-java-couchbase\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/deployment-pipeline-docker-jenkins-java-couchbase\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/deployment-pipeline-docker-jenkins-java-couchbase\/#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\/deployment-pipeline-docker-jenkins-java-couchbase\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Deployment Pipeline using Docker, Jenkins, Java and Couchbase\"}]},{\"@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\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\/39d8caed0f536489b6aa6e8d31ee631f\",\"name\":\"Arun Gupta, VP, Developer Advocacy, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8900a75409c646948fe0bd80f6240337\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g\",\"caption\":\"Arun Gupta, VP, Developer Advocacy, Couchbase\"},\"description\":\"Arun Gupta is the vice president of developer advocacy at Couchbase. He has built and led developer communities for 10+ years at Sun, Oracle, and Red Hat. He has deep expertise in leading cross-functional teams to develop and execute strategy, planning and execution of content, marketing campaigns, and programs. Prior to that he led engineering teams at Sun and is a founding member of the Java EE team. Gupta has authored more than 2,000 blog posts on technology. He has extensive speaking experience in more than 40 countries on myriad topics and is a JavaOne Rock Star for three years in a row. Gupta also founded the Devoxx4Kids chapter in the US and continues to promote technology education among children. An author of several books on technology, an avid runner, a globe trotter, a Java Champion, a JUG leader, NetBeans Dream Team member, and a Docker Captain, he is easily accessible at @arungupta.\",\"sameAs\":[\"https:\/\/x.com\/arungupta\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/arun-gupta\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Deploy Pipeline using Docker, Jenkins, Java & Couchbase","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\/es\/deployment-pipeline-docker-jenkins-java-couchbase\/","og_locale":"es_MX","og_type":"article","og_title":"Deployment Pipeline using Docker, Jenkins, Java and Couchbase","og_description":"This blog explains how to create\u00a0a Deployment Pipeline using Jenkins and Docker for a Java application talking to a database. Jenkins support the creation of pipelines. They are\u00a0built with simple text scripts that use a Pipeline DSL (domain-specific language) based [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/es\/deployment-pipeline-docker-jenkins-java-couchbase\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-01-06T08:26:14+00:00","article_modified_time":"2023-05-18T12:25:23+00:00","author":"Arun Gupta, VP, Developer Advocacy, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@arungupta","twitter_misc":{"Written by":"Arun Gupta, VP, Developer Advocacy, Couchbase","Est. reading time":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/deployment-pipeline-docker-jenkins-java-couchbase\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/deployment-pipeline-docker-jenkins-java-couchbase\/"},"author":{"name":"Arun Gupta, VP, Developer Advocacy, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/39d8caed0f536489b6aa6e8d31ee631f"},"headline":"Deployment Pipeline using Docker, Jenkins, Java and Couchbase","datePublished":"2017-01-06T08:26:14+00:00","dateModified":"2023-05-18T12:25:23+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/deployment-pipeline-docker-jenkins-java-couchbase\/"},"wordCount":1115,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/deployment-pipeline-docker-jenkins-java-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Couchbase Server"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/deployment-pipeline-docker-jenkins-java-couchbase\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/deployment-pipeline-docker-jenkins-java-couchbase\/","url":"https:\/\/www.couchbase.com\/blog\/deployment-pipeline-docker-jenkins-java-couchbase\/","name":"Deploy Pipeline using Docker, Jenkins, Java & Couchbase","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/deployment-pipeline-docker-jenkins-java-couchbase\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/deployment-pipeline-docker-jenkins-java-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-01-06T08:26:14+00:00","dateModified":"2023-05-18T12:25:23+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/deployment-pipeline-docker-jenkins-java-couchbase\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/deployment-pipeline-docker-jenkins-java-couchbase\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/deployment-pipeline-docker-jenkins-java-couchbase\/#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\/deployment-pipeline-docker-jenkins-java-couchbase\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Deployment Pipeline using Docker, Jenkins, Java and Couchbase"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos 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":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@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\/39d8caed0f536489b6aa6e8d31ee631f","name":"Arun Gupta, Vicepresidente, Defensa del Desarrollador, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8900a75409c646948fe0bd80f6240337","url":"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g","caption":"Arun Gupta, VP, Developer Advocacy, Couchbase"},"description":"Arun Gupta es vicepresidente de promoci\u00f3n de desarrolladores en Couchbase. Ha creado y dirigido comunidades de desarrolladores durante m\u00e1s de 10 a\u00f1os en Sun, Oracle y Red Hat. Tiene una gran experiencia en liderar equipos multidisciplinares para desarrollar y ejecutar estrategias, planificar y ejecutar contenidos, campa\u00f1as de marketing y programas. Anteriormente dirigi\u00f3 equipos de ingenier\u00eda en Sun y es miembro fundador del equipo Java EE. Gupta es autor de m\u00e1s de 2.000 entradas de blog sobre tecnolog\u00eda. Tiene una amplia experiencia como conferenciante en m\u00e1s de 40 pa\u00edses sobre innumerables temas y es una JavaOne Rock Star desde hace tres a\u00f1os consecutivos. Gupta tambi\u00e9n fund\u00f3 el cap\u00edtulo Devoxx4Kids en Estados Unidos y sigue promoviendo la educaci\u00f3n tecnol\u00f3gica entre los ni\u00f1os. Autor de varios libros sobre tecnolog\u00eda, \u00e1vido corredor, trotamundos, campe\u00f3n de Java, l\u00edder de JUG, miembro del Dream Team de NetBeans y capit\u00e1n de Docker, es f\u00e1cilmente accesible en @arungupta.","sameAs":["https:\/\/x.com\/arungupta"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/arun-gupta\/"}]}},"authors":[{"term_id":8933,"user_id":58,"is_guest":0,"slug":"arun-gupta","display_name":"Arun Gupta, VP, Developer Advocacy, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g","author_category":"","last_name":"Gupta","first_name":"Arun","job_title":"","user_url":"","description":"Arun Gupta es vicepresidente de promoci\u00f3n de desarrolladores en Couchbase. Ha creado y dirigido comunidades de desarrolladores durante m\u00e1s de 10 a\u00f1os en Sun, Oracle y Red Hat. Tiene una gran experiencia en liderar equipos multidisciplinares para desarrollar y ejecutar estrategias, planificar y ejecutar contenidos, campa\u00f1as de marketing y programas. Anteriormente dirigi\u00f3 equipos de ingenier\u00eda en Sun y es miembro fundador del equipo Java EE.\r\n\r\nGupta es autor de m\u00e1s de 2.000 entradas de blog sobre tecnolog\u00eda. Tiene una amplia experiencia como conferenciante en m\u00e1s de 40 pa\u00edses sobre innumerables temas y es una JavaOne Rock Star desde hace tres a\u00f1os consecutivos. Gupta tambi\u00e9n fund\u00f3 el cap\u00edtulo Devoxx4Kids en Estados Unidos y sigue promoviendo la educaci\u00f3n tecnol\u00f3gica entre los ni\u00f1os. Autor de varios libros sobre tecnolog\u00eda, \u00e1vido corredor, trotamundos, campe\u00f3n de Java, l\u00edder de JUG, miembro del Dream Team de NetBeans y capit\u00e1n de Docker, es f\u00e1cilmente accesible en @arungupta."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2386","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/58"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=2386"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2386\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=2386"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=2386"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=2386"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=2386"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}