8. Integración continua
Temas del programa: 3.5
Integrar poco y seguido
Section titled “Integrar poco y seguido”40 archivos que nadie revisa a fondo y conflictos con todos
5 archivos que se revisan en una sentada
Integración continua — integrar con frecuencia y verificar automáticamente cada integración
Humble y Farley Continuous Delivery 2010
Lo que hoy haces a mano
Section titled “Lo que hoy haces a mano”composer installcp .env.example .env && php artisan key:generatevendor/bin/pint --testphp artisan migrate && php artisan migrate:rollback && php artisan migratephp artisan testAlguien lo olvida · funciona en mi máquina
Se ejecuta en cada push en una máquina limpia
El vocabulario
Section titled “El vocabulario”| Término | Qué es |
|---|---|
| Pipeline | Todo lo que se ejecuta por un push |
| Etapa (stage) | Un grupo de trabajos · empieza si la anterior pasó |
| Trabajo (job) | Una tarea con sus comandos |
| Runner | La máquina que ejecuta los trabajos |
.gitlab-ci.yml | El archivo en la raíz que lo describe |
Paso 1 — el pipeline más pequeño
Section titled “Paso 1 — el pipeline más pequeño”hola: image: php:8.3-cli script: - php -v - echo "El pipeline funciona"Un trabajo · una imagen · dos comandos · si alguno termina con error el trabajo queda en rojo
En GitLab Build · Pipelines muestra cada ejecución y su registro
Paso 2 — etapas y trabajos
Section titled “Paso 2 — etapas y trabajos”stages: - calidad - pruebas
estilo: stage: calidad script: - vendor/bin/pint --test
pruebas: stage: pruebas script: - php artisan testSi estilo falla pruebas ni siquiera empieza · el error más barato se detecta primero
Paso 3 — no repetir la preparación
Section titled “Paso 3 — no repetir la preparación”.php: image: php:8.3-cli before_script: - composer install --prefer-dist --no-progress --no-interaction - cp .env.example .env - php artisan key:generate
estilo: extends: .php stage: calidad script: - vendor/bin/pint --testUn trabajo que empieza con punto es una plantilla · extends la hereda · el equivalente de compilar en PHP
Paso 4 — una base de datos para las pruebas
Section titled “Paso 4 — una base de datos para las pruebas”variables: POSTGRES_DB: reservafic_testing POSTGRES_USER: reservafic # POSTGRES_PASSWORD vive en Settings · CI/CD · Variables DB_CONNECTION: pgsql DB_HOST: postgres DB_PASSWORD: $POSTGRES_PASSWORD
pruebas: extends: .php stage: pruebas services: - postgres:16 script: - php artisan migrate --force - php artisan testEl servicio es un PostgreSQL desechable · se crea para el trabajo y desaparece al terminar
Los secretos también en CI
Section titled “Los secretos también en CI”DB_PASSWORD: clave123 · queda en el repositorio y en cada copia
Masked se oculta en el log · Protected solo en ramas protegidas
El pipeline del proyecto
Section titled “El pipeline del proyecto”calidad ── estilo → vendor/bin/pint --test └─ secretos → detección de secretos sobre todo el historialpruebas ── pruebas → migrate · rollback · migrate · php artisan test contra un PostgreSQL efímeroEl runner usa imágenes de contenedor — construirlas es tema del Bloque IV
Leer un trabajo en rojo
Section titled “Leer un trabajo en rojo”$ php artisan test FAIL Tests\Feature\Repositories\EloquentPrestamoRepositoryTest x detecta traslape de horarios with data set "contenido dentro del existente" Failed asserting that false is identical to true.
Tests: 1 failed, 7 passedERROR: Job failed: exit code 1pruebas
El nombre del data set
true y obtuvo false
Salida simplificada · lee de abajo hacia arriba hasta encontrar la primera falla
El pipeline decide
Section titled “El pipeline decide”Nadie hace push directo
Un MR en rojo no se integra
En GitLab Free las aprobaciones no bloquean · nadie integra su propio MR sin aprobación por acuerdo del equipo
El experimento
Section titled “El experimento”Cambien < por <= en la consulta de traslape
Abran un MR
El pipeline queda en rojo y el botón Merge se deshabilita
Lo que la máquina no revisa
Section titled “Lo que la máquina no revisa”Estilo · pruebas · migraciones · secretos
Si la lógica está en la capa correcta · si el nombre refleja el dominio · si falta un caso
Ninguna sustituye a la otra · STD-CI §8
Calidad del repositorio
Section titled “Calidad del repositorio”| Elemento | Qué muestra |
|---|---|
| Historial | Conventional Commits legibles |
| Issues | Cada historia o defecto con su issue |
| Merge requests | Closes #N · revisión con severidad · pipeline verde |
| Documentación | README · docs/api · docs/adr · CHANGELOG |
Relación con el laboratorio
Section titled “Relación con el laboratorio”Este tema se practica en el Laboratorio 5 — Integración continua con GitLab CI.
Qué sigue
Section titled “Qué sigue”Continúa con 9. Cierre y resumen.

