Skip to content

Latest commit

 

History

History
184 lines (143 loc) · 14.6 KB

sesion-5.org

File metadata and controls

184 lines (143 loc) · 14.6 KB

Integración continua: Testeo

./imagenes/Logotipo_ME_FP_GV_FSE.png

Videotutoriales y presentación

  • Presentación
  • Sesión 5.1
  • Sesión 5.2 (En este vídeo se utiliza una versión de Travis antigua, tal como se indica en la descripción. El procedimiento para activar Travis está descrito correctamente en estos apuntes).
  • Sesión 5.3

Índice

  • Fundamentos de la Integración Continua
  • Desarrollo guiado por tests
  • Introducción a GitHub Actions
  • Introducción a Travis CI
  • Aplicaciones en las clases
    • Corrección automática de prácticas
    • Autoevaluación por parte del alumnado
  • Configuración de los repositorios
  • Visualización de los resultados

Referencias

Contenidos

Definiciones

Integración continua (Continuous Integration)

  • Metodología para hacer integraciones automáticas de manera frecuente
  • Tras cada integración se ejecutan una serie de pruebas unitarias
  • Permite generar actualizaciones de manera más rápida
  • Permite detectar fallos lo antes posible
  • Las pruebas se ejecutan de manera automática tras cada envío de código a la rama principal de desarrollo

Desarrollo Guiado por Pruebas

  • Metodología de desarrollo que consiste en escribir los tests (pruebas unitarias) antes que el código
  • Una vez creada la prueba, se implementa el código necesario para superarla
  • Por último, se refactoriza el código escrito para eliminar duplicidades y hacerlo más limpio y eficiente
  • Suele utilizarse con Integración Continua

Entrega continua (Continuous Delivery / Deployment)

  • Metodología para realizar despliegues o lanzamientos de aplicaciones de manera frecuente
  • Va un paso más allá de la integración continua
  • Si el proceso de testeo de la integración continua es satisfactorio se procede a realizar el despliegue o lanzamiento de software
  • Si el proceso de despliegue es manual, se habla de Continuous Delivery
  • Si el proceso de despliegue es automático, se habla de Continuous Deployment

Aplicaciones en las clases

  • Introducción a metodologías de desarrollo guiado por tests tal como se hace en la industria
  • Introducción a metodologías de integración continua tal como se hace en la industria
  • Corrección automática de prácticas
  • Autoevaluación por parte del alumnado
  • Garantía de que el código a integrar es válido
  • Envío de notificaciones al resto de miembros de un equipo

Proveedores de Integración Continua

Podemos optar por varios servicios para realizar Integración Continua en GitHub. Nos centraremos en dos opciones: GitHub Actions, integrado en GitHub, y Travis CI, un servicio externo que es también muy popular.

GitHub Actions es la opción más sencilla, ya que está integrado en GitHub y no es necesario darse de alta en ninguna otra plataforma. Este servicio se incorporó a GitHub después que Travis, aunque es muy popular a día de hoy.

Este servicio dispone de unos límites de uso y realiza tarificación por minutos de cómputo en función del tipo de cuenta. Al tener cuenta educativa se dispone de más minutos gratuitos.

Travis CI es un servicio más antiguo, aunque sigue siendo muy popular. Puede utilizarse dándose de alta mediante la cuenta de GitHub. Y también incluye descuentos para uso educativo.

Flujo de trabajo general

  1. En caso de utilizar Travis CI, activación de Travis como aplicación autorizada en la cuenta de GitHub. Solo es neceario hacerlo la primera vez.
  2. Creación del fichero de configuración:
    1. En caso de Travis CI, el archivo se denomina .travis.yml y debe almacenarse en la raíz del repositorio.
    2. En caso de GitHub Actions, los archivos es guardan en la carpeta .github/workflows/.
  3. Creación o modificación de tests según el lenguaje de programación utilizado.
  4. Publicación de cambios. Todos los cambios que lleguen a la rama seleccionada en el fichero de configuración vía push o vía pull request (dependiendo de la configuración elegida) activan la ejecución de un trabajo de integración continua.
  5. Ejecución de tests. El servicio de integración continua detecta los nuevos cambios (cada vez que se haga un push o una pull request) en el repositorio y lanza el trabajo. Este trabajo comprende las siguientes etapas:
    1. En los servidores del proveedor elegido se crea una máquina virtual con un sistema operativo Ubuntu (o Mac OS X si se está desarrollando para ese sistema operativo).
    2. Se clona el repositorio en dicha máquina.
    3. Se instalan las dependencias del proyecto: lenguajes de programación, librerías, etc. Para ello se suele utilizar el gestor de paquetes de la tecnología elegida: composer, npm, nuGet, maven,…
    4. Se ejecutan los tests que se hayan indicado en el proyecto.
    5. Si se pasan los tests, se ejecutan una serie de acciones adicionales (como pueden ser envío de notificaciones, despliegue en servidores, creación de archivos ejecutables,…).
  6. Notificación de resultados. Se notifica el resultado de la ejecución de los tests en el repositorio de GitHub (normalmente aparece un mensaje indicando que las pruebas se han pasado). Esto es especialmente útil al trabajar con Pull Requests, ya que podemos esperar a que se nos informe sobre el resultado de los tests antes de fusionar los cambios en la rama principal del repositorio.

Integración continua con GitHub Actions

