====== Flujo de despliegue de una aplicación ====== El flujo que se ha implementado para el despliegue con Jenkins es ligeramente diferente al que teníamos en ÁTICA hasta este momento pero más sencillo y nos permite tener un mayor control sobre las versiones que estamos desplegando cada momento en cada uno de los entornos de trabajo. El ciclo de vida en el desarrollo de aplicaciones es el siguiente: * Las aplicaciones empezarán su desarrollo en local. En este punto deberían darse de alta en Jenkins para que los cambios realizados por los diferentes desarrolladores sean testeados por el servidor. Es esencial la realización de test adecuados para comprobar que la aplicación es funcional. * Una vez que el desarrollo en local ha avanzado, la aplicación se despliega en el servidor de desarrollo para comprobar que la configuración en los servidores es correcta. El código que se despliega en este servidor es el mismo que se utiliza para desarrollo y los test realizados anteriormente tienen la misma validez. * Con el desarrollo ya avanzado, la aplicación se pasa a preproducción para que se realicen pruebas por parte de los usuarios y depuración con datos reales. El código que se despliega en este servidor es el mismo que en desarrollo, pero esta vez le podemos indicar qué revisión estamos interesados en desplegar. Debemos tener en cuenta que el código existente en preproducción, es candidato a ser desplegado en producción. * Una vez probada la aplicación, se podrá desplegar en producción, para ello haremos uso de los despliegues exitosos realizados en preproducción, los cuales generaron su Tag correspondiente. Una vez seleccionado el Tag que queremos desplegar el servidor cargará nuestra aplicación y generará una nueva versión en el respositorio. {{ :fdw2.0:fundeweb2.0:gt:jenkins:jenkins_4.png |}} **Importante**: En producción sólo se podrá desplegar a partir de una ejecución correcta en preproducción. ====== El servidor de integración continua Jenkins ====== El servidor de integración continua Jenkins, se encuentra disponible en [[https://jenkins.um.es]] y para acceder a él deberemos hacerlo a través del SSO de la Universidad de Murcia. Una vez dentro podremos examinar nuestros proyectos o crear un proyecto nuevo. A continuación describiremos los diferentes pasos para configurar y ejecutar correctamente nuestro proyecto Fundeweb en Jenkins. Cuando ejecutamos Jenkins para lanzar un proyecto, obtendrá la versión del código vigente en ese momento, la compilará y desplegará sobre el servidor correspondiente. Adicionalmente pasará los plugins **CheckStyle**, **FindBugs** y **JavaNCSS** para evaluar la calidad del código desplegado y tener una medida general del estado de la aplicación. De igual manera se lanzarán los **test** unitarios que hayamos realizado para asegurar que la aplicación a desplegar funciona correctamente. En Jenkins se llaman //Tareas// a cada uno de los proyectos que se crearán y necesitaremos cuatro por cada uno de los proyectos FundeWeb que queremos desplegar, uno por cada entorno: **local, desarrollo, preproducción y producción**. Se disponen de plantillas diferentes para cada una de las "//tareas//" de manera que se puedan personalizar fácilmente. ===== Tipos de despliegues ===== En Jenkins disponemos de cuatro tipos de despliegues diferentes, cada uno con una configuración específica según el entorno objetivo. Dichos despliegues se encontrarán en el "Tab" **Plantillas** del menú principal, los cuales podremos utilizar como base para configurar nuestra aplicación. {{ :fdw2.0:fundeweb2.0:gt:jenkins:jenkins_1.png |}} Los diferentes tipos de despliegues acutan de manera diferente, a continuación explicamos qué tareas realizan cada uno. * **Despliegue local:** Configuramos nuestro proyecto local leyendo directamente del **trunk** la **última versión** disponible. Tras ello se compila, lanzan test y generan los informes. No se hace ninguna operación adicional. * **Despliegue desarrollo:** Configuramos nuestro proyecto local leyendo directamente del **trunk**la revisión que se nos pide por parámetro (el número de revisión que queramos desplegar o "head" en caso de querer la última). Tras ello se compila, lanzan test y generan los informes. Posteriormente se despliega la aplicación en el servidor de desarrollo. * **Despliegue preproducción:** Configuramos nuestro proyecto local leyendo del **trunk** la revisión que se nos pide por parámetro (el número de revisión que queramos desplegar o "head" en caso de querer la última). Tras ello se compila, lanzan test, generan los informes y se despliega en el servidor de test. * Por último se genera un **Tag** con nombre "fechaDespliegue_rev[numeroRevision]" en la ruta del repostiorio del proyecto creada para tal fin siguiendo las indicaciones de Medea para crear la [[mda:gc:mda-pr-1.0-gc-establecer_el_sistema_de_gestion_de_configuracion#estructura_de_directorios_del_proyecto|estructura de proyectos]]. * **Despliegue producción:** Configuramos nuestro proyecto leyendo uno de los tags creados en el despliegue en preproducción. **En producción sólo se podrá desplegar a partir de tags creados en preproducción**. Tras ello se compila, lanzan test, generan los informes y se despliega en el servidor de producción. Por último se genera una **Versión** en la ruta del repostiorio del proyecto creada para tal fin siguiendo las indicaciones de Medea para crear la [[mda:gc:mda-pr-1.0-gc-establecer_el_sistema_de_gestion_de_configuracion#estructura_de_directorios_del_proyecto|estructura de proyectos]], aumentando en 1 el número de la versión anterior dependiendo de si es una nueva versión, una revisión o un fix. ** Ejecución en preproducción ** La variable **Rev** leerá el número de revisión que quiero desplegar en preproducción. En caso de querer la última indicaremos **HEAD**. El servidor Jenkins desplegará la revisión indicada y creará un Tag en base a ella, en caso de ser la revisión "HEAD" Jenkins calculará el número de esa revisión y lo añadirá al nombre del Tag. {{ :fdw2.0:fundeweb2.0:gt:jenkins:jenkins_2.png |}} ** Ejecución en producción ** La variable **Tag** es un combobox ordenado de más reciente a más antiguo de los Tags generados en la fase de preproducción. La variable **TipoVersion** es un combo box de tres valores correspondientes al tipo de versión que se quiere hacer. El nombrado de las versiones consta de tres dígitos dependiendo del tipo de versión: Versión.Revisión.Fix. Según indiquemos uno u otro tipo, la nueva versión creada aumentará el dígito correspondiente a esa posición. {{ :fdw2.0:fundeweb2.0:gt:jenkins:jenkins_3.png |}}