Skip to content

🏁 Completando el Pipeline de CI/CD End-to-End

¡Felicidades! Has configurado con éxito la infraestructura de AWS CodePipeline con CloudFormation. Ahora vamos a darle vida activando el pipeline y observando todo el flujo de trabajo en acción.

🚀 El poder de GitOps y DevOps con AWS y Docker

Antes de realizar cambios, entendamos por qué los pipelines de CI/CD son tan valiosos:

GitOps: Infraestructura como Código

GitOps usa Git como la única fuente de verdad para el código de la infraestructura y la aplicación.

  • Todos los cambios se realizan mediante pull requests.
  • Git proporciona historial de auditoría y capacidades de reversión (rollback).
  • Los cambios son declarativos y están versionados.

DevOps: Rompiendo Silos

DevOps une a los equipos de desarrollo y operaciones para entregar software más rápido y confiable.

Mejor Juntos: AWS y Docker

Al combinar AWS y Docker, obtenemos lo mejor de ambos mundos:

  • La contenedorización de Docker simplifica el empaquetado y despliegue.
  • Los servicios gestionados de AWS proporcionan infraestructura escalable y confiable.
  • Docker Build Cloud permite construcciones multi-arquitectura eficientes.
  • Docker Scout asegura que la seguridad esté integrada en el pipeline.

Flujo de Trabajo GitOps

💻 Activando el Pipeline con un Enfoque de Desarrollo Modular

Demostraremos el poder del pipeline a través de tres iteraciones clave:

  1. Actualizaremos la Página de Inicio (Home Page).
  2. Probaremos nuestra Compuerta de Seguridad (Security Gate) con un Dockerfile vulnerable.
  3. Corregiremos la seguridad y mejoraremos la página de Listado de Habitaciones (Room Listings).

1️⃣ Iteración 1: Actualización del Equipo de Home Page

Imagina que eres parte del equipo de Home Page. Han decidido implementar una página moderna y visualmente atractiva:

bash
cd Rent-A-Room && \
echo 'import React from "react";
import { Link } from "react-router-dom";
import BannerImage from "../../images/choosinghouse.svg";
import "./home.css";

const Home = () => {
  return (
    <div className="home-container">
      <div className="hero-section">
        <div className="hero-content">
          <h1 className="hero-title">Encuentra Tu Estancia Perfecta</h1>
          <p className="hero-subtitle">
            Descubre espacios únicos que se sienten como en casa
          </p>
          <Link to="/rooms">
            <button className="cta-button">
              Explorar Habitaciones
              <span className="arrow">→</span>
            </button>
          </Link>
        </div>
        <div className="hero-image">
          <img src={BannerImage} alt="Ilustración de habitación" />
        </div>
      </div>
      <div className="features-section">
        <div className="feature-card">
          <div className="feature-icon">🏠</div>
          <h3>Casas Verificadas</h3>
          <p>Todas nuestras propiedades son cuidadosamente revisadas</p>
        </div>
        <div className="feature-card">
          <div className="feature-icon">💫</div>
          <h3>Mejores Precios</h3>
          <p>Encuentra tarifas competitivas para estancias cortas y largas</p>
        </div>
        <div className="feature-card">
          <div className="feature-icon">🔒</div>
          <h3>Reserva Segura</h3>
          <p>Tu seguridad es nuestra máxima prioridad</p>
        </div>
      </div>
    </div>
  );
};

export default Home;' > src/components/home/Home.js

(Nota: Los comandos de bash para actualizar CSS y hacer push se omiten para brevedad, pero siguen el mismo proceso).

bash
git add src/components/home/Home.js src/components/home/home.css
git commit -m "Home Team: Mejorar landing page con UI moderna y sección de características"
git push origin main

Monitorear la Ejecución del Pipeline

Navega a la consola de AWS CodePipeline para ver el progreso a través de las etapas de Source, Build, Security Scan y Deploy.

