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
- Crea un nuevo repositorio en GitHub y sube tu proyecto Django.
Paso 2: Configurar GitHub Actions
- En tu repositorio, ve a la pestaña "Actions".
- 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
- Crea una cuenta en Heroku y un nuevo proyecto.
- 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
- Crea un nuevo repositorio en GitHub y sube tu proyecto Django.
- Configura GitHub Actions siguiendo los pasos descritos anteriormente.
- Asegúrate de que las pruebas se ejecuten correctamente en cada push a la rama main.
Ejercicio 2: Desplegar Automáticamente en Heroku
- Configura un proyecto en Heroku.
- Añade el trabajo de despliegue a tu archivo de workflow de GitHub Actions.
- 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.
Curso de Desarrollo Web con Django
Módulo 1: Introducción a Django
- ¿Qué es Django?
- Configuración del Entorno de Desarrollo
- Creando tu Primer Proyecto Django
- Entendiendo la Estructura del Proyecto Django
Módulo 2: Conceptos Básicos de Django
- Aplicaciones Django y Estructura del Proyecto
- Enrutamiento de URL y Vistas
- Plantillas y Archivos Estáticos
- Modelos y Bases de Datos
- Interfaz de Administración de Django
Módulo 3: Django Intermedio
- Manejo de Formularios
- Vistas Basadas en Clases
- Autenticación de Usuarios
- Middleware
- Carga de Archivos
Módulo 4: Django Avanzado
- Consultas Avanzadas con Django ORM
- Modelos de Usuario Personalizados
- Señales de Django
- Pruebas en Django
- Optimización del Rendimiento