La integración y despliegue continuos (CI/CD) son prácticas esenciales en el desarrollo moderno de software que permiten a los equipos entregar cambios de código de manera más rápida y segura. En este tema, aprenderemos cómo implementar CI/CD en un proyecto Django.

Objetivos de Aprendizaje

  • Comprender los conceptos de CI/CD.
  • Configurar un pipeline de CI/CD para un proyecto Django.
  • Integrar herramientas populares de CI/CD como GitHub Actions y Travis CI.
  • Desplegar automáticamente una aplicación Django en un entorno de producción.

Conceptos Clave de CI/CD

Integración Continua (CI)

La integración continua es una práctica de desarrollo en la que los desarrolladores integran su código en un repositorio compartido varias veces al día. Cada integración es verificada por una build automatizada (incluyendo pruebas) para detectar errores lo antes posible.

Despliegue Continuo (CD)

El despliegue continuo es una práctica en la que cada cambio que pasa todas las etapas de la pipeline de producción se despliega automáticamente en el entorno de producción. Esto asegura que el software puede ser liberado en cualquier momento.

Configuración de un Pipeline de CI/CD

Herramientas Populares de CI/CD

  • GitHub Actions: Una plataforma de CI/CD integrada en GitHub.
  • Travis CI: Un servicio de CI/CD que se integra con GitHub.
  • GitLab CI: Una herramienta de CI/CD integrada en GitLab.

Ejemplo con GitHub Actions

Paso 1: Crear un Repositorio en GitHub

  1. Crea un nuevo repositorio en GitHub y sube tu proyecto Django.

Paso 2: Configurar GitHub Actions

  1. En tu repositorio, ve a la pestaña "Actions".
  2. Selecciona "Set up a workflow yourself" para crear un archivo de configuración de GitHub Actions.

Paso 3: Crear el Archivo de Workflow

Crea un archivo llamado .github/workflows/ci.yml en tu repositorio con el siguiente contenido:

name: Django CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest

    services:
      postgres:
        image: postgres:latest
        env:
          POSTGRES_DB: django_db
          POSTGRES_USER: django_user
          POSTGRES_PASSWORD: django_password
        ports:
          - 5432:5432
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5

    env:
      DATABASE_URL: postgres://django_user:django_password@localhost:5432/django_db

    steps:
    - uses: actions/checkout@v2
    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: '3.8'
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
    - name: Run migrations
      run: |
        python manage.py migrate
    - name: Run tests
      run: |
        python manage.py test

Explicación del Archivo de Workflow

  • name: Nombre del workflow.
  • on: Eventos que desencadenan el workflow (push y pull_request en la rama main).
  • jobs: Define los trabajos que se ejecutarán.
    • runs-on: Especifica el sistema operativo en el que se ejecutará el trabajo.
    • services: Configura servicios adicionales necesarios, como una base de datos PostgreSQL.
    • env: Variables de entorno necesarias para la configuración.
    • steps: Pasos a seguir en el trabajo, incluyendo la configuración de Python, instalación de dependencias, migraciones y ejecución de pruebas.

Despliegue Automático

Paso 1: Configurar el Despliegue en Heroku

  1. Crea una cuenta en Heroku y un nuevo proyecto.
  2. Instala la CLI de Heroku y autentícate.

Paso 2: Configurar el Despliegue Automático en GitHub Actions

Añade un nuevo trabajo al archivo .github/workflows/ci.yml para el despliegue:

deploy:
  needs: build
  runs-on: ubuntu-latest

  steps:
  - uses: actions/checkout@v2
  - name: Set up Python
    uses: actions/setup-python@v2
    with:
      python-version: '3.8'
  - name: Install dependencies
    run: |
      python -m pip install --upgrade pip
      pip install -r requirements.txt
  - name: Deploy to Heroku
    env:
      HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}
    run: |
      heroku git:remote -a your-heroku-app-name
      git push heroku main

Explicación del Despliegue

  • deploy: Define un nuevo trabajo de despliegue.
  • needs: Especifica que este trabajo depende del trabajo de build.
  • steps: Pasos para configurar Python, instalar dependencias y desplegar en Heroku.
  • HEROKU_API_KEY: Se obtiene de los secretos de GitHub para autenticar en Heroku.

Ejercicio Práctico

Ejercicio 1: Configurar CI/CD con GitHub Actions

  1. Crea un nuevo repositorio en GitHub y sube tu proyecto Django.
  2. Configura GitHub Actions siguiendo los pasos descritos anteriormente.
  3. Asegúrate de que las pruebas se ejecuten correctamente en cada push a la rama main.

Ejercicio 2: Desplegar Automáticamente en Heroku

  1. Configura un proyecto en Heroku.
  2. Añade el trabajo de despliegue a tu archivo de workflow de GitHub Actions.
  3. Verifica que tu aplicación se despliegue automáticamente en Heroku después de cada push a la rama main.

Conclusión

En esta sección, hemos aprendido los conceptos básicos de CI/CD y cómo configurar un pipeline de CI/CD para un proyecto Django utilizando GitHub Actions. También hemos visto cómo desplegar automáticamente una aplicación Django en Heroku. Estas prácticas no solo mejoran la eficiencia del desarrollo, sino que también aseguran que el código se mantenga en un estado desplegable en todo momento.

En el siguiente tema, exploraremos cómo mantener y escalar aplicaciones Django en producción, asegurando que nuestras aplicaciones sean robustas y escalables.

© Copyright 2024. Todos los derechos reservados