En la industria del transporte de mercancías, la optimización de
procesos tecnológicos es clave para garantizar eficiencia,
seguridad y rapidez en la entrega. La empresa TransChile se dedica
al transporte de carga dentro de Chile y actualmente enfrenta
problemas en su desarrollo de software, lo que impacta
negativamente en la operación logística.
El equipo de desarrollo trabaja sin integración continua, no
cuenta con un flujo de trabajo estructurado ni herramientas de
control de versiones adecuadas, lo que genera errores en
producción, problemas de seguridad y falta de automatización en la
entrega de software.
Como especialista en DevOps, los estudiantes deberán evaluar el
estado actual de la empresa y proponer soluciones en un informe
estructurado.
🎯 Contexto
Escenario de la Empresa TransChile
Descripción del problema actual en el desarrollo de software:
👋🏻 Antes de comenzar
Esta web fue creada con fines académicos, todos los datos que se exponen no son reales. En esta se comparte la solución a la problemática de la Evaluación del Módulo 3 del BootCamp Dev-Ops TD 2025.
Puedes usar los botones de la zona superior derecha para interactuar con la web:
- 🗂️ Navegar entre secciones.
- ⚙️ Ajustes de visualización.
La empresa TransChile, dedicada al transporte de carga dentro del
territorio nacional, enfrenta una serie de desafíos tecnológicos
que comprometen la calidad, seguridad y eficiencia de su
desarrollo de software. Actualmente, su modelo de trabajo se basa
en un enfoque manual y desestructurado que afecta gravemente la
operación logística.
El equipo de desarrollo trabaja de manera aislada, sin un
repositorio centralizado ni control de versiones. Cada
desarrollador avanza en su entorno local y una vez al mes se
realiza una reunión para unir manualmente los cambios. Esta fusión
se realiza sin revisión de código formal y se sube directamente al
servidor de producción vía FTP.
La inexistencia de un sistema de control de versiones como Git
impide tener trazabilidad, historial de cambios y colaboración
efectiva. La falta de automatización también ralentiza la entrega
de nuevas funcionalidades, incrementa los errores humanos y
dificulta la recuperación ante fallos. Esto se traduce en mayores
costos operativos, pérdida de confianza por parte de los clientes
y una menor competitividad en el mercado.
📋 Introducción y análisis del estado actual
🛠 Modelo actual de desarrollo
❗ Problemas críticos en el proceso
⚠️ Impacto de la falta de control y automatización
Existen varias metodologías para organizar el trabajo con Git.
Git Flow establece ramas separadas para
desarrollo, releases y hotfixes, siendo útil para proyectos con
ciclos definidos. GitHub Flow es más simple y
continuo, trabajando directamente con
Se propone implementar una estructura de ramas basada en
main, staging y
develop:
Actualmente, TransChile carece de versionamiento formal, lo que
impide tener trazabilidad de cambios, control de errores y
colaboración efectiva. Con Git y esta estructura de ramas, cada
funcionalidad se desarrollará de forma aislada y controlada,
permitiendo identificar de forma precisa qué se hizo, cuándo, por
quién y por qué.
Además, este flujo facilita la automatización de pruebas: al crear
una
🔁 Propuesta de implementación de Git y control de
versiones
main
y ramas
por feature. Trunk-based Development, por su
parte, sugiere trabajar con una sola rama base y hacer entregas
continuas, lo que requiere alto nivel de automatización y pruebas.
🔧 Propuesta de control de versiones con Git
develop
para trabajar en funcionalidades
específicas, de forma aislada.
✅ Justificación del flujo recomendado
feature/*
, se puede ejecutar una batería de
pruebas unitarias. Al integrar a develop
, se
ejecutarán pruebas de integración, y al pasar a
staging
, se validará el sistema de forma más global
con pruebas funcionales y de seguridad. Solo si todo pasa
exitosamente, los cambios se promoverán a main
para
su despliegue en producción.
Se ha elegido GitHub Actions como herramienta de
CI/CD por su integración nativa con el repositorio, soporte para
Django y facilidad de uso. Permite automatizar procesos clave del
ciclo de vida del software directamente desde la plataforma donde
se aloja el código.
El flujo considera los siguientes entornos de trabajo, de acuerdo
a la estrategia de ramas:
🚀 Implementación de integración continua (CI/CD)
🛠️ Propuesta de pipeline CI/CD
🔍 Estrategias de calidad por etapa
flake8
y
black
para mantener código limpio.
bandit
para
código y safety
para dependencias. Además, se
incluye un escaneo de imágenes Docker con
trivy
para detectar vulnerabilidades antes de
desplegar.
📄 Archivo
.github/workflows/django.yml
name: CI/CD WebApp TransChile @ Django
on:
push:
branches:
- develop
- staging
- main
pull_request:
branches:
- develop
- staging
jobs:
build-and-test:
runs-on: ubuntu-latest
services:
postgres:
image: postgres:14
env:
POSTGRES_DB: transchile
POSTGRES_USER: user
POSTGRES_PASSWORD: password
ports:
- 5432:5432
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
env:
DJANGO_SECRET_KEY: testsecret
DJANGO_DEBUG: true
DATABASE_URL: postgres://user:password@localhost:5432/transchile
steps:
- name: Checkout código
uses: actions/checkout@v3
- name: Configurar Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Crear entorno virtual e instalar dependencias
run: |
python -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
- name: Formateo de código y lint
run: |
source venv/bin/activate
black . --check
flake8 .
- name: Análisis de seguridad en código y dependencias
run: |
source venv/bin/activate
bandit -r .
safety check --full-report
- name: Análisis de imagen Docker
run: |
docker build -t transchile .
docker run --rm aquasec/trivy image transchile
- name: Ejecutar pruebas
run: |
source venv/bin/activate
python manage.py migrate
python manage.py test
deploy-staging:
if: github.ref == 'refs/heads/staging'
needs: build-and-test
runs-on: ubuntu-latest
steps:
- name: Despliegue en entorno staging (preview)
run: echo "Aquí se desplegaría a un entorno staging (ej: Docker o VPS)"
deploy-prod:
if: github.ref == 'refs/heads/main'
needs: build-and-test
runs-on: ubuntu-latest
steps:
- name: Despliegue a producción
run: echo "Despliegue final a entorno production"
Se recomienda la integración de SonarQube como
herramienta principal de análisis estático del código. Su uso
permite detectar vulnerabilidades, bugs y code smells de forma
anticipada. SonarQube puede ejecutarse automáticamente en el
pipeline de GitHub Actions tras la ejecución de pruebas unitarias
e integrarse con herramientas como
La integración de paquetes desactualizados o comprometidos es una
de las causas más comunes de ataques en sistemas modernos. Para
mitigar este riesgo se utilizarán herramientas como
A futuro, se recomienda automatizar la revisión de dependencias
con GitHub Dependabot, que permite recibir alertas cuando se
detectan versiones inseguras en librerías utilizadas.
A continuación se presenta una versión mejorada del archivo
🛡️ Seguridad y análisis estático del código
flake8
y
black
para reforzar la calidad del código. Su
interfaz gráfica facilita el seguimiento continuo de la salud del
proyecto.
🛠️ Estrategias para proteger la infraestructura
Trivy
para detectar vulnerabilidades en imágenes
Docker.
🚫 Paquetes inseguros y cómo evitarlos
Safety
(que verifica vulnerabilidades conocidas) y
pip-audit
, además de mantener dependencias bajo
versionado estricto en el archivo requirements.txt
.
⚙️ Pipeline con análisis de seguridad integrado
django.yml
que incorpora los análisis con SonarQube,
Safety, Bandit, Trivy y pruebas unitarias, manteniendo buenas
prácticas de seguridad y calidad en el ciclo DevOps.
name: CI/CD WebApp TransChile @ Django
on:
push:
branches:
- develop
- staging
- main
pull_request:
branches:
- develop
- staging
jobs:
build-and-test:
runs-on: ubuntu-latest
services:
postgres:
image: postgres:14
env:
POSTGRES_DB: transchile
POSTGRES_USER: user
POSTGRES_PASSWORD: password
ports:
- 5432:5432
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
env:
DJANGO_SECRET_KEY: testsecret
DJANGO_DEBUG: true
DATABASE_URL: postgres://user:password@localhost:5432/transchile
steps:
- name: Checkout código
uses: actions/checkout@v3
- name: Configurar Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Crear entorno virtual e instalar dependencias
run: |
python -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
- name: Formateo de código y lint
run: |
source venv/bin/activate
black . --check
flake8 .
- name: Análisis de seguridad en código y dependencias
run: |
source venv/bin/activate
bandit -r .
safety check --full-report
- name: Análisis de imagen Docker
run: |
docker build -t transchile .
docker run --rm aquasec/trivy image transchile
- name: Ejecutar pruebas unitarias
run: |
source venv/bin/activate
python manage.py migrate
python manage.py test
- name: Análisis estático con SonarQube
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: |
curl -sSLo sonar-scanner.zip https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-5.0.1.3006-linux.zip
unzip sonar-scanner.zip
export PATH=$PATH:$PWD/sonar-scanner-*/bin
sonar-scanner \
-Dsonar.projectKey=transchile \
-Dsonar.sources=. \
-Dsonar.python.version=3.11 \
-Dsonar.host.url=${{ secrets.SONAR_HOST_URL }} \
-Dsonar.login=${{ secrets.SONAR_TOKEN }}
deploy-staging:
if: github.ref == 'refs/heads/staging'
needs: build-and-test
runs-on: ubuntu-latest
steps:
- name: Despliegue en entorno staging (preview)
run: echo "Aquí se desplegaría a un entorno staging (ej: Docker o VPS)"
deploy-prod:
if: github.ref == 'refs/heads/main'
needs: build-and-test
runs-on: ubuntu-latest
steps:
- name: Despliegue a producción
run: echo "Despliegue final a entorno productivo"
La transformación digital propuesta para TransChile aborda de
forma integral los principales desafíos técnicos y
organizacionales del área de desarrollo. La implementación de Git
como sistema de control de versiones, junto a una estrategia de
ramas clara, permite establecer orden y trazabilidad en el ciclo
de vida del software.
El pipeline CI/CD diseñado con GitHub Actions garantiza que cada
cambio pase por una serie de validaciones automáticas, incluyendo
pruebas, análisis estático de código, escaneo de dependencias y
revisión de imágenes Docker. Esto permite detectar errores de
forma temprana y reducir riesgos antes del despliegue a
producción.
Por último, la incorporación de SonarQube y herramientas de
seguridad refuerza la postura de ciberseguridad de la
organización, asegurando que el código cumpla con estándares de
calidad y minimizando vulnerabilidades. Todo esto contribuye a
mejorar la eficiencia, la confianza en el producto y la
competitividad de TransChile en el mercado.
📦 Conclusión