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.8.tar.gz (459.0 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.8-py3-none-any.whl (459.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: mlops_crispdm_ci_cd-0.0.8.tar.gz
  • Upload date:
  • Size: 459.0 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.8.tar.gz
Algorithm Hash digest
SHA256 a4baa68d799df7d4c9ebfb4ac9710aabd814d17d101cd128ac278c128084cb03
MD5 4cb79fa1556fcb6c3688310be809a65c
BLAKE2b-256 a51c55f88c3174e36b9a724641a1f50fe09f731a6be047c0493dc1ae314a0dd0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mlops_crispdm_ci_cd-0.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 564c83d4562220f46e2b7c02d9026c1de169b45eff9be0e790baf6ba86d6dc74
MD5 7be23aabfa3698f780199065076ca2bd
BLAKE2b-256 de4f6a360c78e6886a9c855ccd6d3a082cf9bbb639d0aaf1c375f4be91b66d72

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