Pipeline CI/CD en GitLab Runner sobre Linux

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:

  1. Agregar repositorio oficial:
    curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh  sudo bash
  2. Instalar paquete:
    sudo apt-get install gitlab-runner
  3. 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

  1. Versiona tu .gitlab-ci.yml y documenta cambios.
  2. Divide pipelines muy grandes con include o child pipelines.
  3. Optimiza caché para reducir tiempos de instalación.
  4. Usa imágenes livianas y específicas para cada job.
  5. Protege variables sensibles usa runners aislados.
  6. 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.

Download TXT




Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *