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

Uploaded Python 3

File details

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

File metadata

  • Download URL: mlops_crispdm_ci_cd-0.0.7.tar.gz
  • Upload date:
  • Size: 12.7 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.7.tar.gz
Algorithm Hash digest
SHA256 df7aa85244801f68732131db61e2aaaba2e1b350ca05b479e37975836d1a8fe3
MD5 f2f8d958a3773116ecaf95033cd26894
BLAKE2b-256 07c5323ab166fe7d58fef733438e0251613cd5cb816d6b5b41a5177572bb7c9a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mlops_crispdm_ci_cd-0.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 228b11b6edc30940a5b5d4e9391ed5ea9efa6a34a13a3a5c301ea391bc1108a5
MD5 b190ed15980518ea2ce160c6c4aef080
BLAKE2b-256 be69c73ad76fddef4c39f8460a6c6ca8af92c1a036c8bf20bba82a80b0a30fa0

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