Carlos Cifuentes
Microfrontends · CI/CD

CI/CD para microfrontends: pipelines independientes, descubrimiento y rollbacks

El despliegue independiente es la razón para adoptar microfrontends. Si un equipo no puede llevar su propio cambio a producción sin construir ni publicar nada más, la arquitectura no está entregando lo que cuesta.

Por Carlos Cifuentes · Arquitecto frontend · Actualizado 2026-10-02

El objetivo

Un equipo hace merge de un cambio en su remoto. Ese cambio llega a producción sin construir, probar ni desplegar el host ni ningún otro remoto.

Un pipeline por remoto

  1. Construir solo este remoto. En un monorepo, herramientas como Nx detectan qué proyectos afecta un cambio, y el resto se omite.
  2. Probarlo de forma aislada: pruebas unitarias, pruebas de componentes, lint.
  3. Verificar el contrato. Las versiones de las dependencias compartidas están dentro de la política de plataforma, y los módulos expuestos siguen existiendo con los mismos nombres.
  4. Publicar artefactos inmutables. Sube el build a una ruta versionada en un hosting estático o un CDN, por ejemplo /billing/1.42.0/. Una versión publicada nunca se sobrescribe.
  5. Desplegar en un ambiente de preview o staging y correr un smoke test corto contra el producto compuesto.
  6. Promover. Cambia el puntero que le dice al host qué versión cargar.
  7. Verificar en producción con unas pocas pruebas automáticas, y revertir de forma automática si fallan.

Los pasos 4 y 6 están separados a propósito. Publicar deja una versión disponible. Promover la pone en vivo.

Descubrimiento: cómo encuentra el host a los remotos

EnfoqueCómo funcionaPros y contras
URLs fijas en el build del hostLas direcciones de los remotos son parte de la configuración del host en tiempo de buildSimple. Agregar o mover un remoto necesita una publicación del host
Una URL estable por remotoEl host siempre carga la misma dirección, y cada despliegue sobrescribe el archivo que hay detrásSimple. El caché tiene que ser exacto, revertir significa volver a desplegar y cuesta saber qué está en vivo
ManifiestoAl iniciar, el host descarga un archivo JSON pequeño que asocia nombres de remotos con URLs versionadasUna pieza móvil más. Las versiones son explícitas, el rollback es inmediato y cada ambiente tiene su propio manifiesto

Un manifiesto se ve así:

{
  "billing": "https://cdn.example.com/billing/1.42.0/remoteEntry.json",
  "catalog": "https://cdn.example.com/catalog/3.7.1/remoteEntry.json"
}

Con un manifiesto, promover una publicación significa cambiar una línea. Ese cambio debería pasar por un paso controlado y con registro de auditoría: un job del pipeline, o un servicio pequeño con control de acceso.

Reglas de caché

  • Archivos versionados y con hash: caché largo, marcados como inmutables.
  • El manifiesto y los archivos remote entry: caché corto con revalidación. Si se cachean por mucho tiempo, los usuarios se quedan con versiones viejas, o reciben un archivo de entrada que apunta a chunks que ya no existen.
  • Las versiones anteriores siguen disponibles. Los usuarios con una pestaña abierta siguen pidiendo chunks de la versión anterior. Mantén los artefactos pasados en línea durante días o semanas antes de limpiar.

Versionado

  • Cada remoto tiene su propia versión. Un hash de commit en la ruta o en los metadatos del artefacto conecta cada archivo en producción con su código fuente.
  • Las versiones que importan entre equipos son las de los contratos: las librerías compartidas, el design system y la API del host. Las reglas están en Dependencias compartidas y versiones.
  • Conserva el historial del manifiesto. Registra qué combinación de versiones estaba en vivo en cada momento, que es la primera pregunta en un incidente.

Rollbacks

Revertir significa apuntar el manifiesto a la versión anterior. Toma segundos y no necesita un build. Tres condiciones lo hacen posible:

  • Los artefactos son inmutables y las versiones anteriores se conservan.
  • El backend sigue aceptando peticiones de la versión anterior del frontend. Los cambios de API primero agregan, y las eliminaciones llegan después.
  • Una funcionalidad que abarca varios remotos queda detrás de un feature flag, de modo que lanzarla es algo separado de desplegarla.

Lo que ve el usuario cuando un remoto falla en producción se cubre en Aislamiento de errores y resiliencia.

Ambientes de preview

Un ambiente completo por rama es caro cuando el producto son diez aplicaciones. Hay un patrón más liviano que funciona bien:

  1. El pipeline del pull request publica el build del remoto bajo una ruta única.
  2. Quien revisa abre el host de staging con un override, por ejemplo un query param, que dice "carga billing desde esta ruta".
  3. Todo lo demás viene de staging como siempre.

Un override que carga un remoto desde una URL arbitraria es un mecanismo de inyección de scripts. Desactívalo en producción, o restríngelo a una lista de orígenes permitidos y a usuarios autorizados.

El mismo mecanismo permite que un desarrollador corra un remoto en su máquina contra un host desplegado. Mira Desarrollo local con microfrontends.

El pipeline del host

El host sigue las mismas etapas con controles más estrictos, porque su radio de impacto es todo el producto. Antes de promover, un smoke test carga cada remoto listado en el manifiesto y verifica que cada uno se muestre. Las publicaciones del host son menos frecuentes que las de los remotos, y eso es sano.

Checklist

  1. ¿Un equipo puede desplegar a producción sin que corra ningún otro pipeline?
  2. ¿Los artefactos publicados son inmutables y están versionados?
  3. ¿Puedes revertir un remoto en menos de un minuto, sin un build?
  4. ¿El override de preview está desactivado o restringido en producción?

Más en esta sección

¿Planeas una migración o una plataforma de microfrontends?

En una llamada de 20 minutos me cuentas tu situación y te digo cómo la abordaría. Si todavía no vale la pena, también te lo digo.

Escríbeme por LinkedIn