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.5.tar.gz (12.4 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.5-py3-none-any.whl (12.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: mlops_crispdm_ci_cd-0.0.5.tar.gz
  • Upload date:
  • Size: 12.4 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.5.tar.gz
Algorithm Hash digest
SHA256 0fc52902e8e8b34947fc9fa9d116d242718ed1b5985eafd3c3cda4737a3fcd6b
MD5 67d0a3a8c9f9795f74f01fae90ab9c7a
BLAKE2b-256 94640441b0dfcdca7bdc393d5442ef2756f4fa51c7e321fc136a76cbd6f96e70

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mlops_crispdm_ci_cd-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 878ba1f6b4a6ab1c11a87eb914b22bba8f22115603cd32ee4c62f86591bcdb0f
MD5 1de8d107bd7b3e5fa0e1534c99982644
BLAKE2b-256 6c8d95b1ba4d60fd938054b5f8b01680b7dfe2741d877efe0a892a32e2e51d56

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