Volver

Pipeline CI/CD Self-hosted

Desafío y Solución

Diseñé e implementé un pipeline de CI/CD completo sobre infraestructura self-hosted, conectando GitHub Actions, Terraform y Kubernetes. El flujo construye y publica una API en FastAPI, provisiona un repositorio ECR mediante Floci y actualiza el clúster con un patrón GitOps, sin necesidad de una cuenta AWS real.

Clúster Kubernetes instalado con kubeadm sobre Ubuntu Server y Flannel como CNI.
API FastAPI empaquetada en Docker y desplegada con imágenes versionadas por commit.
Infraestructura como código con Terraform y estado remoto en un S3 emulado.
Automatización end-to-end con GitHub Actions y un self-hosted runner.

Arquitectura del Pipeline

01

Push a main

GitHub activa el workflow.

v
02

Build Docker

El runner crea una imagen con el hash del commit.

v
03

Terraform apply

Asegura el ECR emulado y su estado remoto.

v
04

Push al ECR

Publica la imagen versionada en el registry.

v
05

Deploy GitOps

Actualiza el manifiesto, aplica kubectl y valida el rollout.

v
06

Commit [skip ci]

Git conserva el estado desplegado sin crear loops.

Decisiones Clave

01

GitOps como fuente única de verdad: el manifiesto actualizado vuelve al repositorio.

02

Backend remoto S3 emulado para conservar el estado de Terraform entre ejecuciones.

03

Tags únicos por commit en lugar de latest para activar despliegues deterministas.

04

Credenciales fuera del control de versiones mediante variables y configuración externa.

Stack Tecnológico

KubernetesTerraformGitHub ActionsDockerFastAPIUbuntu Server