Objetivo 6: Integración continua

Descripción

El principal objetivo de este hito del proyecto es añadir integración continua al mismo. Los tres subobjetivos son aprender cómo describir la versión del lenguaje de programación que se usa en el proyecto y la infraestructura que necesita para funcionar, así como la elección de un sistema y sitio para integración continua y configuración del mismo.

Prerrequisitos

Haber superado los tests en el objetivo anterior, contenedores.

Explicación

En sistemas de desarrollo ágil quien desarrolle tiene que asegurar que el código pasa todos los tests antes de ser desplegado o simplemente incorporado a la rama principal, porque los tests son la especificación de los requisitos expresados en la historia de usuario. Para ello se escriben una serie de tests que se ejecutan automáticamente al añadir o modificar código o cuando se solicite un pull request. Estos tests tienen el fin obvio de asegurar la calidad del mismo (via implementación de las pruebas para que se cumplan las historias de usuario), pero también en un entorno de desarrollo colaborativo permiten integrar código fácilmente asegurándose de que no se rompa nada. Si no está testeado, está roto, es el lema del desarrollador. Al ser la plasmación de las especificaciones, en cada incorporación de código la ejecución automática de los tests asegura que el código sigue cumpliendo las especificaciones. En este hito lo que haremos será configurar nuestro repositorio para que se pasen los tests, posiblemente en diferentes ambientes, automáticamente.

Preparar un proyecto para integración continua implica varias cosas:

Esta fase de integración continua es esencial para el posterior despliegue en la nube sobre el que se probarán técnicas de despliegue continuo (será el último objetivo de la asignatura).

Aviso: este es un caso en el que tanto el mismo GitHub como CoPilot pueden generar automáticamente el fichero de workflow completo, y sistemáticamente lo hacen mal. Aunque la asignatura está diseñada para que si se envía algo que no cumpla todas las condiciones se explique al estudiante qué problemas hay a través del PR, se ahorrará bastante trabajo tanto al estudiante como a los otros estudiantes que revisen el PR como al profesor si se hace a mano siguiendo el manual o algún tutorial, entendiéndose así mejor las diferentes partes del workflow y por supuesto la retroalimentación en el PR y cómo construir otros más complejos.

Lista de comprobación

Como en los casos anteriores, hay que copiar, pegar y llevar a cabo en tu propio PR.

* [ ] ¿Se han establecido criterios *a priori* para elegir el sistema de
integración continua más conveniente y se han calificado los sistemas que
cumplan esos requisitos según esos criterios?
* [ ] ¿Se han examinado varios sistemas de integración continua?
* [ ] ¿Se han configurado varios sistemas de integración continua?
* [ ] ¿Se ha configurado correctamente el *Checks API* en los sistemas en los que
   sea necesario para que aparezca correctamente en GitHub (y se pueda comprobar
   desde los tests)?
* [ ] ¿Uno de los sistemas configurados permite comprobar cuales son las versiones
   dellenguaje con las que funciona correctamente nuestra aplicación?
* [ ] ¿Se escogen de forma adecuada las versiones del lenguaje que se testean,
   tanto en el sistema de CI como en el contenedor Docker?
* [ ] ¿Se han justificado correctamente las versiones del lenguaje que se están
testeando y se ha comprobado que no se comprueban varias veces lo mismo (la
misma versión en CI y en el contenedor Docker en otro sistema CI?

Entrega de la práctica

Se tendrá que haber actualizado el repositorio que se usara en los hitos anteriores y añadir al fichero de este objetivo el nombre del proyecto, el autor y un enlace al mismo y hacer un pull request. El PR tendrá que estar en un milestone/PMV, y por supuesto este tendrá que incluir como parte lo que se haya creado en este objetivo.

Habrá que añadir una nueva clave CI a iv.yml indicando el path del fichero donde se ha configurado alguno de los sistemas de integración continua.

Objetivos a alcanzar

  1. Integración continua funcionando y correcta justificación de la misma.
  2. Uso correcto del gestor de tareas en todos los casos anteriores.
  3. Aprovechamiento del contenedor de Docker generado en el hito anterior en alguno de los sistemas de CI, especialmente si hay un cambio o adaptación del mismo.

Valoración

El alcanzar este objetivo avanzará, en principio, 5% de la puntuación de este apartado.