JPO : Webinar d'information sur nos formations → RDV mardi à 17h30.

¿Qué es CircleCI? Introducción a la Integración Continua Simplificada

CircleCI es una plataforma de integración y entrega continua (CI/CD). Fundada en 2011 y valorada en 1,7 mil millones de dólares en 2021, esta solución es hoy en día una de las plataformas de CI/CD más populares del mundo.

CircleCI permite a los desarrolladores construir, probar y desplegar su código de manera rápida y confiable. Hoy en día, la empresa atiende a miles de organizaciones en todo el mundo, desde startups hasta grandes empresas, ofreciéndoles flexibilidad y potencia adaptadas a todo tipo de proyectos.

¿Pero qué es el CI/CD?

CI/CD para «Continuous Integration / Continuous Delivery» (integración continua / entrega continua) es una práctica de desarrollo que busca automatizar las etapas del ciclo de vida de una aplicación. Permite reducir los errores humanos, acelerar los plazos de entrega y mejorar la calidad de las aplicaciones.

  • La integración continua (CI) consiste en integrar regularmente el código escrito por los diferentes miembros de un equipo en un repositorio centralizado. Cada modificación se prueba automáticamente para asegurarse de que no introduce errores o incompatibilidades.
  • La entrega continua (CD) automatiza la entrega del código validado, sin intervención manual.

Funciones clave

CircleCI ofrece una amplia gama de herramientas e integraciones diseñadas para automatizar, optimizar y asegurar el proceso de desarrollo, garantizando al mismo tiempo una entrega continua eficaz.

Flujos de trabajo flexibles

Permite orquestar pipelines complejos con dependencias condicionales. Esto optimiza las pruebas y los despliegues, representando un ahorro de tiempo.

Ejecución en la nube

Ofrece entornos en la nube escalables a través de máquinas virtuales o Docker.

Paralelización de builds

Divide las tareas para acelerar las pruebas y las builds para un tiempo de procesamiento reducido.

Soporte multi-entorno

Admite diversos lenguajes, frameworks y entornos.

Automatización del despliegue

Integración con herramientas como Kubernetes y Terraform.

Cacheo inteligente

Las dependencias se almacenan en caché para evitar su recarga.

Seguridad y conformidad

Cifrado de datos, permisos granulares y auditoría de pipelines.

Pruebas continuas e informes

Integración con herramientas de prueba y generación de informes detallados.

Supervisión e insights

Paneles analíticos para seguir el rendimiento de los pipelines.

Integración con Git

Compatible con GitHub, GitLab y Bitbucket para automatizar los workflows CI/CD.

Implementación de CircleCI

La configuración inicial es sencilla y rápida, además de ser compatible con GitHub, GitLab o Bitbucket.

1. Antes de la instalación

  • Antes que nada, es obviamente necesario tener una cuenta en una plataforma de gestión de código compatible (GitHub, GitLab o Bitbucket). Así como una cuenta de CircleCI conectada al repositorio que estás utilizando.
  • Es necesario tener un archivo de configuración config.yml en una carpeta .circleci en la raíz del repositorio.

2. Registro del proyecto

Desde el sitio de CircleCI, concede los permisos solicitados para que pueda acceder a tus repositorios. Para agregar un nuevo proyecto, haz clic en «Set up project», como muestra la captura a continuación:

Elige un método de integración, en este ejemplo, será «Fast».

Un archivo de configuración se crea automáticamente.

3. El archivo de configuración

En nuestro ejemplo, el archivo de configuración creado es el siguiente:

version: 2.1
orbs:
  python: circleci/python@2.1.1
jobs:
  build-and-test:
    docker:
      - image: cimg/python:3.12
    steps:
      - checkout
      - python/install-packages:
          pkg-manager: pip
      - run:
          name: Run tests
          command: pytest
