gitlab

Conceptos clave

  • Plataforma DevOps all-in-one que integra repositorios Git, CI/CD, gestión de issues, seguridad y despliegues.
  • Alternativa self-hosted a servicios SaaS, con control total sobre datos y configuración.
  • Soporta flujos GitOps, CI/CD declarativo y automatización de infraestructura.
  • Componentes principales:
    • GitLab Rails App (UI, API, permisos).
    • Gitaly (gestión de repositorios Git).
    • CI/CD (pipelines, runners).
    • Registry (contenedores, paquetes).
    • Seguridad (SAST, DAST, Dependency Scanning).

Casos de uso

  • Monorepos y multirepos con control de permisos.
  • Pipelines CI/CD para backend, frontend y mobile.
  • Registro privado de contenedores Docker.
  • Gestión de proyectos y planificación (issues, boards, milestones).
  • Integración con Kubernetes y despliegues continuos.

Instalación en Docker

Requisitos mínimos

  • CPU: 2 cores (recomendado 4+).
  • RAM: 4 GB mínimo (8 GB recomendado).
  • Disco: depende del uso de repositorios y artefactos.
  • Docker Engine actualizado.

Estructura de volúmenes

  • /etc/gitlab → configuración (gitlab.rb).
  • /var/log/gitlab → logs.
  • /var/opt/gitlab → datos (repos, uploads, registry).

Configuración básica

  • URL externa (external_url) para acceso web.
  • Puertos HTTP/HTTPS y SSH.
  • SMTP para notificaciones.
  • Backups programados y retención.

Ejemplo de despliegue con Docker

docker run

docker run -d \
	--name gitlab \
	--restart always \
	--hostname gitlab.example.com \
	-p 80:80 \
	-p 443:443 \
	-p 22:22 \
	-v /srv/gitlab/config:/etc/gitlab \
	-v /srv/gitlab/logs:/var/log/gitlab \
	-v /srv/gitlab/data:/var/opt/gitlab \
	gitlab/gitlab-ee:latest