GitHub incluye un servicio denominado GiHub Actions que permite crear una serie de flujos de trabajo para realizar tareas automatizadas conectadas con los repositorios de GitHub. Entre los usos de este servicio podemos destacar:

  • Integración continua (ejecución de tests)
  • Despliegue en servicios web
  • Envío de mensajes automatizados al subir código o superar tests (Slack, etc.)
  • Acceso a un marketplace de acciones creadas por la comunidad

En lo relativo a integración continua, podemos utilizar el servicio de GitHub Actions como alternativa a Travis-CI. En este enlace podemos consultar más información acerca de cómo realizar integración continua con GitHub Actions. Su funcionamiento es muy parecido: hay que crear un fichero de configuración en el repositorio y a continuación crear una acción para conectarlo al servicio de integración continua.

Este servicio, al estar integrado directamente en GitHub, nos permite crear los ficheros necesarios para realizar tests a partir del menú Actions del repositorio de GitHub.

imagenes/github_actions_1.png

Una vez dentro podemos hacer click en New workflow para crear una acción nueva:

imagenes/github_actions_2.png

A continuación tendremos la posibilidad de elegir una plantilla para crear el fichero de configuración del workflow. Podemos crearla a mano o elegir una existente:

imagenes/github_actions_3.png

Por último, tendremos acceso al fichero de configuración generado, que podremos aceptar o editar a nuestro gusto.

imagenes/github_actions_4.png

El resultado de la ejecución del test podemos verlo en el icono del color correspondiente al lado del nombre del último commit:

imagenes/github_actions_5.png

Si el icono sale en color verde, el test se ha pasado; en amarillo, está en proceso; y en rojo, ha fallado.

Al pulsar sobre el icono podemos ver el resultado del test:

./imagenes/github_actions_6.png

./imagenes/github_actions_7.png

Repositorios de ejemplo

A continuación se muestran enlaces a dos repositorios configurados para trabajar con GitHub Actions:

Integración continua con GitHub y Travis CI

Creación de cuenta de Travis CI e integración con GitHub

imagenes/signup-travis.png

  • Una vez redirigidos a la página de GitHub, autorizar el acceso
  • La aplicación Travis deberá aparecer instalada en la sección Installed GitHub Apps dentro de la sección Applications en el menú Settings del usuario.

imagenes/travis-configure.png

  • Si pulsamos en el botón Configure de la aplicación Travis podremos controlar qué repositorios serán visibles para Travis (por defecto, todos)

imagenes/addrepo-travis.png

Opcional: autorización de organizaciones

La aplicación Travis se instala para la cuenta del usuario de GitHub. Si se desea que Travis tenga acceso a los repositorios de una organización bajo nuestro control habrá que realizar los siguientes pasos adicionales:

  • Iniciar sesión en Travis-CI
  • Acceder al menú Settings

imagenes/addorganization-travis-3.png

  • Acceder a la opción Review and add your authorized organizations:

imagenes/addorganization-travis-4.png

  • Elegir la organización que se quiere activar:

imagenes/addorganization-travis-5.png

  • Por último, seleccionar los repositorios de la organización a los que se quiera dar acceso:

imagenes/addorganization-travis-6.png

El fichero de configuración de Travis CI

Visualización del resultado de la ejecución

imagenes/visualizar-travis.png

Repositorios de ejemplo

A continuación se muestran enlaces a un repositorio de ejemplo en PHP y un repositorio de ejemplo en NodeJS configurados para trabajar con Travis.

Tareas

Utilizando como base uno de los repositorios de ejemplo propuestos (en PHP con Travis, Node con Travis, Node con GitHub Actions o Python con GitHub Actions), crea un repositorio en la cuenta de la organización creada en la sesión 3 denominado sesion5-integracion-continua. Dicho repositorio debe contener una función que compruebe si un número dado es par y un test que realice pruebas con varios números para comprobar que la función está correctamente diseñada. Puedes utilizar cualquier lenguaje de programación soportado por Travis o GitHub Actions.

Si utilizas GitHub Actions deberás configurar el archivo en la carpeta .github/workflows/ para el flujo que hayas decidido utilizar. IMPORTANTE: si haces un fork de algún repositorio que tenga activada alguna acción (es decir, que tenga algún archivo en la carpeta .github/workflows), tu repositorio copia no las activará por defecto, sino que deberás ir a la pestaña “Actions” y activarlas manualmente. Esto es así porque las “Actions” consumen recursos (minutos de ejecución) que se descuentan de tu cuenta. Una vez activadas podrás comprobar que sucesivos commits activan dichas acciones.

Si utilizas Travis CI deberás activar Travis en tu cuenta y configurar adecuadamente el fichero .travis.yml para el lenguaje de programación utilizado. Cuando hayas terminado, incluye un icono de estado de Travis-CI en el archivo README de tu repositorio. Para ello hay que copiar un código que proporciona Travis. Tienes información sobre cómo incluirlo aquí. Recuerda seleccionar la opción Markdown al generar el enlace.

Opcional

Crea un repositorio con varios ejercicios de programación del módulo que estés impartiendo y añade tests unitarios para verificar su funcionamiento. Configura adecuadamente el repositorio para que funcione con GitHub Actions o con Travis CI.

Entrega de la tarea

Una vez terminada la tarea, crea una discusión en la organización creada en la sesión 3 y nómbrame mediante @pedroprieto. Incluye un enlace al repositorio en el cuerpo del mensaje.

No hay que subir ningún archivo en la tarea de la plataforma Moodle del Cefire.