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 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. 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 un PaaS o IaaS sobre el que se probarán técnicas de despliegue continuo.

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.