`

Networking y acceso

  • Configurar DNS para external_url.
  • Reverse proxy opcional (NGINX, Traefik).
  • Certificados TLS con Let’s Encrypt o propios.
  • Acceso SSH para Git sobre el puerto configurado.

CI/CD y Runners

  • GitLab Runner para ejecutar pipelines.
  • Tipos de runners:
    • Shell
    • Docker
    • Kubernetes
  • Variables de entorno y secretos protegidos.
  • Caché y artefactos para acelerar builds.

Seguridad y buenas prácticas

  • Limitar acceso SSH y usar claves.
  • Activar 2FA para usuarios.
  • Escaneo de dependencias y código.
  • Separar entornos (prod, staging).
  • Actualizar imágenes y backups frecuentes.

Mantenimiento

  • Backups automáticos y pruebas de restauración.
  • Monitoreo de recursos (CPU, RAM, disco).
  • Limpieza de artefactos antiguos.
  • Actualizaciones planificadas de versión.

gitlab — conceptos avanzados y temas complementarios

Arquitectura interna

  • Omnibus GitLab como distribución empaquetada:
    • Incluye PostgreSQL, Redis, NGINX, Sidekiq y Gitaly.
  • Gitaly Cluster:
    • Escalado horizontal de repositorios Git.
    • Alta disponibilidad para grandes volúmenes de repos.
  • Sidekiq:
    • Procesamiento asíncrono (pipelines, emails, webhooks).
    • Colas críticas vs no críticas.

Alta disponibilidad (HA)

  • Separación de servicios:
    • Base de datos PostgreSQL externa.
    • Redis en modo cluster o sentinel.
    • Balanceador de carga (HAProxy / NGINX).
  • Escenarios:
    • GitLab multi-node.
    • GitLab Geo (replicación entre regiones).

GitLab Geo

  • Replicación read-only de repositorios y artefactos.
  • Uso principal:
    • Equipos distribuidos geográficamente.
    • Reducción de latencia.
    • Recuperación ante desastres (DR).
  • Sincronización:
    • Repos Git.
    • LFS, uploads y artifacts.

Gestión de usuarios y permisos

  • Roles:
    • Guest, Reporter, Developer, Maintainer, Owner.
  • Grupos y subgrupos:
    • Herencia de permisos.
    • Estructuración organizacional.
  • Integración:
    • LDAP / Active Directory.
    • OAuth (GitHub, Google, etc.).

Gestión de secretos

  • CI/CD Variables:
    • Variables protegidas y enmascaradas.
  • Integración con gestores externos:
  • Buenas prácticas:
    • Nunca versionar secretos.
    • Rotación periódica.

GitLab Container Registry

  • Registro privado integrado.
  • Versionado de imágenes.
  • Limpieza automática (retention policies).
  • Integración directa con pipelines CI/CD.

GitLab Package Registry

  • Soporte para:
    • npm
    • Maven
    • PyPI
    • NuGet
    • Composer
  • Uso como registry interno corporativo.
  • Control de versiones y permisos.

Seguridad y cumplimiento (DevSecOps)

  • Secure Stage:
    • SAST (Static Application Security Testing).
    • DAST (Dynamic Application Security Testing).
    • Dependency Scanning.
    • Container Scanning.
  • Compliance:
    • Auditoría de eventos.
    • Policies de seguridad.
    • Approval rules en Merge Requests.

Merge Requests avanzados

  • Approval rules:
    • Reglas por rama o tipo de cambio.
  • Code Owners:
    • Revisión obligatoria por responsables.
  • Pipelines obligatorios antes de merge.
  • Squash, rebase y merge strategies.

GitOps con GitLab

  • Infraestructura como código (IaC).
  • Integración con:
  • Repos declarativos como fuente de verdad.
  • Deployments automáticos desde pipelines.

Observabilidad y monitoreo

  • Métricas internas:
    • Prometheus integrado.
  • Logs centralizados.
  • Alertas por rendimiento y errores.
  • Monitoreo de pipelines y runners.

Backups y Disaster Recovery

  • Backups automáticos:
    • Repositorios.
    • Base de datos.
    • Artefactos y uploads.
  • Estrategias:
    • Snapshot de volúmenes.
    • Backups offsite.
  • Pruebas periódicas de restore.

Performance y optimización

  • Ajuste de Sidekiq workers.
  • Limpieza de artefactos y pipelines antiguos.
  • Uso de object storage (S3, GCS, Azure Blob).
  • Separación de carga CI/CD.

Integraciones externas

  • Webhooks para eventos Git.
  • Integración con:
    • Slack
    • Jira
    • Kubernetes clusters
  • APIs REST y GraphQL.

Licencias y ediciones

  • Community Edition (CE):
    • Open Source.
  • Enterprise Edition (EE):
    • Funcionalidades avanzadas (security, compliance, HA).
  • Modelo de licenciamiento por usuarios.

Estrategias de escalado

  • Vertical:
    • Aumentar recursos del nodo.
  • Horizontal:
    • Separar servicios.
    • Añadir runners.
  • Cloud-native:
    • GitLab + Kubernetes.

Roadmap y evolución

  • Enfoque en:
    • DevSecOps unificado.
    • Automatización end-to-end.
    • Integración profunda con cloud providers.
  • Reducción de dependencia de herramientas externas.

gitlab — recursos en la red (2025)

Documentación oficial

  • GitLab Docs — Documentación principal y referencia de producto: instalación, CI/CD, administración de instancias Self-Managed, comandos Git, autenticación, runners, seguridad y más.
  • Tutoriales guiados en la documentación — Recorridos paso a paso por funcionalidades clave como planificación de trabajo, pipelines, despliegues, seguridad y GitOps.
  • Tutoriales (entrada alternativa) — Guías para integraciones y funcionalidades específicas.

Recursos de aprendizaje y formación

  • Recursos oficiales de GitLab — Centro de recursos con blogs, demostraciones, casos de uso, eventos, newsletters, prácticas recomendadas y comunidad.
  • GitLab University — Cursos y rutas de aprendizaje con certificaciones para dominar GitLab y prácticas DevSecOps.
  • LinkedIn Learning — GitLab — Formaciones sobre uso de GitLab, CI/CD y colaboración DevOps (actualizadas a 2025).

Comunidad y participación

  • Comunidad GitLab — Foros, Discord, programas de co-creación, eventos y contribución al proyecto.
  • GitLab Hackathon — Eventos periódicos para contribuir a código, documentación y diseño.

Integración en plataformas externas

Ayuda y soporte general

Noticias y estado de la plataforma

Recursos comunitarios adicionales (no oficiales)

Enlaces útiles agrupados (obsidian)

gitlab — casos de uso y ejemplos de código

  • devops
  • ci-cd
  • docker
  • kubernetes
  • terraform

CI/CD básico para aplicaciones

  • Automatizar build, test y deploy en cada push.
  • Uso típico en proyectos backend, frontend y monorepos.
  • Beneficios:
    • Feedback rápido.
    • Menos errores manuales.
    • Entornos reproducibles.

Ejemplo .gitlab-ci.yml mínimo

stages:
	- build
	- test

build_app:
	stage: build
	script:
		- echo "Building app"
		- npm install
		- npm run build

test_app:
	stage: test
	script:
		- echo "Running tests"
		- npm test

`