Ejecución del Pipeline

Una vez completado, verifica los cambios usando la URL del Load Balancer:

bash
# Obtener el nombre DNS del balanceador de carga
ALB_DNS=$(aws elbv2 describe-load-balancers \
    --names rent-a-room-alb \
    --query 'LoadBalancers[0].DNSName' \
    --output text)

echo "✅ URL de la Aplicación: http://$ALB_DNS"

2️⃣ Iteración 2: Probando la Compuerta de Seguridad con un Dockerfile Vulnerable

Vamos a probar cómo Docker Scout evita que imágenes vulnerables lleguen a producción.

1. Respaldar el Dockerfile actual

bash
cp Dockerfile Dockerfile.secure

2. Reemplazar con el Dockerfile vulnerable

bash
cp Dockerfile.vulnerable Dockerfile
echo "# Forzando build con imagen vulnerable" >> Dockerfile
git add Dockerfile
git commit -m "Probando compuerta de seguridad con Dockerfile vulnerable"
git push origin main

3. Monitorear la falla

El pipeline debería fallar en la etapa de Security Scan porque Docker Scout detectará vulnerabilidades críticas.

Falla de Seguridad

4. Protección contra fallas

A pesar de la falla, los usuarios finales no se ven afectados. El balanceador de carga sigue dirigiendo el tráfico a los contenedores sanos de la versión anterior.

Estrategias de Despliegue Avanzadas

En producción, podrías considerar:

  • Blue/Green Deployments: Crea un entorno nuevo (green) paralelo al actual (blue) y cambia el tráfico tras verificar.
  • Canary Deployments: Envía un pequeño porcentaje de tráfico a la nueva versión y monitoriza antes del despliegue total.

3️⃣ Iteración 3: Corrigiendo Seguridad y Mejorando Listados

1. Restaurar Dockerfile Seguro

bash
cp Dockerfile.secure Dockerfile

2. Mejorar la página de Listado de Habitaciones

Actualizaremos src/components/roomslist/RoomsList.js con un diseño de tarjetas moderno.

(Comandos de actualización omitidos para brevedad)

bash
git add src/components/roomslist/RoomsList.js src/components/roomslist/roomslist.css Dockerfile
git commit -m "Rooms Team: Mejorar diseño de tarjetas y corregir Dockerfile"
git push origin main

🔍 Entendiendo la Compuerta de Seguridad (Security Gate)

La configuración clave en el proyecto de CodeBuild de Scout:

bash
docker run --rm \
  -e DOCKER_SCOUT_HUB_USER=$DOCKER_USERNAME \
  -e DOCKER_SCOUT_HUB_PASSWORD=$DOCKER_TOKEN \
  docker/scout-cli cves $DOCKER_USERNAME/rent-a-room:$IMAGE_TAG \
  --exit-code --only-severity critical,high
  • --exit-code: Retorna un código de error si se hallan vulnerabilidades.
  • --only-severity critical,high: Filtra por nivel de severidad.

🏢 Beneficios en el Mundo Real

  1. Autonomía de Equipos: Diferentes equipos pueden trabajar en partes distintas de la aplicación.
  2. Integración Continua: Cada cambio se construye, prueba y despliega automáticamente.
  3. Consistencia en el Despliegue: El mismo proceso para cada cambio.
  4. Seguridad por Defecto: Docker Scout integrado en el proceso.

💡 Puntos Clave Finales

  1. Desarrollo Acelerado: De código a producción en minutos.
  2. Seguridad Shift-left: Seguridad integrada desde el inicio con Docker Scout.
  3. Soporte Multi-Arquitectura: Construye una vez, despliega en cualquier lugar con Docker Build Cloud.

🎉 ¡Felicidades!

Has construido con éxito un pipeline de CI/CD end-to-end aprovechando lo mejor de AWS y Docker. ¡Bien hecho! 🚀

Released under the GPL-3.0 License.