CodeBuild
📘 ¿Qué es AWS CodeBuild?
AWS CodeBuild es un servicio gestionado de integración continua (CI) que compila el código fuente, realiza pruebas y produce artefactos listos para el despliegue.
✅ No necesitas gestionar servidores ni escalar infraestructura. CodeBuild lo hace automáticamente.
🎯 Casos de uso
-
Compilar y testear aplicaciones automáticamente tras cada push
-
Construir imágenes Docker y subirlas a ECR
-
Ejecutar pruebas unitarias, de integración o seguridad
-
Generar artefactos para CodeDeploy, S3 o Elastic Beanstalk
-
Ejecutar scripts como parte de pipelines CodePipeline o Jenkins
⚙️ ¿Cómo funciona?
-
Fuente de código: GitHub, CodeCommit, Bitbucket, S3, etc.
-
buildspec.yml: archivo YAML que define las fases del proceso de compilación.
-
Entorno de compilación: imagen de Docker administrada o personalizada.
-
Salida: artefactos como archivos
.zip, imágenes Docker, binarios, etc.
📦 Estructura del archivo buildspec.yml
version: 0.2
phases:
install:
runtime-versions:
nodejs: 18
commands:
- echo "Instalando dependencias..."
pre_build:
commands:
- echo "Fase pre-build"
build:
commands:
- npm install
- npm run build
post_build:
commands:
- echo "Compilación finalizada"
artifacts:
files:
- dist/**/*
discard-paths: yes
🔧 También se puede definir desde la consola si no lo tienes en el repositorio.
🧩 Componentes clave de CodeBuild
| Componente | Descripción |
|---|---|
| Project | La unidad principal de CodeBuild: fuente + entorno + configuración |
| buildspec.yml | Script que define lo que hace el proyecto |
| Entorno de compilación | Imagen Docker gestionada o personalizada (Linux, Windows, ARM) |
| Compute Type | Tamaño de instancia: BUILD_GENERAL1_SMALL, MEDIUM, LARGE, etc. |
| Timeout | Máximo tiempo de ejecución de una build |
| Logs | CloudWatch Logs o S3 |
🔐 Seguridad en CodeBuild
| Área | Implementación AWS |
|---|---|
| Acceso a servicios | Usar un IAM Role de ejecución para el proyecto |
| Código fuente | Puede estar en repos privados (requiere autenticación) |
| Secrets | Integración con Secrets Manager y SSM Parameter Store |
| Logging | Logs cifrados en S3 o CloudWatch |
🧰 Integraciones comunes
| Servicio | Integración |
|---|---|
| CodeCommit/GitHub/GitLab | Repositorio fuente |
| S3 | Almacenamiento de artefactos o código |
| ECR | Subida de imágenes Docker compiladas |
| CloudWatch | Logs de compilación y métricas |
| CodePipeline | Parte de un pipeline completo CI/CD |
| Secrets Manager | Gestión de secretos durante la build |
| CodeDeploy | Despliegue de artefactos construidos |
🧪 Ejemplo: Build de una imagen Docker
version: 0.2
phases:
pre_build:
commands:
- echo "Iniciando sesión en ECR..."
- aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com
build:
commands:
- echo "Construyendo imagen..."
- docker build -t miapp .
- docker tag miapp:latest 123456789012.dkr.ecr.us-east-1.amazonaws.com/miapp:latest
post_build:
commands:
- echo "Subiendo imagen a ECR..."
- docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/miapp:latest
💲 Precios
-
Cobro por minuto de compilación, según tipo de instancia.
-
Nivel gratuito incluye 100 minutos al mes por 12 meses.
-
Ahorro posible con entornos reutilizables (build cache).
📈 Métricas en CloudWatch
| Métrica | Descripción |
|---|---|
BuildDuration | Tiempo total de ejecución |
BuildsFailed | Número de compilaciones fallidas |
BuildsSucceeded | Número de compilaciones exitosas |
🧠 Preguntas tipo certificación
-
¿Dónde se define el flujo de compilación en CodeBuild?
- ✅ En
buildspec.yml
- ✅ En
-
¿CodeBuild puede usar imágenes personalizadas?
- ✅ Sí, desde ECR o DockerHub
-
¿Puede CodeBuild lanzar despliegues automáticamente?
- ✅ Sí, al integrarlo con CodeDeploy o CodePipeline
-
¿Cómo se puede evitar recompilar dependencias comunes?
- ✅ Usar build cache (caché de capas)
-
¿Cómo se accede a secretos dentro del entorno de compilación?
- ✅ Mediante Secrets Manager o SSM Parameter Store
📚 Recursos útiles
✅ Buenas prácticas
-
Usa
buildspec.ymlversionado en tu repositorio -
Habilita cacheado si tus builds toman mucho tiempo
-
Centraliza los logs en CloudWatch para auditoría
-
Integra con Secrets Manager para evitar credenciales hardcoded
-
Usa roles con permisos mínimos necesarios (principio de mínimo privilegio)
-
Reutiliza entornos con imágenes propias si necesitas dependencias preinstaladas