====== Gestión de Releases ====== {{:mda:gc:mda-pr-1.0-gc-liberar_builds_y_releases.png?900x1500|}} ====== Objetivos ====== El objetivo de este proceso es **gestionar las releases** del proyecto, definiendo como se crea, consulta y recupera cada release del proyecto. ====== Roles ====== Los siguientes son los roles participantes en este proceso: ^ Rol ^ Tareas que interviene ^^^ |**Gestor de la Configuración** | | | |MDA-TR-1.0.-GC-Crear Release | | |MDA-TR-1.0.-GC-Recuperar Release | |** Integrador **| | | |MDA-TR-1.0.-GC-Merge entre Releases | |**Cualquiera** | | | |MDA-TR-1.0.-GC-Consultar Release | ====== Tareas ====== ===== MDA-TR-1.0-GC-Crear Release ===== ** Cuándo se ejecuta esta tarea** La creacion y liberación de una release, se podrá producir, en los siguientes momentos del [[mda:ciclo_vida_codigo_proyecto|ciclo de vida del código del proyecto ]]: * cuando se haya finalizado el desarrollo de un conjunto de funcionalidades de la aplicación (puede englobar varios sprints) y vayamos a pasarlo al entorno de preproduccion (pruebas de usuario) * cuando se hagan cambios a la versión mostrada al usuario, por los errores detectados por éste o por pequeños cambios solicitados por él. * cuando se hayan finalizado las pruebas de usuario y se quiera sacar una versión a producción. * cuando haya cambios en la versión subida a produccion (bug detectado). Así que este proceso se ejecutará dos veces uno para preproducción y otro para producción, como MINIMO. A esto lo denominaremos **versiones**. Aparte, durante el desarrollo, puede surgir la necesidad de crear ramas distintas, para congelar una versión del proyecto, que contenga cierta funcionalidad, por ejemplo para probar nuevas interconexiones, que no se saben si finalmente se realizarán, y no se quiere entrar en conflicto con la rama de desarrollo actual. A esto lo denominaremos **ramas**. La única diferencia entre ramas y versiones es conceptual, para el servidor de versiones Subversion son exactamente la misma cosa. ** ¿Que significa crear una release? ** Crear una rama del repositorio del proyecto, etiquetada. Con lo cual pasaremos a tener dos versiones del proyecto, el tronco que colgará de la carpeta ///Proyecto/Fuentes// y las versiones, que colgarán de ///Versiones//, o de ///ramas// en el caso en que queramos crear una rama. En el tronco del proyecto seguiremos desarrollando el proyecto y en la versión tendremos el código que "ve" el usuario. ** Nombrado de las versiones ** Para crear las etiquetas de cada versión usaremos 3 números separados por puntos (x.y.z), de menos significativo a más significativo significan: * Z: Build (empezará en cero, e irá aumentando de uno en uno por cada parche que se publique para solucionar cambios no planificados, como son los bugs o cambios funcionales mínimos). * Y: Release (empezará en cero, e irá aumentando en uno por cada cambio planificado, acumulación de nuevas funcionalidades, etc.) * X: Versión (empezará en uno, y sólo cambiará cuando haya cambios radicales en la aplicación, como cambios de arquitectura o diseño o cambios funcionales importantes). Para la versiones a PREPRODUCCION, pondremos o bien la versión X.Y.Z.beta para la primera subida o la versión acabada en X.Y.Z.CRx, siendo la x el número de Release candidata. Para la versiones a PRODUCCION, no habrá terminación. ** Qué versionar ** La rama /Proyecto (que incluye el SW y también la documentación). Una vez aclarados los conceptos, explicamos la tarea paso a paso. ==== 1. Actualizar JIRA==== Normalmente YA estará creada la versión en el JIRA, ya que las historias y sus posteriores jiras de desarrollo han tenido que ser creados en la fase de requisitos. Ahora bien si es una versión de PREPRODUCCION no estará creado. O bien puede ser una versión de corrección que no se haya tenido en cuenta. Dependiendo del caso que sea, optaremos entre dos alternativas, para decidir si la versión tiene padre o no: * Si es una version "1.0.X" de PRODUCCION colgará del raiz. * Si es una versión de PREPRODUCCION se asociará como hija a la versión de PRODUCCION "1.X.0" que se está desarrollando Por ejemplo si estamos creando la 1.0.0.beta: nos iriamos a [[https://jira.atica.um.es/jira/|JIRA ]] y lo meteriamos nueva. {{:mda:gc:crearrelease25.png|}} {{:mda:gc:crearrelease26.png|}} {{:mda:gc:crearrelease27.png|}} Una vez creada se podrá poner esta versión en el campo "Versión Fijada", en la resolución de JIRA. ==== 2. Dar de alta en JIRA ==== ^Nota^En Jira debe estar creada previamente la versión. Si no está creada, el jefe del proyecto debe crearla en Jira en la opción de menú //Administración -> Proyectos -> Manage Version//^ **Cada participante** en esta tarea DEBE crear un **JIRA** con los siguientes datos, y **registrar las horas de trabajo** en ella: ^ Tipo ^ Sumario ^ Disciplina ^ Proceso ^ Label ^ Version Fijada ^^^ | //Tarea// | // Crear una Release // | // Gestión de la configuración// | //GC-Liberar Build y Releases// | PRE / PRO |//[Versión del proyecto]// | En Label se especificará PRE si es para el entorno de PREPRODUCCION y PRO si es para el entorno de PRODUCCION. ==== 3. Comprobar funcionamiento correcto en desarrollo==== Lo primero que haremos antes de liberar cualquier release, es ver si la version que se va a etiquetar, funciona correctamente en desarrollo y tiene todas las funcionalidades que se quieren pasar. Es probable que esté suficientemente probada en los servidores locales de los desarrolladores, pero la configuración en los servidores de desarrollo es diferente y similar a la de explotacion / preproduccion con lo que antes de sacar un tag nos aseguraremos de que está funcionando correctamente en desarrollo. Las subidas a desarrollo se hacen automáticamente todos los dias por el Jenkins. Si hace falta hacer otra subida seguir el proceso de subida al contenedor de desarrollo descrito en el ** punto 3 ** de [[mda:dsp:mda-pr-1.0-dsp-prepararentornodepruebas#mda-tr-1.0-gc-instalar_aplicacion|Instalar Aplicación]]. ==== 4. Crear el Tag==== Pasos para hace el Tag: * 1. Hacer un "Svn..Checkout" de lo que se quiere versionar. Por ejemplo, si el proyecto es PROTOTIPO y queremos hacer un tag del tronco principal (para sacar la primera version a PREPRODUCCION) se haría de "https://svn.um.es/svn/PROTOTIPO/proyecto". En esa carpeta tendremos el tronco principal. Si lo que queremos es pasar a una versión candidata CR o hacer un cambio de versión "leve" de lo que está en producción cogeremos la última de las versiones (beta, CR o 1.0.X) de versiones: "https://svn.um.es/svn/PROTOTIPO/versiones/1.0.0.beta/" o "https://svn.um.es/svn/PROTOTIPO/versiones/1.0.0.CR/" * 2. Hacer un "Branch/tag..." de la carpeta "proyecto" o "1.0.0.beta", recién descargada. {{:mda:gc:crearrelease3.png|}} La dirección a la que se hará , será a partir de la raiz "https://svn.um.es/svn/PROTOTIPO/" en la **primera** subcarpeta: * **versiones**. Si es una subida a PREPRODUCCION o PRODUCCION * **ramas**. Si es un cambio para probar una funcionalidad temporalmente. En la **segunda** subcarpeta se pondrá la versión directamente, como se ha explicado anteriormente, quedando por ejemplo: {{:mda:gc:crearrelease4.png|}} En el comentario especificaremos la version subida y el codigo de JIRA al que esta asociada esta tarea (ver el punto 1). En caso de hacerlo con subversion en linea de comandos lo que se haría es ejecutar el comando: "svn copy urlREPOsvn/proyecto /versiones/1.1.0.beta" ==== 5. Realizar el despliegue de la aplicación==== Para hacer los despliegues de la aplicación seguir el proceso. [[mda:dsp:mda-pr-1.0-dsp-prepararentornodepruebas|Preparar entorno de ejecución ]], que a su vez abrirá una nueva tarea. ==== 6. Informar a los desarrolladores de la creación del TAG==== Habrá que informar a los desarrolladores de que la última versión de PREPRODUCCION o PRODUCCION ha cambiado, para que actulizen su entorno de trabajo a la rama en la que se ha publicado (en caso de que sea necesario por ser un desarrollador "involucrado"). Se mandará un email al grupo de trabajo. El desarrollador, simplemente en el Eclipse, o bien * se hará una descarga de un proyecto SVN con la nueva URL de PREPRODUCCION o PRODUCCION. Como se indica en la GT [[https://fundeweb.um.es/prototipo/gt/incorporacion.seam|Incorporarse a un proyecto existente en un repositorio SVN]] * en caso de que ** YA ** tenga una versión de PREPRODUCCION O PRODUCCION, hará un switch a la nueva rama. {{:mda:gc:crearrelease20.png|}} {{:mda:gc:crearrelease21.png|}} ===== MDA-TR-1.0-GC-Recuperar Release ===== En ocasiones será necesario volver atrás de la versión publicada, en PREPRODUCCION o PRODUCCION. Una situación en la que podemos recuperar una release es en el caso en que descubramos que la versión en producción tiene un fallo importante que no podemos resolver inmediatamente y deseemos volver a la versión anterior. O también puede ser interesante probar una funcionalidad con una release anterior a la que se esté trabajando en el entorno local del desarrollador, para comprobar por ejemplo si realmente funcionaba. ==== 1. Dar de alta en JIRA ==== **Cada participante** en esta tarea DEBE crear un **JIRA** con los siguientes datos, y **registrar las horas de trabajo** en ella: ^ Tipo ^ Sumario ^ Disciplina ^ Proceso ^ Label ^ Version Fijada ^^^ | //Tarea// | // Recuperar Release // | // Gestión de la configuración// | //GC-Liberar Build y Releases// | PRE / PRO |//[Versión del proyecto]// | En Label se especificará PRE si es para el entorno de PREPRODUCCION y PRO si es para el entorno de PRODUCCION. ==== 2. Hacer pruebas en local==== Para hacer las pruebas en el entorno local de un desarrollador, antes de pasarla o porque sea el objetivo final esa prueba, seguir la GT [[https://fundeweb.um.es/prototipo/gt/incorporacion.seam| Incorporarse a un proyecto existente en un repositorio SVN]]. Dentro de la rama principal tendremos las subcarpetas **ramas** y **versiones** con las distintas versiones de los proyectos, de la que escogeremos la release a recuperar. ==== 3. Subir al contenedor==== Una vez probado podremos subir a PREPRODUCCION / PRODUCCION la versión que deseemos, de la misma forma que hemos subido una versión a producción [[mda:dsp:mda-pr-1.0-dsp-prepararentornodepruebas#mda-tr-1.0-gc-instalar_aplicacion|Instalar Aplicación]] En caso de que se quiera hacer con linea de comandos se puede hacer por ejemplo con un //"svn export -r REV URL"// ===== MDA-TR-1.0-GC-Consultar Release ===== Distinguiremos dos casos: que se quiera consultar release para ver los cambios realizados (incidencias/historias resueltas) o para ver los ficheros que se han modificado / añadido sin mostrar información de por qué se realizaron. ==== Ver historico de cambios ==== Para ver el número de incidencias resueltas en una versión usaremos el JIRA. Ahora bien el JIRA, depende de que se haya utilizado correctamente MEDEA (todas las subidas a subversion tienen un JIRA asociado que se ha dado por resuelto. Si queremos ver la información "real" de los cambios subidos usaremos Tortoise SVN. Será para casos excepcionales en los que haya habido cambios no trazados correctamente en el JIRA * Uso de JIRA. Para ver los cambios en JIRA, seguir los siguientes pasos 1. Seleccionamos el proyecto: {{:mda:gc:crearrelease29.png|}} Seleccionamos la version. {{:mda:gc:crearrelease30.png|}} Seleccionamos notas de publicacion. {{:mda:gc:crearrelease31.png|}} Nos aparecerán todas las incidencias bugs y mejoras asociadas a esa versión. {{:mda:gc:crearrelease32.png|}} * Uso de Tortorise SVN. Para ver los cambios asociados a una versión, por ejemplo la 1.0.0. beta, usaremos la opción de "Show Log...". {{:mda:gc:crearrelease8.png|}} Ahi nos aparecerá el número de revisión en la que se hizo el tag 1.0.0.beta. Es la primera línea que aparece en azul. {{:mda:gc:crearrelease34.png|}} En el ejemplo la 3729. Usaremos ese número para hacer comparaciones con otra revision que nos interese (para ver los cambios realizados desde la revision origen a la revision destino) mediante la opción "Show Range..". Por ejemplo si queremos ver los cambios desde el inicio del proyecto (revisión 1) hasta la version 1.0.0.beta hariamos: {{:mda:gc:crearrelease18.png|}} {{:mda:gc:crearrelease19.png|}} OjO 8-O La opcion "Stop on copy/rename". Debe de estar ** DESMARCADA **. {{:mda:gc:crearrelease33.png|}} ==== Ver ficheros modificados ==== Si queremos los ficheros que están contenidos en una release, bastaría con descargarse la versión deseada y contabilizar los ficheros con cualquier herramienta del sistema operativo. Tambien se podria hacer con el Tortoise SVN.. haciendo boton derecho "Show log...", dando a "Next 100" hasta llegar a la revision inial, boton derecho de la primera linea de la version y hacer "Compare with previus revision" y seleccionar en el rango para que sea entre la primera y la ultima revision. Ahora bien si lo que se quiere es comparar dos versiones (ficheros modificados desde una versión a otra), lo haremos con el Tortoise SVN de la siguiente manera: Supongamos que queremos compara las versiones 1.0.0.beta con la 1.0.0.CR {{:mda:gc:crearrelease35.png|}} {{:mda:gc:crearrelease36.png|}} {{:mda:gc:crearrelease37.png|}} Aparecerán una lista de ficheros modificados: {{:mda:gc:crearrelease38.png|}} ===== MDA-TR-1.0-GC-Merge entre releases ===== En multiples ocasiones puede suceder que tengamos dos ramas con cambios en cada una de ellas y queramos unificarlas en una. Por ejemplo, una vez tengamos una rama en PREPRODUCCION, puede suceder que se hagan cambios en la rama que se va a volver a enseñar al cliente, por los fallos detectados, mientras otra parte del equipo de desarrollo sigue trabajando en la siguiente entrega de la aplicación. Una vez aprobados los cambios por el cliente, sean bug o nuevas funcionalidades, querremos incorporar estos cambios al tronco principal del proyecto para que sean recogidos en posteriores versiones. Para ello haremos un merge de las dos ramas, el tronco principal y la rama de producción. Lo vemos con un ejemplo: ==== 1. Dar de alta en JIRA ==== **Cada participante** en esta tarea DEBE crear un **JIRA** con los siguientes datos, y **registrar las horas de trabajo** en ella: ^ Tipo ^ Sumario ^ Disciplina ^ Proceso ^ Label ^ Version Fijada ^^^ | //Tarea// | // Merge entre releases // | // Gestión de la configuración// | //GC-Liberar Build y Releases// | MER |//[Versión del proyecto]// | ==== 2. Obtener rama "destino"==== Si no se tiene en el espacio de trabajo, hacer un "Svn...CheckOut" de la rama "destino", a la que se le van a "añadir",los cambios hechos en la otra rama. Por ejemplo de "https://svn.um.es/svn/PROTOTIPO/proyecto/" (caso puesto de ejemplo de pasar al trunk los cambios hechos en otras versiones). Si ya se tiene hacer un "Svn...Update", para obtener la última versión subida. ==== 3. Hacer un merge==== No situamos en la carpeta "destino", con el botón derecho realizamos la acción //"Merge..."//. {{:mda:gc:crearrelease10.png|}} {{:mda:gc:crearrelease11.png|}} De las dos opciones cogeremos la que nos interese según sean tronco /rama o dos ramas distintas las que se estén mezclando. En esta ventana indicaremos la rama "origen" de la que queremos coger los cambios: {{:mda:gc:crearrelease12.png|}} En caso de conflicto aparecerán la siguiente ventana {{:mda:gc:crearrelease14.png|}} en la que se podrá seleccionar marcar como hecha la mezcla, quedarse con la copia de trabajo o con la remota. Los conflictos se pueden resolver en este momento o en el siguiente paso de esta tarea. {{:mda:gc:crearrelease13.png|}} Una vez finalizado el merge, en nuestro espacio de trabajo se habrán descargado los cambios hechos en la otro rama. Esto no quiere decir que se hayan subdido la mezcla todavía, quiere decir que la mezcla esta actualmente en **NUESTRO** espacio de trabajo. Para que esté subida, habrá que hacer un commit de los cambios detectados. ==== 4. Hacer commit de los cambios recogidos==== Por último tendremos que hacer commit de los cambios que se han "mezclado", para que estén disponibles para el resto de desarrolladores. {{:mda:gc:crearrelease16.png|}} En caso de haberse detectado conflictos se pueden solucionar en esta fase. En caso de tenerlos, es importante comprobar que lo que se ha subido una vez resuelto a la rama comun funciona correctamente. ====== Artefactos ====== ===== De salida ===== ^ Plantilla del Artefacto ^ SIGLAS ^ Nomenclatura ^ Ubicación ^ |Versiones del proyecto| | |///Versiones/// | |Ramas del proyecto| | |///Ramas/// | ====== Herramientas ====== ^ Herramienta ^ Version ^ Utilizada en ^ Descarga/URL ^^^ |TortoiseSVN | 1.6.2 | Actualización de versiones| [[http://sourceforge.net/projects/tortoisesvn/files/ | Tortoise SVN ]]| |JIRA | | Control de incidencias| [[ https://jira.atica.um.es/jira/ | JIRA ]]| ====== Métricas ====== Las métricas del proyecto se guardarán dentro de la carpeta del proyecto en //Proyecto/Documentacion/1.Gestionproyecto/1.4.Metricas//. Las métricas de este proceso en concreto se almacenan en la Hoja //QS//. ===== Tiempo dedicado al proceso ===== - Entra en Jira en el navegador de incidencias. Realiza una query simple y selecciona todas las tareas del proyecto. * project = //ClaveDelProyecto// * Disciplina-Proceso = //Gestión de la configuración - GC-Gestión Releases// Pulsa el botón //Search// Usa la [[https://svn.um.es/svn/MNCS/NuevaMNCS/MEDEA/web_iuturna/Proyecto/Fuentes/Documentacion/1.GestionProyecto/PlantillaSeguimiento.ots|Plantilla de Seguimiento]] tal y como se indica en el apartado [[mda:Calcular_Tiempos|Calcular tiempos con Jira]]. ===== Número de versiones del proyecto===== Numero de subcarpetas en la carpeta //versiones// que hay. ===== Número de ramas del proyecto===== Numero de subcarpetas en la carpeta //ramas// que hay. ===== Tiempo dedicado a hacer Merge de Release===== - Entra en Jira en el navegador de incidencias. Realiza una query simple y selecciona todas las tareas del proyecto. * project = //ClaveDelProyecto// * Disciplina-Proceso = //CFG-Gestión Releases// * label = MER Pulsa el botón //Search// Usa la [[https://svn.um.es/svn/MNCS/NuevaMNCS/MEDEA/web_iuturna/Proyecto/Fuentes/Documentacion/1.GestionProyecto/PlantillaSeguimiento.ots|Plantilla de Seguimiento]] tal y como se indica en el apartado [[mda:Calcular_Tiempos|Calcular tiempos con Jira]]. ===== Tiempo dedicado a subir a Preproduccion===== - Entra en Jira en el navegador de incidencias. Realiza una query simple y selecciona todas las tareas del proyecto. * project = //ClaveDelProyecto// * Disciplina-Proceso = //CFG-Gestión Releases// * label = PRE Pulsa el botón //Search// Usa la [[https://svn.um.es/svn/MNCS/NuevaMNCS/MEDEA/web_iuturna/Proyecto/Fuentes/Documentacion/1.GestionProyecto/PlantillaSeguimiento.ots|Plantilla de Seguimiento]] tal y como se indica en el apartado [[mda:Calcular_Tiempos|Calcular tiempos con Jira]]. ===== Tiempo dedicado a subir a Produccion===== - Entra en Jira en el navegador de incidencias. Realiza una query simple y selecciona todas las tareas del proyecto. * project = //ClaveDelProyecto// * Disciplina-Proceso = //CFG-Gestión Releases// * label = PRO Pulsa el botón //Search// Usa la [[https://svn.um.es/svn/MNCS/NuevaMNCS/MEDEA/web_iuturna/Proyecto/Fuentes/Documentacion/1.GestionProyecto/PlantillaSeguimiento.ots|Plantilla de Seguimiento]] tal y como se indica en el apartado [[mda:Calcular_Tiempos|Calcular tiempos con Jira]].