Contents
Introducción a CI/CD y CircleCI
En el mundo del desarrollo de software moderno, la integración continua (CI) y el despliegue continuo (CD) se han convertido en pilares esenciales para reducir los errores, mejorar la calidad del código y acelerar la entrega de valor al usuario final. CI/CD permite a los equipos automatizar pruebas, builds y despliegues, asegurando que cada cambio pase por un pipeline consistente y robusto.
CircleCI es una de las plataformas líderes para implementar estos flujos de trabajo. Con su arquitectura basada en contenedores y su potente sistema de configuración YAML, facilita la definición de pipelines escalables, eficientes y fáciles de mantener.
Ventajas de Integrar CI/CD con CircleCI
- Velocidad y Paralelismo: Ejecuta múltiples jobs en paralelo, reduciendo el tiempo total del pipeline.
- Escalabilidad: Soporta contenedores Linux, macOS y Windows, ajustando los recursos según la demanda.
- Configuración como Código: Usa un único archivo
.circleci/config.yml
versionado junto al repositorio. - Integraciones: Conecta con GitHub, Bitbucket, AWS, Docker Hub, Google Cloud y otras plataformas populares.
- Rapidez de Adopción: Interfaz intuitiva, plantillas prediseñadas y amplios ejemplos en documentación oficial.
Conceptos Clave de CircleCI
Jobs
Son las unidades de trabajo que ejecutan comandos (tests, build, despliegue). Cada job corre en un entorno aislado.
Workflows
Orquestan la ejecución de jobs, definiendo dependencias y condiciones (ejecutar job B solo si A ha pasado).
Orbs
Paquetes reutilizables de configuración YAML y comandos que simplifican la integración con servicios externos.
Primeros Pasos: Configuración Inicial
- Crear una cuenta en CircleCI y vincular tu repositorio en GitHub o Bitbucket.
- Agregar el archivo
.circleci/config.yml
en la raíz del proyecto. - Seleccionar la rama principal (por ejemplo
main
omaster
). - Correr el primer pipeline para validar la conexión.
Ejemplo Básico de config.yml
version: 2.1
jobs:
build:
docker:
- image: cimg/node:14.17
steps:
- checkout
- run: npm install
- run: npm test
workflows:
build_and_test:
jobs:
- build
En este ejemplo sencillo, CircleCI utiliza la imagen oficial de Node.js, instala dependencias y ejecuta los tests.
Estructura Avanzada de Pipelines
Uso de Múltiples Jobs y Dependencias
Para proyectos complejos, separamos build, test y deploy en jobs independientes y encadenados mediante workflows:
version: 2.1
jobs:
build:
docker:
- image: cimg/python:3.9
steps:
- checkout
- run: pip install -r requirements.txt
test:
docker:
- image: cimg/python:3.9
steps:
- checkout
- run: pytest
deploy:
docker:
- image: cimg/python:3.9
steps:
- checkout
- run: ./deploy-script.sh
workflows:
pipeline:
jobs:
- build
- test:
requires:
- build
- deploy:
requires:
- test
filters:
branches:
only: main
Paralelismo y Recursos
CircleCI permite dividir un job en múltiples parallelism nodes para acelerar tests unitarios o integración:
- Define
parallelism: 4
en el job. - Cada nodo ejecuta una fracción de test.
Integración con Docker y Caching
Construir y Publicar Imágenes Docker
Para proyectos basados en Docker, podemos construir la imagen y subirla a Docker Hub de forma automática:
jobs:
docker_build_and_push:
docker:
- image: cimg/docker:20.10
steps:
- checkout
- setup_remote_docker
- run:
name: Build image
command: docker build -t usuario/app:CIRCLE_SHA1 .
- run:
name: Push image
command:
echo DOCKERHUB_PASS docker login -u DOCKERHUB_USER --password-stdin
docker push usuario/app:CIRCLE_SHA1
Uso de Caché para Dependencias
Reducir tiempos de instalación guardando dependencias en cache:
steps:
- restore_cache:
keys:
- v1-deps-{{ checksum package-lock.json }}
- run: npm ci
- save_cache:
paths:
- node_modules
key: v1-deps-{{ checksum package-lock.json }}
Despliegue Automatizado en la Nube
CircleCI ofrece integraciones nativas con AWS, Google Cloud y Azure. A continuación, un ejemplo simplificado de despliegue a AWS Elastic Beanstalk:
jobs:
deploy_eb:
docker:
- image: cimg/python:3.9
steps:
- checkout
- run:
name: Install EB CLI
command:
pip install awsebcli
- run:
name: Deploy to Elastic Beanstalk
command:
eb init my-app --region us-east-1
eb deploy production
Pruebas, Métricas y Reporting
- JUnit, coverage: Publica reportes como artefactos y visualízalos en la interfaz.
- Insights Dashboard: Monitoriza históricos de flakiness, tiempos de ejecución y éxitos (CircleCI Insights).
- Notificaciones: Integra con Slack, Microsoft Teams o correo electrónico para informar del estado del pipeline.
Buenas Prácticas y Consejos
- Modulariza tu Configuración: Usa orbs oficiales y crea orbs privadas para comandos repetitivos.
- Evita Jobs Monolíticos: Separa responsabilidades para agilizar el diagnóstico de fallos.
- Control de Versiones: Bloquea versiones de Docker images y dependencias críticas.
- Seguridad: Guarda secretos en
CircleCI Environment Variables
o Contexts y no en el repositorio. - Revisiones Periódicas: Ajusta paralelismo y recursos según el tamaño y evolución del equipo.
Recursos Adicionales
Recurso | Descripción |
---|---|
Documentación Oficial CircleCI | Guías, ejemplos y referencias de configuración. |
CI/CD en Wikipedia | Conceptos generales y evolución del Continuous Delivery. |
CircleCI Insights | Panel de métricas para pipelines. |
|
Acepto donaciones de BAT's mediante el navegador Brave 🙂 |