├── app.py # Código fuente Flask
├── Dockerfile # Imagen Docker
├── Jenkinsfile # Pipeline CD (Jenkins)
├── requirements.txt # Dependencias Python
├── conftest.py # Configuración pytest
├── pytest.ini # Opciones pytest
├── tests/
│ └── test_app.py # Pruebas unitarias
└── .github/
└── workflows/
└── ci.yml # Pipeline CI (GitHub Actions)
-
CI (GitHub Actions):
- Se ejecuta automáticamente en cada push/pull request.
- Stages:
- Checkout del código
- Instalación de dependencias
- Ejecución de pruebas (pytest)
- Build de imagen Docker
-
CD (Jenkins):
- Pipeline definido en Jenkinsfile.
- Stages:
- Clonar repositorio
- Construir imagen Docker
- Publicar imagen en DockerHub
- Automatización: Se puede activar por webhook o Poll SCM.
- Archivo:
.github/workflows/ci.yml - Disparador: push/pull request a main
- Pruebas:
pytest tests/ -v - Build Docker:
docker build -t devops-app .
- Archivo:
Jenkinsfile - Credenciales:
dockerhub-userydockerhub-pass(Secret Text) - Publicación:
docker push geronimoav/devops-app:latest - Automatización: Webhook GitHub o Poll SCM
-
pruebas unitarias
-
Pipeline CI en GitHub Actions
-
Pipeline CD en Jenkins
-
DockerHub
-
Aplicación corriendo en local
Para detener solo Jenkins:
docker stop jenkinsPara eliminar solo Jenkins:
docker rm jenkinsPara detener solo la app:
docker stop devops-appPara eliminar solo la app:
docker rm devops-appPara detener todos los contenedores:
docker stop $(docker ps -q)Para eliminar todos los contenedores detenidos:
docker rm $(docker ps -aq)Para detener y eliminar Jenkins y la app juntos:
docker stop devops-app jenkins
docker rm devops-app jenkinsPuedes verificar que no queda nada corriendo con:
docker ps(Puedes agregar esta sección antes de las pruebas o al inicio del tutorial)
Para crear el contenedor Jenkins con acceso a Docker:
docker run -d --name jenkins -p 8080:8080 \
-v jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkins/jenkins:ltsEsto permite que Jenkins ejecute comandos Docker desde el pipeline.
Accede a Jenkins en:
http://localhost:8080
Para crear y ejecutar el contenedor de la app:
docker build -t devops-app:latest .
docker run -d --name devops-app -p 5000:5000 devops-app:latestO desde DockerHub:
docker pull geronimoav/devops-app:latest
docker run -d --name devops-app -p 5000:5000 geronimoav/devops-app:latestAccede a la app en:
http://localhost:5000
Abre una terminal en la raíz del proyecto y ejecuta:
pip install -r requirements.txtEjecuta las pruebas con pytest:
pytest tests/ -vConstruye y ejecuta la imagen Docker:
docker build -t devops-app:latest .
docker run -d --name devops-app -p 5000:5000 devops-app:latestAbre tu navegador en:
http://localhost:5000
Deberías ver el mensaje JSON de bienvenida.
En el navegador o usando curl:
http://localhost:5000/health
Respuesta esperada:
{"status": "healthy"}
docker stop devops-app
docker rm devops-app




