{"id":177768,"date":"2025-02-26T07:30:00","date_gmt":"2025-02-26T06:30:00","guid":{"rendered":"https:\/\/liora.io\/es\/?p=177768"},"modified":"2026-08-24T19:13:51","modified_gmt":"2026-08-24T18:13:51","slug":"que-es-circleci","status":"publish","type":"post","link":"https:\/\/liora.io\/es\/que-es-circleci","title":{"rendered":"\u00bfQu\u00e9 es CircleCI? Introducci\u00f3n a la Integraci\u00f3n Continua Simplificada"},"content":{"rendered":"\n<p><strong>CircleCI es una plataforma de integraci\u00f3n y entrega continua (CI\/CD). Fundada en 2011 y valorada en 1,7 mil millones de d\u00f3lares en 2021, esta soluci\u00f3n es hoy en d\u00eda una de las plataformas de CI\/CD m\u00e1s populares del mundo.<\/strong><\/p>\n\n\n<p>CircleCI permite a los desarrolladores construir, probar y desplegar su c\u00f3digo de manera r\u00e1pida y confiable. Hoy en d\u00eda, la empresa atiende a miles de organizaciones en todo el mundo, desde startups hasta grandes empresas, ofreci\u00e9ndoles flexibilidad y potencia adaptadas a todo tipo de proyectos.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"pero-que-es-el-ci-cd\">\u00bfPero qu\u00e9 es el CI\/CD?<\/h2>\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\" style=\"width:512px;max-width:100%;margin-top:32px;margin-right:auto;margin-bottom:32px;margin-left:auto\"><img alt=\"Ilustraci\u00f3n sobre \u00bfPero qu\u00e9 es el CI\/CD?\" decoding=\"async\" height=\"512\" loading=\"lazy\" sizes=\"(max-width: 512px) 100vw, 512px\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image3-1.webp\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image3-1.webp 512w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image3-1-300x300.webp 300w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image3-1-150x150.webp 150w\" style=\"width:100%;max-width:512px;height:auto\" width=\"512\"\/><\/figure>\n\n\n<p>CI\/CD para \u00ab<strong>Continuous Integration \/ Continuous Delivery<\/strong>\u00bb (integraci\u00f3n continua \/ entrega continua) es una pr\u00e1ctica de desarrollo que busca automatizar las etapas del ciclo de vida de una aplicaci\u00f3n. Permite reducir los errores humanos, acelerar los plazos de entrega y mejorar la calidad de las aplicaciones.<\/p>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>La integraci\u00f3n continua (CI)<\/strong> consiste en integrar regularmente el c\u00f3digo escrito por los diferentes miembros de un equipo en un repositorio centralizado. Cada modificaci\u00f3n se prueba autom\u00e1ticamente para asegurarse de que no introduce errores o incompatibilidades.<\/li>\n<li><strong>La entrega continua (CD)<\/strong> automatiza la entrega del c\u00f3digo validado, sin intervenci\u00f3n manual.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center wp-container-core-buttons-is-layout-5ee10de4\" style=\"margin-top:32px;margin-bottom:32px\"><div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/liora.io\/en\/courses\/cloud-dev\/devops-engineer\">Aprofundizar en CI\/CD<\/a><\/div><\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"funciones-clave\">Funciones clave<\/h2>\n\n\n<p>CircleCI ofrece una amplia gama de herramientas e integraciones dise\u00f1adas para automatizar, optimizar y asegurar el proceso de desarrollo, garantizando al mismo tiempo una entrega continua eficaz.<\/p>\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\" style=\"width:512px;max-width:100%;margin-top:32px;margin-right:auto;margin-bottom:32px;margin-left:auto\"><img alt=\"Ilustraci\u00f3n sobre Funciones clave\" decoding=\"async\" height=\"512\" loading=\"lazy\" sizes=\"(max-width: 512px) 100vw, 512px\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image12.webp\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image12.webp 512w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image12-300x300.webp 300w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image12-150x150.webp 150w\" style=\"width:100%;max-width:512px;height:auto\" width=\"512\"\/><\/figure>\n\n\n<h3 class=\"wp-block-heading\" id=\"flujos-de-trabajo-flexibles\">Flujos de trabajo flexibles<\/h3>\n\n\n<p>Permite orquestar pipelines complejos con dependencias condicionales. Esto optimiza las pruebas y los despliegues, representando un ahorro de tiempo.<\/p>\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\" style=\"width:512px;max-width:100%;margin-top:32px;margin-right:auto;margin-bottom:32px;margin-left:auto\"><img alt=\"Ilustraci\u00f3n sobre Flujos de trabajo flexibles\" decoding=\"async\" height=\"512\" loading=\"lazy\" sizes=\"(max-width: 512px) 100vw, 512px\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image5-1.webp\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image5-1.webp 512w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image5-1-300x300.webp 300w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image5-1-150x150.webp 150w\" style=\"width:100%;max-width:512px;height:auto\" width=\"512\"\/><\/figure>\n\n\n<h3 class=\"wp-block-heading\" id=\"ejecucion-en-la-nube\">Ejecuci\u00f3n en la nube<\/h3>\n\n\n<p>Ofrece entornos en la nube escalables a trav\u00e9s de m\u00e1quinas virtuales o <a href=\"https:\/\/liora.io\/es\/docker-todo-que-saber\">Docker<\/a>.<\/p>\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\" style=\"width:512px;max-width:100%;margin-top:32px;margin-right:auto;margin-bottom:32px;margin-left:auto\"><img alt=\"Ilustraci\u00f3n sobre Ejecuci\u00f3n en la nube\" decoding=\"async\" height=\"512\" loading=\"lazy\" sizes=\"(max-width: 512px) 100vw, 512px\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image15.webp\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image15.webp 512w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image15-300x300.webp 300w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image15-150x150.webp 150w\" style=\"width:100%;max-width:512px;height:auto\" width=\"512\"\/><\/figure>\n\n\n<h3 class=\"wp-block-heading\" id=\"paralelizacion-de-builds\">Paralelizaci\u00f3n de builds<\/h3>\n\n\n<p>Divide las tareas para acelerar las pruebas y las builds para un tiempo de procesamiento reducido.<\/p>\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\" style=\"width:512px;max-width:100%;margin-top:32px;margin-right:auto;margin-bottom:32px;margin-left:auto\"><img alt=\"Ilustraci\u00f3n sobre Paralelizaci\u00f3n de builds\" decoding=\"async\" height=\"512\" loading=\"lazy\" sizes=\"(max-width: 512px) 100vw, 512px\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image14.webp\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image14.webp 512w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image14-300x300.webp 300w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image14-150x150.webp 150w\" style=\"width:100%;max-width:512px;height:auto\" width=\"512\"\/><\/figure>\n\n\n<h3 class=\"wp-block-heading\" id=\"soporte-multi-entorno\">Soporte multi-entorno<\/h3>\n\n\n<p>Admite <a href=\"https:\/\/liora.io\/es\/teoria-de-los-lenguajes-de-programacion\">diversos lenguajes<\/a>, frameworks y entornos.<\/p>\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\" style=\"width:512px;max-width:100%;margin-top:32px;margin-right:auto;margin-bottom:32px;margin-left:auto\"><img alt=\"Ilustraci\u00f3n sobre Soporte multi-entorno\" decoding=\"async\" height=\"512\" loading=\"lazy\" sizes=\"(max-width: 512px) 100vw, 512px\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image11.webp\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image11.webp 512w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image11-300x300.webp 300w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image11-150x150.webp 150w\" style=\"width:100%;max-width:512px;height:auto\" width=\"512\"\/><\/figure>\n\n\n<h3 class=\"wp-block-heading\" id=\"automatizacion-del-despliegue\">Automatizaci\u00f3n del despliegue<\/h3>\n\n\n<p>Integraci\u00f3n con herramientas como <a href=\"https:\/\/liora.io\/en\/courses\/cloud-dev\/cloud-engineer\">Kubernetes<\/a> y Terraform.<\/p>\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\" style=\"width:512px;max-width:100%;margin-top:32px;margin-right:auto;margin-bottom:32px;margin-left:auto\"><img alt=\"Ilustraci\u00f3n sobre Automatizaci\u00f3n del despliegue\" decoding=\"async\" height=\"512\" loading=\"lazy\" sizes=\"(max-width: 512px) 100vw, 512px\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image4-1.webp\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image4-1.webp 512w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image4-1-300x300.webp 300w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image4-1-150x150.webp 150w\" style=\"width:100%;max-width:512px;height:auto\" width=\"512\"\/><\/figure>\n\n\n<h3 class=\"wp-block-heading\" id=\"cacheo-inteligente\">Cacheo inteligente<\/h3>\n\n\n<p>Las dependencias se almacenan en cach\u00e9 para evitar su recarga.<\/p>\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\" style=\"width:512px;max-width:100%;margin-top:32px;margin-right:auto;margin-bottom:32px;margin-left:auto\"><img alt=\"Ilustraci\u00f3n sobre Cacheo inteligente\" decoding=\"async\" height=\"512\" loading=\"lazy\" sizes=\"(max-width: 512px) 100vw, 512px\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image7-1.webp\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image7-1.webp 512w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image7-1-300x300.webp 300w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image7-1-150x150.webp 150w\" style=\"width:100%;max-width:512px;height:auto\" width=\"512\"\/><\/figure>\n\n\n<h3 class=\"wp-block-heading\" id=\"seguridad-y-conformidad\">Seguridad y conformidad<\/h3>\n\n\n<p>Cifrado de datos, permisos granulares y auditor\u00eda de pipelines.<\/p>\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\" style=\"width:512px;max-width:100%;margin-top:32px;margin-right:auto;margin-bottom:32px;margin-left:auto\"><img alt=\"Ilustraci\u00f3n sobre Seguridad y conformidad\" decoding=\"async\" height=\"512\" loading=\"lazy\" sizes=\"(max-width: 512px) 100vw, 512px\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image9.webp\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image9.webp 512w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image9-300x300.webp 300w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image9-150x150.webp 150w\" style=\"width:100%;max-width:512px;height:auto\" width=\"512\"\/><\/figure>\n\n\n<h3 class=\"wp-block-heading\" id=\"pruebas-continuas-e-informes\">Pruebas continuas e informes<\/h3>\n\n\n<p>Integraci\u00f3n con herramientas de prueba y generaci\u00f3n de informes detallados.<\/p>\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\" style=\"width:512px;max-width:100%;margin-top:32px;margin-right:auto;margin-bottom:32px;margin-left:auto\"><img alt=\"Ilustraci\u00f3n sobre Pruebas continuas e informes\" decoding=\"async\" height=\"512\" loading=\"lazy\" sizes=\"(max-width: 512px) 100vw, 512px\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image6-1.webp\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image6-1.webp 512w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image6-1-300x300.webp 300w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image6-1-150x150.webp 150w\" style=\"width:100%;max-width:512px;height:auto\" width=\"512\"\/><\/figure>\n\n\n<h3 class=\"wp-block-heading\" id=\"supervision-e-insights\">Supervisi\u00f3n e insights<\/h3>\n\n\n<p>Paneles anal\u00edticos para seguir el rendimiento de los pipelines.<\/p>\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\" style=\"width:512px;max-width:100%;margin-top:32px;margin-right:auto;margin-bottom:32px;margin-left:auto\"><img alt=\"Ilustraci\u00f3n sobre Supervisi\u00f3n e insights\" decoding=\"async\" height=\"512\" loading=\"lazy\" sizes=\"(max-width: 512px) 100vw, 512px\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image8.webp\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image8.webp 512w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image8-300x300.webp 300w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image8-150x150.webp 150w\" style=\"width:100%;max-width:512px;height:auto\" width=\"512\"\/><\/figure>\n\n\n<h3 class=\"wp-block-heading\" id=\"integracion-con-git\">Integraci\u00f3n con Git<\/h3>\n\n\n<p>Compatible con <a href=\"https:\/\/liora.io\/en\/courses\/cloud-dev\/aws-solutions-architect\">GitHub<\/a>, <a href=\"https:\/\/liora.io\/es\/gitlab-todo-lo-que-hay-que-saber\">GitLab<\/a> y Bitbucket para automatizar los workflows CI\/CD.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"implementacion-de-circleci\">Implementaci\u00f3n de CircleCI<\/h2>\n\n\n<p>La configuraci\u00f3n inicial es sencilla y r\u00e1pida, adem\u00e1s de ser compatible con GitHub, GitLab o Bitbucket.<\/p>\n\n\n<h3 class=\"wp-block-heading\" id=\"1-antes-de-la-instalacion\">1. Antes de la instalaci\u00f3n<\/h3>\n\n\n<ul class=\"wp-block-list\">\n<li aria-level=\"1\">Antes que nada, es obviamente necesario tener una cuenta en una plataforma de gesti\u00f3n de c\u00f3digo compatible (<strong>GitHub, GitLab o Bitbucket<\/strong>). As\u00ed como una cuenta de CircleCI conectada al repositorio que est\u00e1s utilizando.<\/li>\n<li aria-level=\"1\">Es necesario tener un archivo de configuraci\u00f3n config.yml en una carpeta .circleci en la ra\u00edz del repositorio.<\/li>\n<\/ul>\n\n\n<h3 class=\"wp-block-heading\" id=\"2-registro-del-proyecto\">2. Registro del proyecto<\/h3>\n\n\n<p>Desde el sitio de CircleCI, concede los permisos solicitados para que pueda acceder a tus repositorios. Para agregar un nuevo proyecto, haz clic en \u00abSet up project\u00bb, como muestra la captura a continuaci\u00f3n:<\/p>\n\n\n<figure class=\"aligncenter is-resized size-full wp-block-image\" style=\"width:440px;max-width:100%;margin-top:32px;margin-right:auto;margin-bottom:32px;margin-left:auto\"><img alt=\"Ilustraci\u00f3n sobre 2. Registro del proyecto\" decoding=\"async\" height=\"128\" loading=\"lazy\" sizes=\"(max-width: 1277px) 100vw, 1277px\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image16.webp\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image16.webp 1277w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image16-300x30.webp 300w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image16-1024x103.webp 1024w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image16-768x77.webp 768w\" style=\"width:100%;max-width:748px;height:auto\" width=\"1277\"\/><\/figure>\n\n\n<p>Elige un m\u00e9todo de integraci\u00f3n, en este ejemplo, ser\u00e1 \u00abFast\u00bb.<\/p>\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\" style=\"width:438px;max-width:100%;margin-top:32px;margin-right:auto;margin-bottom:32px;margin-left:auto\"><img alt=\"Ilustraci\u00f3n sobre 2. Registro del proyecto\" decoding=\"async\" height=\"336\" loading=\"lazy\" sizes=\"(max-width: 438px) 100vw, 438px\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image10.webp\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image10.webp 438w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image10-300x230.webp 300w\" style=\"width:100%;max-width:438px;height:auto\" width=\"438\"\/><\/figure>\n\n\n<p>Un archivo de configuraci\u00f3n se crea autom\u00e1ticamente.<\/p>\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center wp-container-core-buttons-is-layout-5ee10de4\" style=\"margin-top:32px;margin-bottom:32px\"><div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/liora.io\/en\/courses\/cloud-dev\/cloud-engineer\">Aprender a gestionar un proyecto en CircleCI<\/a><\/div><\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"3-el-archivo-de-configuracion\">3. El archivo de configuraci\u00f3n<\/h3>\n\n\n<p>En nuestro ejemplo, el archivo de configuraci\u00f3n creado es el siguiente:<\/p>\n\n\n<pre class=\"wp-block-code\"><code>version: 2.1\norbs:\n \u00a0python: circleci\/python@2.1.1\njobs:\n \u00a0build-and-test:\n \u00a0\u00a0\u00a0docker:\n \u00a0\u00a0\u00a0\u00a0\u00a0- image: cimg\/python:3.12\n \u00a0\u00a0\u00a0steps:\n \u00a0\u00a0\u00a0\u00a0\u00a0- checkout\n \u00a0\u00a0\u00a0\u00a0\u00a0- python\/install-packages:\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0pkg-manager: pip\n \u00a0\u00a0\u00a0\u00a0\u00a0- run:\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name: Run tests\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0command: pytest\nworkflows:\n \u00a0sample:\u00a0\n \u00a0\u00a0\u00a0jobs:\n \u00a0\u00a0\u00a0\u00a0\u00a0- build-and-test<\/code><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li aria-level=\"1\">La primera l\u00ednea se refiere a la versi\u00f3n del esquema utilizado por CircleCI.<\/li>\n<li aria-level=\"1\">Las <strong>orbs<\/strong> son paquetes reutilizables que contienen configuraciones CircleCI predefinidas. Permiten integrar r\u00e1pidamente herramientas o lenguajes espec\u00edficos sin tener que reescribir la configuraci\u00f3n.<\/li>\n<li aria-level=\"1\">Los <strong>jobs<\/strong> son unidades de trabajo. Contienen una serie de pasos, llamados <strong>steps<\/strong>, que se ejecutan en un entorno espec\u00edfico. En este caso, el trabajo <strong>build-and-test<\/strong> contiene un elemento <strong>docker<\/strong> que define el entorno de ejecuci\u00f3n del trabajo (aqu\u00ed, se trata de una imagen Docker proporcionada por CircleCI), y un elemento <strong>step<\/strong>, descrito a continuaci\u00f3n.<\/li>\n<li aria-level=\"1\">Los pasos (<strong>steps<\/strong>) definen las acciones a ejecutar en el marco de un trabajo:\n<ul>\n<li aria-level=\"1\"><strong>checkout<\/strong>: extrae el c\u00f3digo fuente desde el repositorio para hacerlo accesible en el entorno CircleCI.<\/li>\n<li aria-level=\"1\"><strong>python\/install-packages<\/strong>: Este comando instala las dependencias requeridas, usando el gestor de paquetes <strong>pip<\/strong><\/li>\n<li aria-level=\"1\"><strong>run<\/strong>: ejecuta un comando dentro del trabajo. <strong>Pytest<\/strong> se usa aqu\u00ed para ejecutar pruebas unitarias.<\/li>\n<\/ul>\n<\/li>\n<li aria-level=\"1\">Finalmente, los <strong>workflows<\/strong> son un conjunto de trabajos ejecutados seg\u00fan un orden definido:\n<ul>\n<li><strong>sample<\/strong>: nombre del flujo de trabajo<\/li>\n<li><strong>jobs<\/strong>: lista de trabajos a ejecutar en el flujo de trabajo<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n<p>Podemos eventualmente realizar las siguientes modificaciones:<\/p>\n\n\n<ul class=\"wp-block-list\">\n<li aria-level=\"1\">Para evitar la reinstalaci\u00f3n de los paquetes en cada ejecuci\u00f3n (y por lo tanto, ganar tiempo de build), se puede implementar una gesti\u00f3n del cach\u00e9:<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\"><code>- restore_cache:\n \u00a0\u00a0\u00a0keys:\n \u00a0\u00a0\u00a0\u00a0\u00a0- v1-dependencies-{{ checksum \"requirements.txt\" }}\n- python\/install-packages:\n \u00a0\u00a0\u00a0pkg-manager: pip\n- save_cache:\n \u00a0\u00a0\u00a0key: v1-dependencies-{{ checksum \"requirements.txt\" }}\n \u00a0\u00a0\u00a0paths:\n \u00a0\u00a0\u00a0\u00a0\u00a0- ~\/.cache\/pip<\/code><\/pre>\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center wp-container-core-buttons-is-layout-5ee10de4\" style=\"margin-top:32px;margin-bottom:32px\"><div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/liora.io\/en\/courses\/data-ai\/dataops-engineer\">Saber configurar CircleCI<\/a><\/div><\/div>\n\n\n<p>As\u00ed, CircleCI intentar\u00e1 restaurar un cach\u00e9 existente basado en el hash del archivo <strong>requirements.txt<\/strong>. Si est\u00e1 disponible, ser\u00e1n recuperadas, si no, ser\u00e1n instaladas a trav\u00e9s de <strong>pip<\/strong>.<\/p>\n\n\n<ul class=\"wp-block-list\">\n<li aria-level=\"1\">Cuando la aplicaci\u00f3n pase a producci\u00f3n, podemos agregar un despliegue automatizado despu\u00e9s de una prueba exitosa:<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\"><code>workflows:\n \u00a0version: 2\n \u00a0deploy:\n \u00a0\u00a0\u00a0jobs:\n \u00a0\u00a0\u00a0\u00a0\u00a0- build-and-test\n \u00a0\u00a0\u00a0\u00a0\u00a0- deploy:\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0requires:\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- build-and-test\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0filters:\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0branches:\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0only: main<\/code><\/pre>\n\n\n<h3 class=\"wp-block-heading\" id=\"4-integracion-en-la-nube\">4. Integraci\u00f3n en la nube<\/h3>\n\n\n<p>CircleCI se integra f\u00e1cilmente con infraestructuras en la nube, ya sea Azure, AWS o GCP. Aqu\u00ed, vamos a realizar una integraci\u00f3n AWS.<\/p>\n\n\n<p>Para simplificar, conviene a\u00f1adir en un primer momento un <strong>orb<\/strong>, que es el siguiente:<\/p>\n\n\n<pre class=\"wp-block-code\"><code>aws-cli: circleci\/aws-cli@4.1.1<\/code><\/pre>\n\n\n<p>As\u00ed como un <strong>job<\/strong>, que se parecer\u00e1 al ejemplo a continuaci\u00f3n:<\/p>\n\n\n<pre class=\"wp-block-code\"><code>deploy-to-aws:\n \u00a0\u00a0\u00a0docker:\n \u00a0\u00a0\u00a0\u00a0\u00a0- image: cimg\/python:3.12\n \u00a0\u00a0\u00a0steps:\n \u00a0\u00a0\u00a0\u00a0\u00a0- attach_workspace:\u00a0\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0at: \/home\/circleci\/project\n \u00a0\u00a0\u00a0\u00a0\u00a0- aws-cli\/setup\n \u00a0\u00a0\u00a0\u00a0\u00a0- run:\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name: Configure AWS credentials\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0command: |\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0aws configure set default.region $AWS_DEFAULT_REGION\n \u00a0\u00a0\u00a0\u00a0\u00a0- run:\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name: Deploy application to S3\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0command: |\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0aws s3 cp \/home\/circleci\/project\/ s3:\/\/$AWS_S3_BUCKET_NAME --recursive\n \u00a0\u00a0\u00a0\u00a0\u00a0- run:\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name: Clear AWS credentials (for security)\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0command: rm -f ~\/.aws\/credentials<\/code><\/pre>\n\n\n<p>Las variables de entorno presentes (reconocibles por el signo <strong>$<\/strong>) deben crearse previamente en los par\u00e1metros de CircleCI.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"buenas-practicas-de-ci-cd\">Buenas pr\u00e1cticas de CI\/CD<\/h2>\n\n\n<p>CircleCI recomienda varias buenas pr\u00e1cticas para optimizar los pipelines de CI\/CD.<\/p>\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\" style=\"width:512px;max-width:100%;margin-top:32px;margin-right:auto;margin-bottom:32px;margin-left:auto\"><img alt=\"Ilustraci\u00f3n sobre Buenas pr\u00e1cticas de CI\/CD\" decoding=\"async\" height=\"512\" loading=\"lazy\" sizes=\"(max-width: 512px) 100vw, 512px\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image1-1.webp\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image1-1.webp 512w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image1-1-300x300.webp 300w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image1-1-150x150.webp 150w\" style=\"width:100%;max-width:512px;height:auto\" width=\"512\"\/><\/figure>\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\" style=\"width:512px;max-width:100%;margin-top:32px;margin-right:auto;margin-bottom:32px;margin-left:auto\"><img alt=\"Ilustraci\u00f3n sobre Buenas pr\u00e1cticas de CI\/CD\" decoding=\"async\" height=\"512\" loading=\"lazy\" sizes=\"(max-width: 512px) 100vw, 512px\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image13.webp\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image13.webp 512w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image13-300x300.webp 300w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image13-150x150.webp 150w\" style=\"width:100%;max-width:512px;height:auto\" width=\"512\"\/><\/figure>\n\n\n<p>El proceso de CI\/CD debe considerarse esencial para cualquier equipo de desarrollo.<\/p>\n\n\n<p>Trabajar con procesos manuales que ralentizan el desarrollo.<\/p>\n\n\n<p>Reutilizar las configuraciones y implementar estrategias de cach\u00e9.<\/p>\n\n\n<p>Duplicar las configuraciones y descargar sistem\u00e1ticamente las dependencias en cada build.<\/p>\n\n\n<p>Utilizar las orbs de CircleCI para automatizar tareas repetitivas.<\/p>\n\n\n<p>Escribir manualmente configuraciones redundantes para cada proyecto.<\/p>\n\n\n<p>Proteger los pipelines usando variables de entorno privadas, m\u00faltiples contextos y controles administrativos.<\/p>\n\n\n<p>Almacenar informaci\u00f3n sensible en los archivos de configuraci\u00f3n del proyecto.<\/p>\n\n\n<p>Mantener una alta cobertura de pruebas integrando herramientas asociadas (Codecov, Cypress o SonarCloud por ejemplo).<\/p>\n\n\n<p>Desplegar c\u00f3digo sin pruebas o sin verificar la cobertura de pruebas.<\/p>\n\n\n<p>Utilizar notificaciones automatizadas con Slack para seguir el estado de los pipelines y reaccionar r\u00e1pidamente a los fallos.<\/p>\n\n\n<p>No implementar notificaciones, lo que puede causar retrasos en la detecci\u00f3n de problemas.<\/p>\n\n\n<p>Utilizar orbs populares como Node, AWS-CLI y Python para facilitar las configuraciones y el despliegue en la nube.<\/p>\n\n\n<p>Configurar manualmente cada herramienta, lo que puede causar errores e incoherencias.<\/p>\n\n\n<p>Analizar las m\u00e9tricas de los pipelines para identificar cuellos de botella y mejorar la eficiencia de los workflows.<\/p>\n\n\n<p>No supervisar el rendimiento de los pipelines, lo que puede ralentizar los despliegues.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"conclusion\">Conclusi\u00f3n<\/h2>\n\n\n<p>CircleCI es una soluci\u00f3n <strong>poderosa y flexible<\/strong> que permite automatizar y optimizar los procesos de CI\/CD.<\/p>\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center wp-container-core-buttons-is-layout-5ee10de4\" style=\"margin-top:32px;margin-bottom:32px\"><div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/liora.io\/en\/courses\/cloud-dev\/devops-engineer\">Formarse en CI\/CD<\/a><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>CircleCI es una plataforma de integraci\u00f3n y entrega continua (CI\/CD). Fundada en 2011 y valorada en 1,7 mil millones de d\u00f3lares en 2021, esta soluci\u00f3n es hoy en d\u00eda una de las plataformas de CI\/CD m\u00e1s populares del mundo. CircleCI permite a los desarrolladores construir, probar y desplegar su c\u00f3digo de manera r\u00e1pida y confiable. [&hellip;]<\/p>\n","protected":false},"author":74,"featured_media":177770,"comment_status":"open","ping_status":"open","sticky":false,"template":"elementor_theme","format":"standard","meta":{"_acf_changed":false,"editor_notices":[],"footnotes":""},"categories":[2439],"class_list":["post-177768","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cloud-dev"],"acf":[],"_links":{"self":[{"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/posts\/177768","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/users\/74"}],"replies":[{"embeddable":true,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/comments?post=177768"}],"version-history":[{"count":5,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/posts\/177768\/revisions"}],"predecessor-version":[{"id":185804,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/posts\/177768\/revisions\/185804"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/media\/177770"}],"wp:attachment":[{"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/media?parent=177768"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/categories?post=177768"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}