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
-
Código fuente (GitHub):
https://github.com/JaniMariQuesiRami/mlops-crispdm-ci-cd -
Paquete en PyPI:
https://pypi.org/project/mlops-crispdm-ci-cd/#history -
Imagen en Docker Hub:
https://hub.docker.com/repository/docker/jannisce2508/mlops-crispdm-ci-cd/general -
Workflows de GitHub Actions:
https://github.com/JaniMariQuesiRami/mlops-crispdm-ci-cd/actions
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
pusha la ramamain. - Cada
pull_requestcontramain.
- Cada
Flujo:
- Hace checkout del repo.
- Instala Python 3.11.
- Instala el paquete en modo editable (
pip install -e .). - 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
pushde un tag que comience conv(por ejemplov0.0.2). - Ejecución manual desde la pestaña “Actions” (
workflow_dispatch).
- Cualquier
Jobs principales:
-
publish-pypi- Construye el paquete (
python -m build). - Sube las distribuciones a PyPI con
twine upload dist/*usandoPYPI_API_TOKEN.
- Construye el paquete (
-
publish-docker- Depende de que
publish-pypitermine bien. - Hace login en Docker Hub con
DOCKERHUB_USERNAMEyDOCKERHUB_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:latestDOCKERHUB_USERNAME/mlops-crispdm-ci-cd:0.0.X
- Depende de que
Flujo de commits para activar el CD
Cada vez que se quiera sacar una nueva versión en PyPI y Docker Hub se debe:
- Actualizar la versión en
pyproject.tomly ensrc/mlops_crispdm/__init__.py(ejemplo:0.0.1→0.0.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
printde 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
pytestdentro de una carpetatests/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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
74af0b63f372ed08890898c47b94c4b28a7a35e14e4e4cb031c63dc089841499
|
|
| MD5 |
9cb5101245a1f9e24b6366fc2c56e047
|
|
| BLAKE2b-256 |
0e7a1c6a32bfe044beba3d889eb81d6f4e3e3386fb3c814f800af0a76ae55a4d
|
File details
Details for the file mlops_crispdm_ci_cd-0.0.6-py3-none-any.whl.
File metadata
- Download URL: mlops_crispdm_ci_cd-0.0.6-py3-none-any.whl
- Upload date:
- Size: 12.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
96150a2a6ae46110834d1f58e408088110c327e7881642eda4b2db4577297acb
|
|
| MD5 |
c888df10fbfb7676f15c218c2431da4c
|
|
| BLAKE2b-256 |
a6b0a2e557b7ce596f3f971fe4385d6de4d68bb6974e09765173c4d3d8da2e99
|