Introducción

La Entrega Continua (CD, por sus siglas en inglés) es una práctica fundamental en DevOps que se centra en la automatización y mejora del proceso de entrega de software. A través de CD, los equipos pueden implementar cambios en el código de manera rápida, segura y sostenible, asegurando que el software esté siempre en un estado listo para ser desplegado.

Objetivos de la Entrega Continua

  1. Automatización del Despliegue: Minimizar la intervención manual en el proceso de despliegue para reducir errores y aumentar la eficiencia.
  2. Frecuencia de Entrega: Permitir entregas frecuentes y consistentes de software a producción.
  3. Calidad del Software: Mantener altos estándares de calidad mediante pruebas automatizadas y revisiones continuas.
  4. Feedback Rápido: Obtener retroalimentación rápida sobre el impacto de los cambios en el código.

Componentes Clave de CD

  1. Pipeline de CD: Una serie de etapas automatizadas que el código debe pasar antes de ser desplegado en producción.
  2. Pruebas Automatizadas: Conjunto de pruebas que se ejecutan automáticamente para asegurar que el código cumple con los estándares de calidad.
  3. Despliegue Automatizado: Proceso de mover el código desde un entorno de desarrollo a un entorno de producción de manera automática.
  4. Monitoreo y Feedback: Herramientas y procesos para monitorear el rendimiento del software en producción y obtener feedback continuo.

Pipeline de CD

Un pipeline de CD típico incluye las siguientes etapas:

  1. Construcción: Compilación del código fuente y creación de artefactos de despliegue.
  2. Pruebas Unitarias: Ejecución de pruebas unitarias para verificar la funcionalidad básica del código.
  3. Pruebas de Integración: Verificación de que los diferentes módulos del software funcionan bien juntos.
  4. Despliegue en Entornos de Prueba: Despliegue del código en entornos de prueba para realizar pruebas adicionales.
  5. Pruebas de Aceptación: Pruebas finales para asegurar que el software cumple con los requisitos del cliente.
  6. Despliegue en Producción: Despliegue del código en el entorno de producción.

Ejemplo de Pipeline de CD

pipeline:
  stages:
    - name: Build
      steps:
        - run: mvn clean install
    - name: Unit Tests
      steps:
        - run: mvn test
    - name: Integration Tests
      steps:
        - run: mvn verify
    - name: Deploy to Staging
      steps:
        - run: ./deploy.sh staging
    - name: Acceptance Tests
      steps:
        - run: ./run_acceptance_tests.sh
    - name: Deploy to Production
      steps:
        - run: ./deploy.sh production

Explicación del Código

  • Build Stage: Compila el código fuente usando Maven.
  • Unit Tests Stage: Ejecuta pruebas unitarias para verificar la funcionalidad básica.
  • Integration Tests Stage: Ejecuta pruebas de integración para asegurar que los módulos funcionan bien juntos.
  • Deploy to Staging Stage: Despliega el código en un entorno de prueba (staging).
  • Acceptance Tests Stage: Ejecuta pruebas de aceptación para verificar que el software cumple con los requisitos.
  • Deploy to Production Stage: Despliega el código en el entorno de producción.

Beneficios de la Entrega Continua

  1. Reducción del Tiempo de Entrega: Permite entregar software más rápidamente.
  2. Mejora de la Calidad: Las pruebas automatizadas y el feedback continuo mejoran la calidad del software.
  3. Mayor Flexibilidad: Facilita la implementación de cambios y nuevas funcionalidades.
  4. Reducción de Riesgos: La automatización y las pruebas continuas reducen el riesgo de errores en producción.

Ejercicio Práctico

Configuración de un Pipeline de CD

Objetivo: Configurar un pipeline de CD básico utilizando una herramienta de CI/CD como Jenkins, GitLab CI o GitHub Actions.

Pasos:

  1. Instalar la Herramienta de CI/CD: Instala Jenkins, GitLab CI o GitHub Actions en tu entorno de desarrollo.
  2. Crear un Repositorio de Código: Crea un repositorio en GitHub o GitLab y sube tu código fuente.
  3. Configurar el Pipeline: Escribe un archivo de configuración para tu pipeline de CD (por ejemplo, Jenkinsfile para Jenkins, .gitlab-ci.yml para GitLab CI, o .github/workflows/main.yml para GitHub Actions).
  4. Definir las Etapas del Pipeline: Define las etapas de construcción, pruebas y despliegue en tu archivo de configuración.
  5. Ejecutar el Pipeline: Ejecuta el pipeline y verifica que todas las etapas se completen correctamente.

Solución Ejemplo (GitHub Actions)

name: CI/CD Pipeline

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Set up JDK 11
      uses: actions/setup-java@v1
      with:
        java-version: '11'

    - name: Build with Maven
      run: mvn clean install

    - name: Run Unit Tests
      run: mvn test

    - name: Run Integration Tests
      run: mvn verify

    - name: Deploy to Staging
      run: ./deploy.sh staging

    - name: Run Acceptance Tests
      run: ./run_acceptance_tests.sh

    - name: Deploy to Production
      run: ./deploy.sh production

Explicación del Código

  • name: Define el nombre del workflow.
  • on: Especifica que el pipeline se ejecutará en cada push a la rama main.
  • jobs: Define los trabajos que se ejecutarán en el pipeline.
    • build: Define un trabajo llamado build que se ejecutará en un contenedor ubuntu-latest.
      • steps: Lista de pasos a seguir en el trabajo build.
        • Checkout code: Usa la acción actions/checkout@v2 para obtener el código fuente.
        • Set up JDK 11: Usa la acción actions/setup-java@v1 para configurar JDK 11.
        • Build with Maven: Ejecuta mvn clean install para compilar el código.
        • Run Unit Tests: Ejecuta mvn test para correr las pruebas unitarias.
        • Run Integration Tests: Ejecuta mvn verify para correr las pruebas de integración.
        • Deploy to Staging: Ejecuta el script deploy.sh para desplegar en staging.
        • Run Acceptance Tests: Ejecuta el script run_acceptance_tests.sh para correr las pruebas de aceptación.
        • Deploy to Production: Ejecuta el script deploy.sh para desplegar en producción.

Conclusión

La Entrega Continua es una práctica esencial en DevOps que permite a los equipos de desarrollo entregar software de alta calidad de manera rápida y eficiente. A través de la automatización de pruebas y despliegues, CD reduce el tiempo de entrega, mejora la calidad del software y proporciona un feedback rápido, lo que facilita la implementación de cambios y nuevas funcionalidades. En el próximo módulo, exploraremos las diferencias entre CI y CD y cómo se complementan entre sí.

© Copyright 2024. Todos los derechos reservados