Cómo usar Netlify como tu integración continua
Tags: javascript, spanish, ci, netlify
Published: 2022-02-23 05:59:12

Netlify es un proveedor de alojamiento que puedes  utilizar para sitios web estáticos o aplicaciones web. El plan gratuito viene con 300 minutos de tiempo de compilación, lo que debería ser suficiente para configurar la implementación continua (CD) para un proyecto que no recibe muchas confirmaciones. Te mostraré cómo usar esos recursos para agregar una integración continua (CI) simple a su compilación.

## La aplicación de ejemplo

Para que sea sencillo , usaré una aplicación generada con Create React App (CRA) como aplicación de ejemplo. De esta forma, obtenemos una aplicación no trivial que:
* es similar a casos simples del mundo real,
* tiene algunas dependencias npm, y
* la mayor parte de lo que necesitamos ya está configurado.

La aplicación resultante se ve así:


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/163xis10fz1aj8ijfgpc.png)

## Pasos de verificación

Anteriormente escribí sobre qué [pasos](https://conoce.dev/integracion-continua-ci-y-como-puede-ayudarte) puede ejecutar con su CI. Veamos cómo puede configurarlo para nuestra aplicación de ejemplo.

### Construcción

Para construir, el código generado por CRA hace todo lo que necesitamos:

```SH
$ npm run build

> netlify-ci@0.1.0 build
> react-scripts build

Creating an optimized production build...
Compiled successfully.

File sizes after gzip:

  43.71 kB  build/static/js/main.1fb16459.js
  1.78 kB   build/static/js/787.c84d5573.chunk.js
  541 B 	build/static/css/main.073c9b0a.css
…
```

Netlify selecciona automáticamente la secuencia de comandos `construir` de nuestro repositorio generado por CRA como un comando de compilación, y funciona perfectamente:



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

### Pruebas

El código generado por CRA viene con una configuración completa para pruebas unitarias y una prueba de ejemplo. El script `npm test` está hecho para desarrollo; se ejecuta en modo interactivo y observa los archivos de forma predeterminada. Para ejecutar en CI, necesitamos una sola ejecución:

```SH
$ npm test -- --watchAll=false

> netlify-ci@0.1.0 test
> react-scripts test "--watchAll=false"

 PASS  src/App.test.js
  ✓ renders learn react link (16 ms)

Test Suites: 1 passed, 1 total
Tests:   	1 passed, 1 total
Snapshots:   0 total
Time:    	0.644 s, estimated 1 s
Ran all test suites.
```

Para tenerlo disponible, definamos un nuevo script en `package.json`:

```JSON
{
  …
  "scripts": {
	…
	"test": "react-scripts test",
	"test:ci": "react-scripts test --watchAll=false",
	…
  },
```

### Análisis estático

Una cosa que nos gustaría agregar al código es el análisis estático. La configuración básica debería ser bastante sencilla, pero la dejaré fuera del alcance de este artículo. Si quieres hacer un seguimiento de esto, te recomiendo que lo pruebes con:
* ESLint – ya que advierte  sobre posibles problemas en el código, o
* Prettier  – para hacer cumplir automáticamente el estilo del código.

## Nueva secuencia de comandos CI

Con el código que tenemos ahora, necesitamos los siguientes pasos para una ejecución exitosa de CI/CD:
* `npm install` – obtiene las dependencias del paquete, hecho por defecto por Netlify
* `npm run test:ci` – nuestro comando de prueba modificado
* `npm run build` – el comando de compilación original
* **implementación** – realizada por Netlify

Ahora, queremos que la compilación sea condicional en función de las pruebas: si fallan, la ejecución debería detenerse, y por eso use ‘&&’. Al mismo tiempo, la configuración de Netlify solo tiene una entrada para ejecutar el comando. Podemos abordar esas dos cosas creando un nuevo script dedicado a este caso de uso:

```JSON
{
  …
  "scripts": {
	…
	"test:ci": "react-scripts test --watchAll=false",
	"ci": "npm run test:ci && npm run build",
	…
  },
  …
}
```

### Ejemplo de ejecución

Al final, los scripts se comportan como se esperaba:
* si fallan las pruebas de compilación, obtendrá una ejecución fallida en su tablero de Netlify
* si todo funciona como se esperaba, la aplicación se implementa


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

### El uso de recursos

En las pocas ejecuciones que hice, apenas hubo impacto de las pruebas en el tiempo de compilación—el recurso que Netlify verifica para controlar el uso del sistema. Por supuesto, esto cambiará cuando su proyecto crezca y añadirá más pruebas a su proyecto. En algún momento, tendrá más sentido invertir en configurar una solución de CI dedicada y usar Netlify solo como alojamiento.

## Enlaces

* [aplicación implementada](https://netlify-ci.netlify.app/)
* [repositorio de ejemplo](https://github.com/how-to-js/netlify-ci)

## ¿Qué harías después?

Ejecutar CI en Netlify es solo una solución temporal. Estoy interesado en saber de ti —¿qué herramienta te gustaría usar a continuación? Házmelo saber en esta [encuesta](https://strawpoll.com/co8pv72pr).