Despliegue con Docker

  • Construcción de imágenes Docker en pipelines.
  • Push a GitLab Container Registry.
  • Base para flujos GitOps y Kubernetes.

Build y push de imagen Docker

stages:
	- docker

docker_build:
	image: docker:latest
	services:
		- docker:dind
	stage: docker
	variables:
		DOCKER_TLS_CERTDIR: ""
	script:
		- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
		- docker build -t $CI_REGISTRY_IMAGE:latest .
		- docker push $CI_REGISTRY_IMAGE:latest

Despliegue continuo en Kubernetes

  • Uso de kubectl desde GitLab Runner.
  • Ideal para entornos staging y producción.
  • Integración con clusters registrados en GitLab.

Deploy a Kubernetes

deploy_prod:
	stage: deploy
	image: bitnami/kubectl:latest
	script:
		- kubectl apply -f k8s/deployment.yaml
	environment:
		name: production
		-url: https://app.example.com

Infraestructura como código (IaC)

  • Automatizar provisión de infraestructura.
  • Integración nativa con Terraform.
  • Control de cambios mediante Merge Requests.

Pipeline con Terraform

stages:
	- validate
	- apply

terraform_validate:
	image: hashicorp/terraform:latest
	stage: validate
	script:
		- terraform init
		- terraform validate

terraform_apply:
	image: hashicorp/terraform:latest
	stage: apply
	when: manual
	script:
		- terraform apply -auto-approve

GitOps

  • El repositorio como fuente de verdad.
  • Cambios declarativos para infraestructura y aplicaciones.
  • Compatible con ArgoCD y Helm.

Ejemplo de repositorio GitOps

repo-gitops/
	├── apps/
	│	├── backend/
	│	│	└── deployment.yaml
	│	└── frontend/
	│		└── deployment.yaml
	└── infrastructure/
		└── namespaces.yaml

Automatización de versiones y releases

  • Generación automática de tags y releases.
  • Changelog controlado por commits.
  • Integración con semantic versioning.

Crear release desde pipeline

release_job:
	stage: deploy
	image: registry.gitlab.com/gitlab-org/release-cli:latest
	script:
		- echo "Creating release"
	release:
		tag_name: v1.0.0
		name: "Release v1.0.0"
		description: "Primera versión estable"

Seguridad (DevSecOps)

  • Escaneo automático de código y dependencias.
  • Detección temprana de vulnerabilidades.
  • Cumplimiento de políticas de seguridad.

SAST básico

include:
	- template: Security/SAST.gitlab-ci.yml

Automatización con Webhooks

  • Integrar GitLab con servicios externos.
  • Notificaciones y acciones basadas en eventos.
  • Uso común con Slack, APIs internas y bots.

Ejemplo de payload procesado

app.post("/gitlab-webhook", (req, res) => {
	const event = req.headers["x-gitlab-event"];
	console.log("Evento recibido:", event);
	res.status(200).send("OK");
});

Gestión de entornos

  • Entornos dinámicos por branch.
  • Review Apps para validación rápida.
  • Eliminación automática tras merge.

Review App

review_app:
	stage: deploy
	script:
		- echo "Deploy review app"
	environment:
		name: review/$CI_COMMIT_REF_NAME
		on_stop: stop_review

stop_review:
	stage: deploy
	script:
		- echo "Stop review app"
	when: manual
	environment:
		name: review/$CI_COMMIT_REF_NAME
		action: stop

Casos de uso organizacionales

  • Empresas con requisitos self-hosted.
  • Equipos que buscan una única herramienta DevOps.
  • Organizaciones con políticas estrictas de seguridad y compliance.
  • Escenarios de multi-cloud y hybrid cloud.