Distribució

Distribució SPA

Un cop tenim la versió de producció amb els arxius estàtics, és senzill fer la distribució.

Les aplicacions SPA poden ser distribuits utilitzant CDNs. En essència, tenim una aplicació que es connectarà al nostre backend i que pot estar a qualsevol servidor de continguts estàtics. Alternativament, podem distribuir-les al mateix servidor que el backend. Això ens estalvia la gestió dels headers CORS i poder gestionar de forma particular com se serveix l'app, però ens cal configurar el backend per a servir simultàniament l'app i el backend (API).

Una altra qüestió és què distribuim del frontend.

  • No hi hauria d'haver cap dada confidencial, ja què el navegador permet veure tot el codi font de la nostra aplicació JS.
  • Podem esborrar tots els comentaris del codi font amb una transformació
  • Hauríem d'evitar mostrar el logging.
  • Utilitzar variables al font per a donar valors que canvien en entorn de desenvolupament i de producció. Per exemple, a React, tenim els arxius .env i .env.production que permeten afegir variables. Per exemple, per a tenir una URL diferent de la nostra Rest API en cada entorn.

Distribució automàtica

El procés de distribució automàtica d'aplicacions s'implementa normalment a través d'un pipeline CI/CD que automatitza totes les etapes, des de la gestió del codi fins al desplegament en producció.

A continuació s'explica un possible flux de treball.

Commit de Codi i Control de Versions

El procés comença amb la integració del codi i el seu control de versions, assegurant la traçabilitat de cada modificació.

  • Actualització del Codi: Els desenvolupadors fan commit del codi en un sistema de control de versions (com Git).
  • Desencadenament del Pipeline: Cada commit (o merge) activa automàticament el pipeline mitjançant webhooks o mecanismes similars.

Integració Contínua (CI)

La fase d'integració contínua compila i prova automàticament el codi per garantir-ne la qualitat.

  • Compilació del Codi: El servidor CI (com Jenkins o GitLab CI) recupera el codi i el compila o construeix l'aplicació.
  • Proves Automatitzades: S'executen proves unitaris, d'integració i anàlisis de codi per garantir la qualitat.
  • Generació d'Artefacte: Si tot és correcte, es crea un artefacte (binari, imatge Docker, JAR, etc.).

Emmagatzematge i Versionat d'Artefactes

Els artefactes resultants es versionen i s'emmagatzemen en repositoris centralitzats per facilitar-ne la gestió.

  • Versionat: L'artefacte es versiona segons un esquema (com semàntic, basat en hash o número de build).
  • Repositori d'Artefactes: L'artefacte es desa en un repositori centralitzat (per exemple, Nexus, Artifactory o un registre de contenidors com Docker Hub).

Entrega Contínua (CD) a un Entorn de Staging

L'entrega contínua desplega l'artefacte en un entorn de staging on es realitzen proves més exhaustives.

  • Desplegament a Staging: El pipeline CD pren l'artefacte i el desplega en un entorn de staging.
  • Proves Ampliades: Es realitzen proves d'integració, de seguretat i de rendiment que simulen l'entorn de producció.
  • Passos d'Aprovació: En alguns casos, es pot requerir una aprovació manual abans de procedir al desplegament final.

Desplegament Automàtic a Producció

Un cop validat en staging, l'artefacte es distribueix automàticament en producció, amb mecanismes per revertir el desplegament si cal.

  • Automatització del Desplegament: Un cop completades les proves, el pipeline desplega automàticament l'artefacte a producció.
  • Infraestructura com a Codi: Eines com Terraform, Ansible o Kubernetes s'utilitzen per gestionar la infraestructura i assegurar la consistència.
  • Mecanismes de Rollback: Es configuren mecanismes per revertir el desplegament en cas d'errors.

Monitorització i Retroalimentació

Finalment, la monitorització constant i la retroalimentació permeten detectar incidències i optimitzar futurs desplegaments.

  • Monitorització en Temps Real: Després del desplegament, es supervisa el rendiment i es recullen logs amb eines com Prometheus, ELK o New Relic.
  • Alertes i Resolució d'Errors: Els errors o anomalies generen alertes, permetent una resposta ràpida per part de l'equip de desenvolupament.
  • Cicle de Millora Contínua: El feedback obtingut serveix per fer ajustaments i millores en el codi, reiniciant el cicle de desenvolupament.