Arquitectura CI/CD para Aplicación Smart TV y Web

Este documento detalla la arquitectura CI/CD diseñada para una aplicación OTT/Streaming de alto rendimiento dirigida a plataformas Smart TV y Web, utilizando GitHub Actions para garantizar fiabilidad, escalabilidad y rapidez.

Arquitectura CI/CD para Aplicación Smart TV y Web

Visión General

Este documento detalla el pipeline de Integración Continua y Despliegue Continuo (CI/CD) diseñado para una aplicación OTT/Streaming de alto rendimiento dirigida tanto a plataformas Smart TV como Web.
El sistema está construido sobre GitHub Actions, aprovechando una arquitectura de flujos de trabajo modulares y reutilizables para garantizar fiabilidad, escalabilidad y velocidad a través de múltiples entornos (Desarrollo, Staging y Producción).

Características Clave

  • Soporte Multiplataforma: Pipeline unificado manejando tanto builds Web como Smart TV con optimizaciones específicas por plataforma.
  • Despliegue Basado en Tags: Selección automática de entorno basada en tags de versionado semántico.
  • Flujos Reutilizables: Diseño modular reduciendo la duplicación de código y simplificando el mantenimiento.
  • Despliegue Seguro: Despliegue basado en SSH con gestión estricta de claves.
  • Containerización: Entrega basada en Docker garantizando consistencia entre entornos.
  • Optimización de Rendimiento: Flujos simplificados con ejecución en paralelo y eliminación de trabajos redundantes, reduciendo los tiempos de build en ~40%.
La arquitectura modular permite mantener consistencia y eficiencia en despliegues multiplataforma complejos.

Estrategia de Flujo de Trabajo

El pipeline se activa mediante patrones específicos de tags, que determinan el entorno objetivo y la plataforma.

Configuración de Triggers

El sistema distingue entre entornos usando patrones regex en los tags de git:

on:
        push:
          tags:
          - 'v[0-9].[0-9]+.[0-9]+-dev-st.**' # Smart TV Development Builds
          - 'v[0-9].[0-9]+.[0-9]+-dev-w.**' # Web Development Builds

Etapas del Pipeline

1. Detección Dinámica de Entorno y Plataforma

Un trabajo dedicado analiza el tag entrante para establecer el contexto de build dinámicamente:

get-type:

runs-on: ubuntu-latest
needs: [print_branch_name]
outputs:
TYPE: ${{ steps.get_type.outputs.type }}
steps: - name: Get Type
id: get_type
run: |
if ${{ contains(github.ref, '-dev-w.') }}; then
echo "type=web" >> $GITHUB_OUTPUT
else
echo "type=smartTv" >> $GITHUB_OUTPUT
fi

2. Build y Containerización

Utilizamos un flujo de trabajo reutilizable que maneja la complejidad de construir la aplicación Flutter y crear la imagen Docker. Este flujo usa un ejecutor de scripts personalizado (rps) para abstraer los comandos de build específicos por plataforma.

jobs:

build-and-push:
name: Build And Push
runs-on: ubuntu-latest
steps: # ... (Pasos de configuración omitidos por brevedad)

      - name: Build Application
        run: rps build:${{ inputs.entry }}

      - name: Build Container
        run: rps docker:${{ inputs.build_type }}:build -t ${{ env.CONTAINER_NAME }}

      - name: Push Tag Container To Github
        run: |
          docker push ${{ env.CONTAINER_NAME_WITH_TAG }}

3. Despliegue Automatizado

El proceso de despliegue está orquestado para actualizar múltiples servidores simultáneamente. Se conecta de forma segura vía SSH, actualiza la configuración de Docker Compose y reinicia los servicios con objetivos de tiempo de inactividad cero.

"La automatización del despliegue redujo el tiempo de entrega de 2 horas a 15 minutos, mejorando significativamente la experiencia del equipo de desarrollo."

Infraestructura como Código (IaC) y Herramientas

  • Flutter: Framework para desarrollo multiplataforma.
  • RPS (Run Project Scripts): Ejecutor de tareas personalizado basado en Dart para gestionar argumentos de build complejos y preparación de entorno.
  • Docker: Garantiza que la aplicación funcione idénticamente en CI y Producción.
  • GitHub Container Registry (GHCR): Almacena los artefactos de build.

Ejemplo de Configuración de Scripts RPS

scripts:

# Build optimizado para Smart TV (renderizado HTML)

run:script:remove:build: dart run scripts/remove_build_script.dill
run:script:prepare:custom_builds: dart run scripts/prepare_custom_builds_script.dill
run:script:prepare:web_server_files: dart run scripts/prepare_web_server_files_script.dill
run:script:optimize: npm --prefix ./build/web run optimize-files
build:smartTv: rps run:script:remove:build && rps run:script:prepare:custom_builds && flutter build web --web-renderer html --release && rps run:script:prepare:web_server_files && rps run:script:optimize

Conclusión

Esta arquitectura CI/CD demuestra cómo construir pipelines robustos y escalables para aplicaciones multiplataforma complejas. La combinación de GitHub Actions, Docker y herramientas personalizadas como RPS proporciona un sistema de despliegue confiable que reduce significativamente los tiempos de entrega mientras mantiene alta calidad y seguridad.


¿Necesitas implementar una arquitectura CI/CD robusta para tu proyecto multiplataforma?
¡Conversemos! Contáctame aquí para discutir tu proyecto específico.
O si prefieres, descubre mi portfolio completo aquí.