Automatizando workflows JAMStack con Pipedream y CircleCI

Blog Single

Hace unas semanas escribí sobre ngrok y las ventajas que nos proporcionaba a la hora de depurar webhooks. Esta semana he descubierto una herramienta increíble que nació como una tool para depurar webhooks proporcionando una url pública donde podíamos inspeccionar de una forma amigable todos los detalles de una request http que nos llama con el evento que ha ocurrido. Esta herramienta nació con el nombre de requestbin, pero ha evolucionado hasta convertirse en una herramienta de automatización de workflows llamada Pipedream.

Esta herramienta me ha ayudado a construir el workflow de generación de un site estático con filosofía JAMStack escuchando los eventos del CMS para disparar el build en nuestra herramienta de integración continua CircleCI.

Pipedream está centrada sobre todo en desarrolladores  permitiendo construir acciones y ejecutar workflows que ayudan a integrar aplicaciones, APIs y datos, de una manera totalmente sencilla y gratuita. La herramienta recuerda en cierto modo a las capacidades que puede proporcionar herramientas como Zapier y la filosofía No-Code.

Pipedreams cuenta con un catálogo de acciones predefinidas que podemos utilizar en nuestros workflows, sin embargo, el punto fuerte es que nos permite escribir nuestras propias acciones en NodeJS, sin tener que manejar nada de infraestructura, simplemente ejecutando nuestro código en modo serverless.

¿Qué tipo de cosas se pueden hacer con Pipedream?

Como he mencionado, Pipedream tiene un montón de acciones predefinidas y realizadas por la comunidad. Estos conectores van creciendo en número debido a las aportaciones de los usuarios, pero para que puedas ver algunos ejemplos de cosas que se pueden hacer aquí os dejo un listado:

Igualmente, te invito a echar un ojo al marketplace y la lista de apps que tienen actualmente integración: https://docs.pipedream.com/apps/all-apps/#apps 

¿Y todo esto gratis?

Pipedream ofrece una filosofía, por la cual cualquiera de nosotros debería poder ejecutar workflows simples y de bajo volumen sin ningún coste, a cambio de que estos sean compartidos con la comunidad para que todos nos beneficiemos del trabajo de los demás. De esta manera están construyendo una comunidad abierta donde aprender unos de otros. Los workflows que desarrollas son totalmente públicos y disponibles para toda la comunidad, lo único que mantienes privado son los datos que pasan por tu workflow.

Sin embargo, a cambio de ofrecer esta funcionalidad totalmente gratis, la herramienta tiene algunas limitaciones técnicas para cumplir con este compromiso:

  • Las peticiones http no pueden enviar contenido que superen 512KB
  • Tiene un límite de  10 peticiones por segundo para desencadenar los workflows
  • El tiempo de ejecución máximo es de 30 segundos, a excepción de los crons que aumenta hasta el minuto.
  • El total de minutos de ejecución diaria no puede superar los 30 minutos
  • El histórico de debug de workflows ejecutados solo permite ver hasta 100.
  • Las funciones no deben superar los 192MB de consumo de memoria
  • Puedes escribir en disco, pero no debe superar los 512MB y en el directorio /tmp

Conectando con CircleCI

¿Y para qué he utilizado yo Pipedream? El escenario que me encontraba era el de generación del build de un site estático con filosofía JAMStack desarrollado con NextJS. Cada vez que se realiza un cambio en el  CMS Headless donde se aloja el contenido, concretamente Prismic.io, necesitábamos reconstruir el conjunto de landings estáticas del site. El proceso de integración continua y despliegue se encuentra implementado en CircleCI y la necesidad era desarrollar un workflow que disparara el job específico que se encarga de esta tarea, además aprovechar y enviarnos un email para estar notificado de los nuevos build que se van desplegando

Para ello comencé creando un nuevo workflow con 3 steps:

  • La configuración del trigger de tipo HTTP
  • La acción custom que desencadena el build de CircleCI, eligiendo el repositorio y el nombre del job
  • Enviar un email con la url del build de CircleCI que se está ejecutando

Para realizar la acción custom implemente una pequeña función que utilizará el paquete npm circleci-api que wrappear la API de Circle, permitiendo disparar un job. Para los detalles de los parámetros que debemos de mandar a la api, he revisado este apartado de la documentación donde detalla cómo desencadenar la llamada. La mayor desventaja que me he encontrado ha sido que no se puede ejecutar indicando un contexto, sin embargo nada que no se pueda solucionar con unas variables de entorno extra específicas para este job.

A continuación podéis ver el propio workflow en pipedream y os dejo un gist con la acción desarrollada:

Comparte el artículo si te ha resultado interesante: