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%.
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 BuildsEtapas 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
fi2. 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:optimizeConclusió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í.