{"id":4214,"date":"2016-11-24T17:15:01","date_gmt":"2016-11-24T15:15:01","guid":{"rendered":"https:\/\/www.hiberus.com\/blog\/?p=4214"},"modified":"2023-12-07T09:35:13","modified_gmt":"2023-12-07T08:35:13","slug":"jenkins-como-automatizar-tareas-despliegues-testing","status":"publish","type":"post","link":"https:\/\/www.hiberus.com\/crecemos-contigo\/jenkins-como-automatizar-tareas-despliegues-testing\/","title":{"rendered":"Jenkins: C\u00f3mo automatizar tareas, despliegues y testing"},"content":{"rendered":"<p>Como empresa tecnol\u00f3gica tenemos que estar actualizados en cuanto a nuevos lenguajes de programaci\u00f3n, nuevas librer\u00edas, nuevos est\u00e1ndares&#8230; en definitiva, muchas cosas que es realmente dif\u00edcil de asimilar sin un proceso de aprendizaje continuo. A veces esta continua revisi\u00f3n deja de lado el testing, la automatizaci\u00f3n de pruebas, despliegues semi-autom\u00e1ticos&#8230; una parte muy importante del d\u00eda a d\u00eda. Por ello en Hiberus intentamos dedicar tiempo tambi\u00e9n en este aspecto usando <a href=\"https:\/\/jenkins.io\/\">Jenkins<\/a>.<\/p>\n<h2>\u00bfQu\u00e9 es Jenkins?<\/h2>\n<p>Jenkins es un aplicativo para la automatizaci\u00f3n del proceso completo de desarrollo de software, con tareas comunes como la integraci\u00f3n continua pero sobretodo potenciando los equipos para implementar la parte t\u00e9cnica de la entregas continuas.<\/p>\n<p>Para una persona que no est\u00e1 en contacto con el mundo tecnol\u00f3gico puede parecer un juego de palabras, pero b\u00e1sicamente esto viene a decir que disponemos de un software que nos permite automatizar los procesos de despliegue, la actualizaci\u00f3n de entornos, revisi\u00f3n de calidad de c\u00f3digo y testing.\u00a0Esto finalmente se traduce en entregas peri\u00f3dicas a cliente, en tiempo y forma\u00a0con resultados que garantizan un producto funcional y listo para su explotaci\u00f3n.<\/p>\n<p>Jenkins debe su potencial a su ampli y vers\u00e1til sistema de plugins\u00a0que nos permiten realizar diferentes conjuntos de acciones, que permiten modularizar y extender la funcionalidad.<\/p>\n<h2>\u00bfQu\u00e9 son los plugins?<\/h2>\n<p>Jenkins est\u00e1 respaldado una gran comunidad, d\u00f3nde cualquier desarrollador puede programar su propio plugin y ofrecer de nueva funcionalidad a nuestra aplicaci\u00f3n de Jenkins. Algunos plugins realmente interesantes que usamos en nuestro d\u00eda a d\u00eda son\u00a0FTP, SSH, GIT Conector, Task&#8230; existen cientos de plugins.<\/p>\n<h3>Publicaci\u00f3n de contenidos mediante FTP<\/h3>\n<p>Este <a href=\"https:\/\/wiki.jenkins-ci.org\/display\/JENKINS\/Publish+Over+FTP+Plugin\">plugin<\/a> nos permite publicar contenido en una m\u00e1quina d\u00f3nde dispongamos de acceso mediante FTP. Este plugin es muy usado en m\u00e1quinas d\u00f3nde no se dispone de un usuario SSH con el que acceder a la m\u00e1quina.<\/p>\n<h3>Publicaci\u00f3n de contenidos mediante SSH<\/h3>\n<p>Uno de mis preferidos por la potencia que nos brinda. Este <a href=\"https:\/\/wiki.jenkins-ci.org\/display\/JENKINS\/Publish+Over+SSH+Plugin\">plugin<\/a> permite conectarnos a una m\u00e1quina remota mediante SSH y realizar operaciones b\u00e1sicas como limpiar la cache de una aplicaci\u00f3n, cambiar permisos a unas carpetas o ejecutar scripts en el servidor de destino.<\/p>\n<h3>Control de calidad<\/h3>\n<p>Mas que a trav\u00e9s de un plugin en concreto, el control de calidad y pruebas emplea toda una suite la cual nos permite realizar la ejecuci\u00f3n de pruebas funcionales y unitarias y que valida cada entrega o cambio realizado a una aplicaci\u00f3n .<\/p>\n<p>Como complemento contamos con plugins de control de calidad de c\u00f3digo, que nos dan brindan una serie de reportes basado en est\u00e1ndares de m\u00e9tricas que nos permiten aseverar que desarrollamos aplicaciones robustas y seguras .<\/p>\n<h2>Gesti\u00f3n de usuarios<\/h2>\n<p>Otro aspecto muy importante a tener en cuenta a la hora de usar Jenkins\u00a0es configuraci\u00f3n o ejecuci\u00f3n de tareas por usuario, lo que nos permite\u00a0segmentar el acceso a los proyectos y entornos a los miembros autorizados.<\/p>\n<h2>Satisfacci\u00f3n del cliente<\/h2>\n<p>Los errores humanos, por muy profesionales que sean los equipos, est\u00e1n a la orden del d\u00eda. Jenkins nos permite que casi cualquier persona del equipo sea capaz de realizar un despliegue, interpretar los resultados obtenidos y generar un producto listo para entregar al cliente.<\/p>\n<p>Pondremos un ejemplo de un entorno algo complejo: se ha desarrollado una nueva funcionalidad que se encuentra lista para pasar a producci\u00f3n. Bajo este escenario \u00a0una vez concluidas todas las pruebas se notifica a nuestro equipo de sistemas, los cuales recibir\u00e1n un paquete de actualizaci\u00f3n con los cambios a propagar a producci\u00f3n, y un listado de tareas a ejecutar: actualizaci\u00f3n de bases de datos, limpiar memoria del sistema, limpiar caches de aplicaci\u00f3n y servidor, actualizar nodos d\u00f3nde se tiene la aplicaci\u00f3n replicada para mejorar la tasa de respuestas, etc. Como v\u00e9is no son tareas triviales, y saltarnos cualquiera de estos pasos puede terminar en una aplicaci\u00f3n ca\u00edda en un entorno de producci\u00f3n que pudiera ser un comercio electr\u00f3nico grande\u00a0o una p\u00e1gina de turismo con millones de visitas mensuales.<\/p>\n<p>Con Jenkins todas estas tareas se planifican y configuran desde el minuto 0 incluyendo contramedidas si cualquiera de ellas falla, reduciendo al m\u00ednimo la ocurrencia de errores, los problemas de despliegue y el downtime entre actualizaciones.<\/p>\n<h2>Control de lo que desplegamos<\/h2>\n<p>A veces es dif\u00edcil mantener informado al cliente de todo lo que va a recibir en un sprint o entrega. Con Jenkins y su integraci\u00f3n con Git (el sistema de control de versiones que empleamos), este reporte es ta sencillo como darle al bot\u00f3n de <strong>Ejecutar tarea<\/strong> y obtendremos los cambios realizados con respecto al despliegue anterior. Hay que recalcar que en este aspecto es important\u00edsimo que nuestro desarrolladores realicen trabajos at\u00f3micos, que no mezclen funcionalidades en cada trabajo que realizan y que se sigan algunas recomendaciones sobre escritura de mensajes. Estos mensajes finalmente pueden ser extraidos por el encargado de despliegues o el jefe de proyecto y se emplean para la elaboraci\u00f3n de un documento m\u00e1s formal para entregar a los clientes con las tareas realizadas desde la \u00faltima versi\u00f3n del aplicativo.<\/p>\n<div id=\"attachment_4220\" style=\"width: 630px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-4220\" class=\"size-large wp-image-4220\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2016\/10\/jenkins-control-cambios-1024x419.png\" alt=\"Pantalla de ejecuci\u00f3n de tarea sobre Jenkins\" width=\"620\" height=\"254\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2016\/10\/jenkins-control-cambios-1024x419.png 1024w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2016\/10\/jenkins-control-cambios-300x123.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2016\/10\/jenkins-control-cambios-768x314.png 768w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2016\/10\/jenkins-control-cambios-360x147.png 360w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2016\/10\/jenkins-control-cambios.png 1051w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><p id=\"caption-attachment-4220\" class=\"wp-caption-text\">Ejemplo de despliegue en un entorno de validaci\u00f3n con visibilidad a cliente<\/p><\/div>\n<p>&nbsp;<\/p>\n<p>En <a href=\"https:\/\/www.hiberus.com?utm_source=BlogHiberus&amp;utm_medium=categoria-internet&amp;utm_campaign=jenkins\">Hiberus<\/a> intentamos ofrecer tecnolog\u00eda a la \u00faltima, sin perder de vista la calidad de nuestros aplicativos entregados, su estabilidad, su mantenimiento y su fiabilidad en el proceso de despliegues. Si te ha gustado el art\u00edculo no dudes en compartir plugins interesantes, contarnos tu proceso de despliegues u otras cuestiones similares.<\/p>\n        <div class=\"row\">\n            <div class=\"block-cta-form\" style=\"background-color: #003664;\">\n                <div class=\"content-cta-form\">\n                    <div class=\"text-cta-form\">\n                        <p class=\"title-cta-form\">\u00bfQuieres m\u00e1s informaci\u00f3n sobre nuestros servicios de QA?<\/p>\n                        <p>Contacta con nuestro equipo de expertos en QA y Testing<\/p>\n                    <\/div>\n                    <div class=\"form-fields\">\n                        \n<div class=\"wpcf7 no-js\" id=\"wpcf7-f33973-o1\" lang=\"es-ES\" dir=\"ltr\" data-wpcf7-id=\"33973\">\n<div class=\"screen-reader-response\"><p role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/p> <ul><\/ul><\/div>\n<form action=\"\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/4214#wpcf7-f33973-o1\" method=\"post\" class=\"wpcf7-form init\" aria-label=\"Formulario de contacto\" novalidate=\"novalidate\" data-status=\"init\">\n<fieldset class=\"hidden-fields-container\"><input type=\"hidden\" name=\"_wpcf7\" value=\"33973\" \/><input type=\"hidden\" name=\"_wpcf7_version\" value=\"6.1.5\" \/><input type=\"hidden\" name=\"_wpcf7_locale\" value=\"es_ES\" \/><input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f33973-o1\" \/><input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/><input type=\"hidden\" name=\"_wpcf7_posted_data_hash\" value=\"\" \/><input type=\"hidden\" name=\"_wpcf7_recaptcha_response\" value=\"\" \/>\n<\/fieldset>\n<div id=\"responsive-form\" class=\"clearfix\">\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"nombre\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Nombre *\" value=\"\" type=\"text\" name=\"nombre\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"apellido\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Apellido *\" value=\"\" type=\"text\" name=\"apellido\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"correo\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Correo corporativo *\" value=\"\" type=\"email\" name=\"correo\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"telf-contacto\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-tel wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-tel\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Tel\u00e9fono *\" value=\"\" type=\"tel\" name=\"telf-contacto\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"compania\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Compa\u00f1ia *\" value=\"\" type=\"text\" name=\"compania\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-full\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"mensaje\"><textarea cols=\"40\" rows=\"10\" maxlength=\"2000\" class=\"wpcf7-form-control wpcf7-textarea wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Mensaje *\" name=\"mensaje\"><\/textarea><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-full color-acceptance\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"politica\"><span class=\"wpcf7-form-control wpcf7-acceptance\"><span class=\"wpcf7-list-item\"><label><input type=\"checkbox\" name=\"politica\" value=\"1\" aria-invalid=\"false\" \/><span class=\"wpcf7-list-item-label\">He le\u00eddo y acepto la <a href=\"https:\/\/www.hiberus.com\/politica\" target=\"_blank\"><u>Pol\u00edtica de privacidad<\/u><\/a><\/span><\/label><\/span><\/span><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-full color-acceptance\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"marketing\"><span class=\"wpcf7-form-control wpcf7-acceptance optional\"><span class=\"wpcf7-list-item\"><label><input type=\"checkbox\" name=\"marketing\" value=\"1\" aria-invalid=\"false\" \/><span class=\"wpcf7-list-item-label\">Me gustar\u00eda recibir comunicaciones de marketing de Hiberus y sobre sus productos, servicios y eventos.<\/span><\/label><\/span><\/span><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><input class=\"wpcf7-form-control wpcf7-submit has-spinner\" type=\"submit\" value=\"Contacta con nosotros\" \/>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div id=\"campos_ocultos\" class=\"hidden\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new1\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new1\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new1\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new2\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new2\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new2\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new3\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new3\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new3\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new4\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new4\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new4\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new_p\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new_p\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new_p\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n<!--end responsive-form--><div class=\"wpcf7-response-output\" aria-hidden=\"true\"><\/div>\n<\/form>\n<\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n        \n","protected":false},"excerpt":{"rendered":"<p>Como empresa tecnol\u00f3gica tenemos que estar actualizados en cuanto a nuevos lenguajes de programaci\u00f3n, nuevas librer\u00edas, nuevos est\u00e1ndares&#8230; en definitiva, muchas cosas&#8230;<\/p>\n","protected":false},"author":34,"featured_media":4606,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_ayudawp_aiss_exclude":false,"footnotes":""},"categories":[234,3],"tags":[14,30],"class_list":{"0":"post-4214","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-aplicaciones-moviles","8":"category-negocio-electronico","9":"tag-aplicaciones-multiplataforma","10":"tag-desarrollo-de-aplicaciones-moviles"},"acf":[],"_links":{"self":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/4214","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/users\/34"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/comments?post=4214"}],"version-history":[{"count":3,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/4214\/revisions"}],"predecessor-version":[{"id":39584,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/4214\/revisions\/39584"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/media\/4606"}],"wp:attachment":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/media?parent=4214"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/categories?post=4214"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/tags?post=4214"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}