Tabla de Contenidos
Integración Continua y Testing con Docker (Docker avanzado)
Contenido perteneciente al curso Docker avanzado.
Integración continua
La integración continua es una práctica de ingeniería de software que consiste en hacer integraciones automáticas de un proyecto lo más a menudo posible para así poder detectar fallos cuanto antes.
u Entendemos por integración la compilación y ejecución de pruebas de todo un proyecto.
El proceso de test se suele hacer cada cierto tiempo:
- De forma periódica
- En base a eventos (por ejemplo, commit)
El proceso consiste en:
- Se descarga el código fuente del control de versiones
- Se compila
- Se ejecutan las pruebas
- Se generan los informes
Para la automatización de este proceso existen multitud de herramientas. Algunas son independientes de la tecnología del desarrollo y otras están ligadas al desarrollo:
- Apache Continuum
- Hudson
- Jenkins
- CruiseControl
Estas herramientas habitualmente se apoyan en otras herramientas como Ant o Maven
Estos procesos se suelen asociar a metodologías de programación extrema o desarrollo ági
Ventajas
Se pueden detectar, y solucionar, los errores de integración en fases tempranas de desarrollo. Evitando el caos de los fallos a última hora
Disponibilidad constante de versiones para probar, enseñar a los interesados, hacer demostraciones, etc
Ejecución inmediata de las pruebas unitarias
Monitorización continua de las métricas de calidad del proyecto
TDD
Desarrollo guiado por pruebas de software, o Test-driven development (TDD) es una práctica de ingeniería de software que involucra otras dos prácticas: Escribir las pruebas primero (Test First Development) y Refactorización (Refactoring).
Jenkins
Jenkins es un servidor de automatización open source escrito en Java
Está basado en el proyecto Hudson
Ayuda en la automatización de parte del proceso de desarrollo de software mediante integración continua y facilita ciertos aspectos de la entrega continua
Tiene integración con la mayoría de los sistemas de controles de versiones
Puede ejecutar proyectos basados en Ant y Maven
También puede ejecutar comandos en terminales
Dispone de plugins para ampliar y mejorar su funcionalidad
En este caso el que nos interesa es el plugin de Docker. Este plugin nos permite integrarnos con un Docker Server para poder generar contenedores a demanda del pipeline
Ejemplo: https://medium.com/@karthi.net/docker-tutorial-build-docker-images-using-jenkins- d2880e65b74#:~:text=On%20the%20Jenkins%20Dashboard%2C%20select,Select%20Docker%20from%20the%20list.
Docker Hub - GitHub
Podemos integrar GitHub con Docker Hub para generar las imágenes de forma automática
Para ello, Docker Hub nos provee de la opción de los build automáticos: https://docs.docker.com/docker-hub/builds/
Caso de estudio
Aquí podemos ver un ejemplo real de las diferentes piezas que podrían hacer falta para lograr una infraestructura 100% flexible y escalable siguiendo los principios de la integración continua y Docker: https://es.slideshare.net/Synerzip/running-microservices-on-docker
Práctica
Vamos a hacer una instalación de un Jenkins y explorar un poco sus plugins y sus posibilidades
