Automatización de pruebas y canalización de entrega
- 5 minutos
Ha aprendido sobre la implementación continua y la entrega de software y servicios, pero los dos forman parte realmente de una tríada. Las prácticas de DevOps aspiran a conseguir la integración, implementación y entrega continuas.
Ahora, es el momento de realizar una copia de seguridad y analizar la primera de estas: integración. Forma parte del proceso de desarrollo que tiene lugar antes de la implementación. DevOps recomienda como práctica de desarrollo que los miembros del equipo integren con frecuencia código en un repositorio compartido que contenga una base de código única de tipo "principal" o "troncal". El objetivo consiste en que todas las personas contribuyan al código que se va a enviar, en lugar de trabajar en su copia y no juntarlo todo hasta el último minuto.
Después, las pruebas automatizadas pueden comprobar la integración de cada miembro del equipo. Estas pruebas ayudan a determinar que el código tenga un estado correcto después de cada cambio y adición. Las pruebas forman parte de lo que denominaremos canalización. Hablaremos sobre las canalizaciones más adelante, ya que esta unidad se centra en las canalizaciones de pruebas y entrega integradas.
Canalización de entrega continua
Para comprender el rol de las pruebas automatizadas en el modelo de implementación de entrega continua, debe examinar dónde encaja en la canalización de entrega. Una canalización de entrega continua es la implementación del conjunto de pasos que recorre el código cuando se realizan cambios durante el proceso de desarrollo, antes de su implementación en producción. Esta es una representación gráfica de los pasos de ejemplo en una canalización de entrega simplificada:
Veamos esta canalización paso a paso.
Una instancia de la canalización se inicia cuando se confirman los cambios de código o de infraestructura en un repositorio de código, quizás mediante una solicitud de incorporación de cambios.
A continuación, las pruebas unitarias se ejecutan—quizás en las pruebas—de integración o de un extremo a otro y lo ideal es que estos resultados de las pruebas se comuniquen de nuevo al usuario solicitante.
Quizás en este momento, el código del repositorio se examina en busca de secretos, vulnerabilidades y aspectos de la configuración.
Cuando todo se haya comprobado, el código se compilará y se preparará para la implementación.
Después, el código se implementará en un entorno de prueba. Un usuario podría recibir una notificación de la nueva implementación para echarle un vistazo a la solución de preproducción. El usuario puede aprobar o denegar la implementación para la producción, lo que dará comienzo a la parte final del proceso de implementación, que publica el código en producción.
En esta canalización, puede ver la delimitación entre la integración y la implementación. Las flechas rojas apuntan a algunos lugares lógicos en los que se puede detener la canalización a través de la lógica y la automatización incluidas, o incluso mediante la intervención humana.
Herramientas para la integración y la entrega continuas: Azure Pipelines
Para usar la integración y la entrega continuas, necesita las herramientas adecuadas. Azure Pipelines forma parte de Azure DevOps Services y se puede usar para automatizar la compilación y probar de forma coherente el código. También se puede emplear Azure Pipelines para implementar el código en servicios de Azure, máquinas virtuales y otros destinos, tanto en la nube como en el entorno local.
La entrada a una canalización (nuestro código o configuraciones) reside en un sistema de control de versiones como GitHub u otro proveedor de GIT.
Azure Pipelines se ejecuta en una parte del proceso, como una máquina virtual o un contenedor, y ofrece agentes de compilación que ejecutan Windows, Linux y macOS. Además, ofrece integración con pruebas, seguridad y complementos de calidad del código. Por último, es fácilmente extensible, por lo que puede llevar su propia automatización a Azure Pipelines.
Las canalizaciones se definen mediante la sintaxis YAML o a través de la interfaz de usuario clásica en Azure Portal. Cuando se usa un archivo YAML, este puede almacenarse junto con el código. Las canalizaciones también proporcionan plantillas que se pueden usar para crear canalizaciones fácilmente, por ejemplo, una canalización que crea una imagen de Docker o un proyecto de Node.js. También puede reutilizar un archivo YAML existente.
Tanto si usa un archivo YAML como la interfaz clásica, estos son los pasos básicos:
- Configure Azure Pipelines para usar el repositorio de GIT.
- Defina la compilación, ya sea editando el archivo azure-pipelines.yml o mediante el editor clásico.
- Inserte el código en el repositorio de control de versiones. Esta acción desencadena la canalización para compilar y probar el código.
Una vez que el código se ha actualizado, compilado y probado, puede implementarlo en el destino que quiera.
Hay algunas características, como la ejecución de trabajos de contenedor, que solo están disponibles cuando se usa YAML y otros elementos, como los grupos de tareas, que solo están disponibles mediante la interfaz clásica.
Construcción de una canalización de Azure Pipelines
Las canalizaciones se estructuran en:
Trabajos: un trabajo es una agrupación de tareas o pasos que se ejecutan en un único agente de compilación. Un trabajo es el componente de trabajo más pequeño que se puede programar para su ejecución. Todos los pasos de un trabajo se ejecutan secuencialmente. Estos pasos pueden ser cualquier tipo de acción, como la compilación de software, la preparación de datos de ejemplo para las pruebas, la ejecución de pruebas específicas, etc.
Fases: una fase es una agrupación lógica de trabajos relacionados.
Cada canalización tiene al menos una fase. Use varias fases para organizar la canalización en divisiones principales y marque los puntos de la canalización en los que se puede pausar y realizar comprobaciones.
Las canalizaciones pueden ser tan simples o tan complejas como se quiera. Encontrará tutoriales excelentes sobre la construcción de canalizaciones y el uso en la ruta de aprendizaje Creación de aplicaciones con Azure DevOps.
Rastreabilidad del entorno
Hay otro aspecto de las canalizaciones que merece la pena mencionar en relación con la confiabilidad. Puede construir las canalizaciones de tal manera que se pueda correlacionar lo que se ejecuta en producción con una instancia de compilación específica. Idealmente, deberíamos ser capaces de realizar un seguimiento de una compilación hasta una solicitud de incorporación de cambios o un cambio de código específicos. Esto puede resultar muy útil durante un incidente o más adelante durante la revisión posterior al incidente, cuando se intente identificar qué cambio ha provocado un problema. Algunos sistemas de CI/CD (como Azure Pipelines) facilitan esta tarea, mientras que otros requieren construir manualmente una canalización que propague algún tipo de "identificador de compilación" por todas las fases.