Skip to main content

Proyecto demo MLOps siguiendo CRISP-DM

Project description

Proyecto de MLOps siguiendo la metodología CRISP-DM

Incluye empaquetado en PyPI, imagen en Docker Hub y pipelines de GitHub Actions para CI y CD.


Repositorios y recursos


Instalación desde PyPI

En cualquier entorno con Python 3.9+:

pip install mlops-crispdm-ci-cd

Uso básico del paquete

Ejecutar la demo desde la terminal

El paquete expone un comando que recorre la “pipeline” CRISP-DM con prints de ejemplo:

mlops-crispdm-demo

Salida esperada:

Demo pipeline CRISP-DM:
Business Understanding - demo
Data Understanding - demo
Data Preparation - demo
Modeling - demo
Evaluation - demo
Deployment - demo

Uso como librería

Ejemplo mínimo:

from mlops_crispdm import business, data_preparation

business.run()
data_preparation.run()

Uso con Docker

La imagen en Docker Hub contiene el paquete instalado y ejecuta la demo por defecto.

Descargar la imagen

docker pull jannisce2508/mlops-crispdm-ci-cd:latest

O una versión específica:

docker pull jannisce2508/mlops-crispdm-ci-cd:0.0.1

Ejecutar el contenedor (se elimina al terminar)

docker run --rm --name mlops-crispdm-demo jannisce2508/mlops-crispdm-ci-cd:latest

Estructura general del proyecto

Estructura simplificada:

mlops-crispdm-ci-cd/
├── src/
│   └── mlops_crispdm/
│       ├── __init__.py
│       ├── business.py
│       ├── cli.py
│       ├── data_preparation.py
│       ├── data_understanding.py
│       ├── deployment.py
│       ├── evaluation.py
│       └── modeling.py.py
├── Dockerfile
├── pyproject.toml
└── .github/
    └── workflows/
        ├── ci.yml
        └── cd.yml

El código empaquetable está en src/mlops_crispdm.


GitHub Actions: CI y CD

El proyecto usa dos workflows:

  • ci.yml → Integración continua (CI).
  • cd.yml → Despliegue continuo (CD) a PyPI y Docker Hub.

Requisitos de configuración (secrets)

En GitHub, en Settings → Secrets and variables → Actions, se deben definir:

  • PYPI_API_TOKEN
    • API token de PyPI (scope para el proyecto o toda la cuenta).
    • Valor con formato pypi-....
  • DOCKERHUB_USERNAME
    • Usuario de Docker Hub.
  • DOCKERHUB_TOKEN
    • Access token de Docker Hub con permisos para publicar imágenes.

Con estos secrets, los workflows pueden publicar sin exponer credenciales en el código.


CI: cómo funciona ci.yml

Archivo: .github/workflows/ci.yml

  • Se activa en:
    • Cada push a la rama main.
    • Cada pull_request contra main.

Flujo:

  1. Hace checkout del repo.
  2. Instala Python 3.11.
  3. Instala el paquete en modo editable (pip install -e .).
  4. Ejecuta el comando mlops-crispdm-demo.

Si la instalación o la ejecución del comando fallan, el workflow marca error.
Esto asegura que la “demo” mínima del proyecto siempre funciona antes de mergear cambios.

Más adelante se pueden añadir pruebas con pytest sobre el código que se vaya desarrollando.


CD: cómo funciona cd.yml

Archivo: .github/workflows/cd.yml

  • Se activa en:
    • Cualquier push de un tag que comience con v (por ejemplo v0.0.2).
    • Ejecución manual desde la pestaña “Actions” (workflow_dispatch).

Jobs principales:

  1. publish-pypi

    • Construye el paquete (python -m build).
    • Sube las distribuciones a PyPI con twine upload dist/* usando PYPI_API_TOKEN.
  2. publish-docker

    • Depende de que publish-pypi termine bien.
    • Hace login en Docker Hub con DOCKERHUB_USERNAME y DOCKERHUB_TOKEN.
    • Lee el tag Git creado (v0.0.X) y extrae la versión (0.0.X).
    • Construye y sube la imagen de Docker con dos tags:
      • DOCKERHUB_USERNAME/mlops-crispdm-ci-cd:latest
      • DOCKERHUB_USERNAME/mlops-crispdm-ci-cd:0.0.X

Flujo de commits para activar el CD

Cada vez que se quiera sacar una nueva versión en PyPI y Docker Hub se debe:

  1. Actualizar la versión en pyproject.toml y en src/mlops_crispdm/__init__.py (ejemplo: 0.0.10.0.2).
  2. Ejecutar:
git add .
git commit -m "chore: bump version to 0.0.X"
git tag v0.0.X
git push origin main
git push origin v0.0.X

Donde X es el número de versión que corresponda.
El push del tag v0.0.X dispara automáticamente el workflow cd.yml.


Conclusiones: escalabilidad del proyecto y próximos pasos

Este proyecto ya tiene una base de infraestructura lista para crecer:

  • El empaquetado en PyPI permite reutilizar el código en otros proyectos o pipelines.
  • La imagen en Docker Hub facilita la ejecución uniforme en distintos entornos (local, servidor, nube).
  • Los workflows de GitHub Actions separan claramente CI y CD, lo que permite escalar el proceso de desarrollo sin cambiar la estructura principal.

Próximos pasos:

  • Sustituir los print de demo por lógica real en cada etapa de CRISP-DM (carga de datos, preprocesamiento, entrenamiento, evaluación).
  • Agregar pruebas unitarias y de integración con pytest dentro de una carpeta tests/ para mejorar la calidad del código.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mlops_crispdm_ci_cd-0.0.6.tar.gz (12.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mlops_crispdm_ci_cd-0.0.6-py3-none-any.whl (12.9 kB view details)

Uploaded Python 3

File details

Details for the file mlops_crispdm_ci_cd-0.0.6.tar.gz.

File metadata

  • Download URL: mlops_crispdm_ci_cd-0.0.6.tar.gz
  • Upload date:
  • Size: 12.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for mlops_crispdm_ci_cd-0.0.6.tar.gz
Algorithm Hash digest
SHA256 74af0b63f372ed08890898c47b94c4b28a7a35e14e4e4cb031c63dc089841499
MD5 9cb5101245a1f9e24b6366fc2c56e047
BLAKE2b-256 0e7a1c6a32bfe044beba3d889eb81d6f4e3e3386fb3c814f800af0a76ae55a4d

See more details on using hashes here.

File details

Details for the file mlops_crispdm_ci_cd-0.0.6-py3-none-any.whl.

File metadata

File hashes

Hashes for mlops_crispdm_ci_cd-0.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 96150a2a6ae46110834d1f58e408088110c327e7881642eda4b2db4577297acb
MD5 c888df10fbfb7676f15c218c2431da4c
BLAKE2b-256 a6b0a2e557b7ce596f3f971fe4385d6de4d68bb6974e09765173c4d3d8da2e99

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page