workflows:
  sample
    jobs:
      - build-and-test
  • La primera línea se refiere a la versión del esquema utilizado por CircleCI.
  • Las orbs son paquetes reutilizables que contienen configuraciones CircleCI predefinidas. Permiten integrar rápidamente herramientas o lenguajes específicos sin tener que reescribir la configuración.
  • Los jobs son unidades de trabajo. Contienen una serie de pasos, llamados steps, que se ejecutan en un entorno específico. En este caso, el trabajo build-and-test contiene un elemento docker que define el entorno de ejecución del trabajo (aquí, se trata de una imagen Docker proporcionada por CircleCI), y un elemento step, descrito a continuación.
  • Los pasos (steps) definen las acciones a ejecutar en el marco de un trabajo:
    • checkout: extrae el código fuente desde el repositorio para hacerlo accesible en el entorno CircleCI.
    • python/install-packages: Este comando instala las dependencias requeridas, usando el gestor de paquetes pip
    • run: ejecuta un comando dentro del trabajo. Pytest se usa aquí para ejecutar pruebas unitarias.
  • Finalmente, los workflows son un conjunto de trabajos ejecutados según un orden definido:
    • sample: nombre del flujo de trabajo
    • jobs: lista de trabajos a ejecutar en el flujo de trabajo

Podemos eventualmente realizar las siguientes modificaciones:

  • Para evitar la reinstalación de los paquetes en cada ejecución (y por lo tanto, ganar tiempo de build), se puede implementar una gestión del caché:
- restore_cache:
   keys:
     - v1-dependencies-{{ checksum "requirements.txt" }}
- python/install-packages:
   pkg-manager: pip
- save_cache:
   key: v1-dependencies-{{ checksum "requirements.txt" }}
   paths:
     - ~/.cache/pip

Así, CircleCI intentará restaurar un caché existente basado en el hash del archivo requirements.txt. Si está disponible, serán recuperadas, si no, serán instaladas a través de pip.

  • Cuando la aplicación pase a producción, podemos agregar un despliegue automatizado después de una prueba exitosa:
workflows:
 version: 2
 deploy:
   jobs:
     - build-and-test
     - deploy:
         requires:
           - build-and-test
         filters:
           branches:
             only: main

4. Integración en la nube

CircleCI se integra fácilmente con infraestructuras en la nube, ya sea Azure, AWS o GCP. Aquí, vamos a realizar una integración AWS.

Para simplificar, conviene añadir en un primer momento un orb, que es el siguiente:

aws-cli: circleci/aws-cli@4.1.1

Así como un job, que se parecerá al ejemplo a continuación:

deploy-to-aws:
   docker:
     - image: cimg/python:3.12
   steps:
     - attach_workspace
         at: /home/circleci/project
     - aws-cli/setup
     - run:
         name: Configure AWS credentials
         command: |
           aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID
           aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY
           aws configure set default.region $AWS_DEFAULT_REGION
     - run:
         name: Deploy application to S3
         command: |
           aws s3 cp /home/circleci/project/ s3://$AWS_S3_BUCKET_NAME --recursive
     - run:
         name: Clear AWS credentials (for security)
         command: rm -f ~/.aws/credentials

Las variables de entorno presentes (reconocibles por el signo $) deben crearse previamente en los parámetros de CircleCI.

Buenas prácticas de CI/CD

CircleCI recomienda varias buenas prácticas para optimizar los pipelines de CI/CD.

El proceso de CI/CD debe considerarse esencial para cualquier equipo de desarrollo.

Trabajar con procesos manuales que ralentizan el desarrollo.

Reutilizar las configuraciones y implementar estrategias de caché.

Duplicar las configuraciones y descargar sistemáticamente las dependencias en cada build.

Utilizar las orbs de CircleCI para automatizar tareas repetitivas.

Escribir manualmente configuraciones redundantes para cada proyecto.

Proteger los pipelines usando variables de entorno privadas, múltiples contextos y controles administrativos.

Almacenar información sensible en los archivos de configuración del proyecto.

Mantener una alta cobertura de pruebas integrando herramientas asociadas (Codecov, Cypress o SonarCloud por ejemplo).

Desplegar código sin pruebas o sin verificar la cobertura de pruebas.

Utilizar notificaciones automatizadas con Slack para seguir el estado de los pipelines y reaccionar rápidamente a los fallos.

No implementar notificaciones, lo que puede causar retrasos en la detección de problemas.

Utilizar orbs populares como Node, AWS-CLI y Python para facilitar las configuraciones y el despliegue en la nube.

Configurar manualmente cada herramienta, lo que puede causar errores e incoherencias.

Analizar las métricas de los pipelines para identificar cuellos de botella y mejorar la eficiencia de los workflows.

No supervisar el rendimiento de los pipelines, lo que puede ralentizar los despliegues.

Conclusión

CircleCI es una solución poderosa y flexible que permite automatizar y optimizar los procesos de CI/CD.

¿No está disponible?

Déjenos su dirección de correo electrónico para que podamos enviarle los nuevos artículos cuando se publiquen.