Pipeline CI/CD en GitLab Runner sobre Linux
Un recorrido completo, serio y detallado para entender, instalar, configurar y optimizar tus pipelines de CI/CD con GitLab Runner en sistemas Linux.
1. Contexto y conceptos básicos
La integración continua (CI) y el despliegue continuo (CD) forman la espina dorsal de las prácticas DevOps modernas. GitLab CI/CD es una solución integrada en GitLab que permite definir pipelines mediante un archivo .gitlab-ci.yml. Los runners son procesos que ejecutan las tareas definidas en esos pipelines.
- CI: Automatizar compilación, pruebas y análisis.
- CD: Desplegar artefactos de manera confiable en entornos productivos.
- Runner: Agente que recoge trabajos desde GitLab y los ejecuta.
2. Instalación de GitLab Runner en Linux
Se soportan distribuciones como Ubuntu, Debian, CentOS y Fedora. A continuación, un ejemplo en Debian/Ubuntu:
- Agregar repositorio oficial:
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh sudo bash - Instalar paquete:
sudo apt-get install gitlab-runner - Verificar versión:
gitlab-runner --version
2.1 Registro del Runner
Registra tu runner contra un proyecto o contra todo el servidor:
sudo gitlab-runner register
Se solicitarán:
- URL de GitLab (por ejemplo
https://gitlab.example.com). - Token del proyecto o de instancia.
- Descripción y etiquetas para identificar el runner.
- Tipo de ejecutor:
shell,docker,docker machine,kubernetes, etc.
3. Tipos de ejecutores
| Ejecutor | Descripción | Uso común |
|---|---|---|
| shell | Ejecuta comandos directamente en el host Linux. | Scripts simples, pruebas rápidas. |
| docker | Ejecuta cada job dentro de un contenedor Docker. | Aislamiento, entornos reproducibles. |
| docker machine | Provisiona máquinas Docker automáticamente en la nube. | Escalado dinámico. |
| kubernetes | Lanza pods en un clúster de Kubernetes. | Entorno cloud native. |
4. Definiendo tu pipeline con .gitlab-ci.yml
El archivo raíz .gitlab-ci.yml define stages y jobs:
stages:
- build
- test
- deploy
build_job:
stage: build
script:
- make build
test_job:
stage: test
script:
- make test
artifacts:
paths:
- reports/
deploy_job:
stage: deploy
script:
- ./deploy.sh
when: manual
environment:
name: production
4.1 Variables y secretos
Define variables en GitLab UI o en .gitlab-ci.yml. Para variables sensibles, marca protected o masked:
variables:
APP_ENV: production
SENSITIVE_KEY:
value: SENSITIVE_KEY
masked: true
protected: true
5. Caché y artefactos
- cache: compartir dependencias entre jobs.
- artifacts: guardar resultados (binarios, informes) para etapas posteriores o descarga manual.
6. Estrategias avanzadas
6.1 Pipelines dinámicos e includes
Usa include para separar módulos o reutilizar plantillas comunes:
include:
- project: my-org/ci-templates
file: /templates/docker-build.yml
- local: /ci/deploy.yml
6.2 Matrices y estrategias paralelas
Define múltiples variables para ejecuciones simultáneas:
test_matrix:
stage: test
parallel:
matrix:
- RUBY: [2.6,2.7]
- DB: [postgres,mysql]
script: bundle exec rspec
7. Seguridad y entornos protegidos
Para proyectos críticos, aísla runners en redes seguras o en VPN corporativos, como WireGuard VPN. Utiliza:
- Runners protected para ramas sensibles.
- Ejecutores efímeros (Docker) para eliminar riesgos.
- Análisis SAST, DAST e dependency scanning integrados.
8. Escalabilidad y monitoreo
Para grandes cargas:
- Auto-scaling: Docker Machine, Kubernetes.
- Prometheus: Métricas de runner y jobs.
- Alertas: Tiempos de ejecución, errores frecuentes.
9. Integraciones y notificaciones
- Slack, Microsoft Teams: enviar estado de pipeline.
- Jira: crear o actualizar incidencias desde un job.
- Docker Registry, GitLab Package Registry: almacenar imágenes y paquetes.
10. Buenas prácticas
- Versiona tu
.gitlab-ci.ymly documenta cambios. - Divide pipelines muy grandes con
includeo child pipelines. - Optimiza caché para reducir tiempos de instalación.
- Usa imágenes livianas y específicas para cada job.
- Protege variables sensibles usa runners aislados.
- Monitoriza métricas y tiempos de ejecución.
11. Ejemplo completo
stages:
- lint
- build
- test
- release
- deploy
.lint_template: lint_definition
stage: lint
script:
- npm ci
- npm run lint
lint:
<<: lint_definition
build:
stage: build
script:
- npm run build
cache:
paths:
- node_modules/
test:
stage: test
script:
- npm test
artifacts:
when: always
reports:
junit: report.xml
release:
stage: release
script:
- ./scripts/release.sh
only:
- tags
deploy:
stage: deploy
script:
- ./scripts/deploy.sh
environment:
name: production
url: https://app.example.com
when: manual
needs:
- release
12. Conclusión
El ecosistema de CI/CD en GitLab junto con runners en Linux ofrece una solución completa y escalable. Desde la instalación inicial hasta el diseño de pipelines avanzados y seguros, dominar estas herramientas impulsa la calidad del software y acelera el tiempo de entrega.
Este artículo ha cubierto conceptos, configuraciones y mejores prácticas para que puedas implementar pipelines robustas y mantener un flujo de trabajo ágil en tus proyectos.
Deja una respuesta