Integración continua (CI) y cómo puede ayudarte
Tags: beginners, javascript
Published: 2022-02-16 05:48:41

La integración continua (CI) es un proceso mediante el cual verificamos nuestro proyecto en cada cambio que ocurre en la base de código. ¿Qué es exactamente la integración? Depende de cómo configure el proceso: puede ser tan simple como instalar las dependencias y compilar el proyecto o tan complicado como ejecutar muchos scripts diferentes para determinar si el código base está en un estado aceptable.

## Compañera de trabajo diligente

Puede pensar en CI como un compañero de trabajo diligente que siempre está ahí, esperando para verificar sus cambios antes de fusionarlos con la rama principal. Es una buena idea incluir solicitudes de combinación en su flujo de trabajo cuando CI está en su lugar, incluso si trabaja solo en el proyecto. Sus cambios serán _revisados_ por la máquina, y dejarlos en una rama separada le permite solucionar cualquier problema antes de fusionarse con la rama principal.

Sin CI, todos y cada uno de los desarrolladores son responsables de verificar todos sus propios cambios. Por supuesto, de vez en cuando alguien lo olvidará —tal vez los cambios originales estaban bien, pero ¿qué pasa si después de una reorganización o fusión tiene un problema? Sin CI, permite que sus colegas menos cuidadosos empujen y se olviden de sus cambios, y otros se ven obligados a limpiar después de ellos.

## Cómo está estructurado CI

La integración continua comprueba tus confirmaciones. Por cada cambio de código, CI generalmente ejecuta algunas tareas diferentes en un orden definido. Puede utilizar la salida de un trabajo como entrada en otro; por ejemplo, puede crear una aplicación en un paso y luego usar el paquete resultante en otro para realizar pruebas. Por lo general, administra CI con un archivo de configuración que se encuentra dentro del repositorio; por lo tanto —su CI puede evolucionar junto con su base de código.

Si todas las tareas pasan, entonces la confirmación es _pasando_; si alguno de ellos falla, entonces la confirmación está _fallando_. En una situación ideal, el contenido de confirmación por sí solo determina el resultado de CI: no depende de servicios externos y no hay ningún elemento aleatorio que pueda hacer que falle.

Para cada rama, CI muestra el resultado de la confirmación superior. La rama principal debe estar casi siempre de paso; cualquier problema afectará a todos en el equipo, por lo que solucionarlo debería ser una prioridad si ocurre alguna regresión. Para una rama de características, debe fusionarla solo si está pasando el CI.



![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c6xd67ssxvsxzpfcr051.jpg)

## Tareas que puede delegar a su CI

Puede configurar cualquier script que ejecute en su entorno local en CI. La lista puede ser larga en proyectos grandes, pero echemos un vistazo a las tareas de CI que puede esperar en proyectos de cualquier tamaño.

### Construcción 

La verificación más básica que puede realizar en su base de código: ¿compila? Es un paso que detectará cualquier dependencia que se instaló, pero no se guardó, cualquier discrepancia de tipo de script mecanografiado que se coló en la confirmación. Estas son soluciones fáciles mientras el desarrollador está en la tarea, pero esos errores pueden volverse confusos o molestos si se comparten con otros.

### Análisis estático

El análisis estático implica verificar su código sin ejecutarlo. En los proyectos frontend, a menudo puede ver herramientas como:
* ESLint
* HTMLHint
* Stylelint

Esos programas son los más útiles cuando se integran con el editor de código. Ejecutarlos en CI es una verificación adicional que puede ayudarlo de dos maneras:
* identificará a cualquier desarrollador que se olvide de ejecutarlos localmente —por lo que se les puede pedir que lo hagan antes de que arruinen una gran cantidad de código
* identificará cualquier desajuste de versión o configuración que pueda ocurrir entre los diferentes entornos de desarrollo



![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zbi1i8esxde0csmctf2p.jpg)

### Ejecutando pruebas

Tener un CI implementado y ejecutar pruebas en él es esencial si se toma en serio las pruebas automatizadas en su aplicación. El objetivo de las pruebas automatizadas es ejecutarlas con mucha frecuencia —¿Qué mejor momento para hacerlo que cuando algunos cambios en el código están a punto de hacerse públicos? No hacerlo es una invitación a un escenario en el que:

* un desarrollador introduce la regresión en el código
* otros agregan cambios no relacionados encima
* alguien finalmente ejecuta las pruebas que capturan la regresión original
* pierden el tiempo resolviendo problemas que no causaron relacionados con cambios de los que potencialmente no están al tanto

En este escenario, el problema principal es que a medida que soluciona el problema, ni siquiera sabe cuándo se presentó el problema; podría estar en un compromiso anterior, o hace una semana. Podrías `git blame` o `git bisect` para salir de eso, pero es mucho más fácil saber simplemente el punto en el que las pruebas dejaron de funcionar.

Permítanme enfatizar otra cosa: escribir pruebas es una inversión en garantía de calidad. Es un esfuerzo del día a día. Si está realizando este esfuerzo diario, tiene sentido dedicar tiempo, solo una vez, a configurar CI para aprovechar al máximo las pruebas que desarrolla.

### Desplegando

A menudo verá CI junto con implementación continua (CD), abreviados juntos como CI/CD. Esto se debe a que mientras compila y verifica su código, tiene todo listo para implementar —al menos en el servidor de prueba. Un verdadero CD requeriría que lo entregues a producción, pero esto puede ser más desafiante, especialmente porque expone a los usuarios del proyecto a posibles regresiones.

## Desventajas

¿Cuáles son las desventajas de CI?

### Configuración complicada

La configuración puede llevar mucho tiempo, especialmente si nunca lo ha hecho antes. Incluso los cambios más sencillos en la configuración pueden tardar un tiempo considerable en verificarse, ya que debe ejecutarlos en un servidor externo al que no tiene acceso directo.

### Dependencia de un proveedor externo

Si integra Ci en su flujo de trabajo, dependerá de su proveedor de CI. Si están caídos, no puede fusionarse —al menos no con toda la red de seguridad a la que está acostumbrado. Puede ser frustrante, especialmente si sucede con cierta frecuencia.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oalzi99ukemu27ft54v0.jpg)

### Costo

Muchos proveedores de IC tienen un plan gratuito que debería ser más que suficiente para ejercicios simples o proyectos de demostración. Para un proyecto en el que las personas trabajan a tiempo completo, es casi seguro que necesitará un plan pago más tiempo adicional para que las máquinas de CI ejecuten sus scripts. El costo probablemente valdrá la pena, incluso si asume que el CI ahorra solo unos minutos por día para cada desarrollador de su equipo.

## ¿Y usted?

¿Está interesado en obtener más información sobre cómo configurar CI? ¡Cuéntamelo en la encuesta! Estoy pensando en escribir algunas publicaciones más detalladas sobre la configuración de las herramientas de CI. Al saber qué herramienta le interesa más, puedo crear contenido que coincida con sus expectativas.
¡Así que, por favor, vota en la [encuesta] (https://strawpoll.com/co8pv72pr) a continuación! Tu opinión es muy importante para mí. ¡Gracias!


## ¿Qué sigue?
Para obtener aún más valor de su CI, ejecute pruebas de extremo a extremo (E2E) en él. Configurar E2E en CI es un desafío y lo trataré en otro artículo. Mientras tanto, puede ver cómo [comenzar con E2E] (https://conoce.dev/como-agregar-pruebas-de-extremo-a-extremo-a-un-proyecto).