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.