{"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-02-06T09:52:24","modified_gmt":"2026-02-06T08:52:24","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":"<b>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.<\/b>\n\nCircleCI 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.\n\n<style><br \/>\n.elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-heading .elementor-heading-title[class*=elementor-size-]>a{color:inherit;font-size:inherit;line-height:inherit}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading .elementor-heading-title.elementor-size-xxl{font-size:59px}<\/style>\n<h3>\u00bfPero qu\u00e9 es el CI\/CD?<\/h3>\n<style><br \/>\n.elementor-widget-image{text-align:center}.elementor-widget-image a{display:inline-block}.elementor-widget-image a img[src$=\".svg\"]{width:48px}.elementor-widget-image img{vertical-align:middle;display:inline-block}<\/style>\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"512\" height=\"512\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image3-1.webp\" alt=\"\" loading=\"lazy\" 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\" sizes=\"(max-width: 512px) 100vw, 512px\">\n\nCI\/CD para \u00ab<b>Continuous Integration \/ Continuous Delivery<\/b>\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.\n<ul>\n \t<li><b>La integraci\u00f3n continua (CI)<\/b> 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 \t<li><b>La entrega continua (CD)<\/b> automatiza la entrega del c\u00f3digo validado, sin intervenci\u00f3n manual.<\/li>\n<\/ul>\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\"><div class=\"wp-block-button \"><a class=\"wp-block-button__link wp-element-button \" href=\"https:\/\/liora.io\/es\/nuestros-cursos-de-data\">Aprofundizar en CI\/CD<\/a><\/div><\/div>\n\n<h3>Funciones clave<\/h3>\nCircleCI 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.\n\n<img decoding=\"async\" width=\"512\" height=\"512\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image12.webp\" alt=\"\" loading=\"lazy\" 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\" sizes=\"(max-width: 512px) 100vw, 512px\">\n<h4><font size=\"4\">Flujos de trabajo flexibles<\/font><\/h4>\nPermite orquestar pipelines complejos con dependencias condicionales. Esto optimiza las pruebas y los despliegues, representando un ahorro de tiempo.\n\n<img decoding=\"async\" width=\"512\" height=\"512\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image5-1.webp\" alt=\"\" loading=\"lazy\" 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\" sizes=\"(max-width: 512px) 100vw, 512px\">\n<h4><font size=\"4\">Ejecuci\u00f3n en la nube<\/font><\/h4>\nOfrece 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>.\n\n<img decoding=\"async\" width=\"512\" height=\"512\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image15.webp\" alt=\"\" loading=\"lazy\" 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\" sizes=\"(max-width: 512px) 100vw, 512px\">\n<h4><font size=\"4\">Paralelizaci\u00f3n de builds<\/font><\/h4>\nDivide las tareas para acelerar las pruebas y las builds para un tiempo de procesamiento reducido.\n\n<img decoding=\"async\" width=\"512\" height=\"512\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image14.webp\" alt=\"\" loading=\"lazy\" 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\" sizes=\"(max-width: 512px) 100vw, 512px\">\n<h4><font size=\"4\">Soporte multi-entorno<\/font><\/h4>\nAdmite <a href=\"https:\/\/liora.io\/es\/teoria-de-los-lenguajes-de-programacion\">diversos lenguajes<\/a>, frameworks y entornos.\n\n<img decoding=\"async\" width=\"512\" height=\"512\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image11.webp\" alt=\"\" loading=\"lazy\" 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\" sizes=\"(max-width: 512px) 100vw, 512px\">\n<h4><font size=\"4\">Automatizaci\u00f3n del despliegue<\/font><\/h4>\nIntegraci\u00f3n con herramientas como <a href=\"https:\/\/liora.io\/es\/formacion-sobre-kubernetes\">Kubernetes<\/a> y Terraform.\n\n<img decoding=\"async\" width=\"512\" height=\"512\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image4-1.webp\" alt=\"\" loading=\"lazy\" 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\" sizes=\"(max-width: 512px) 100vw, 512px\">\n<h4><font size=\"4\">Cacheo inteligente<\/font><\/h4>\nLas dependencias se almacenan en cach\u00e9 para evitar su recarga.\n\n<img decoding=\"async\" width=\"512\" height=\"512\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image7-1.webp\" alt=\"\" loading=\"lazy\" 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\" sizes=\"(max-width: 512px) 100vw, 512px\">\n<h4><font size=\"4\">Seguridad y conformidad<\/font><\/h4>\nCifrado de datos, permisos granulares y auditor\u00eda de pipelines.\n\n<img decoding=\"async\" width=\"512\" height=\"512\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image9.webp\" alt=\"\" loading=\"lazy\" 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\" sizes=\"(max-width: 512px) 100vw, 512px\">\n<h4><font size=\"4\">Pruebas continuas e informes<\/font><\/h4>\nIntegraci\u00f3n con herramientas de prueba y generaci\u00f3n de informes detallados.\n\n<img decoding=\"async\" width=\"512\" height=\"512\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image6-1.webp\" alt=\"\" loading=\"lazy\" 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\" sizes=\"(max-width: 512px) 100vw, 512px\">\n<h4><font size=\"4\">Supervisi\u00f3n e insights<\/font><\/h4>\nPaneles anal\u00edticos para seguir el rendimiento de los pipelines.\n\n<img decoding=\"async\" width=\"512\" height=\"512\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image8.webp\" alt=\"\" loading=\"lazy\" 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\" sizes=\"(max-width: 512px) 100vw, 512px\">\n<h4><font size=\"4\">Integraci\u00f3n con Git<\/font><\/h4>\nCompatible con <a href=\"https:\/\/liora.io\/es\/formacion-en-github\">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.\n<h3>Implementaci\u00f3n de CircleCI<\/h3>\nLa configuraci\u00f3n inicial es sencilla y r\u00e1pida, adem\u00e1s de ser compatible con GitHub, GitLab o Bitbucket.\n<h4><font size=\"4\">1. Antes de la instalaci\u00f3n<\/font><\/h4>\n<ul>\n \t<li style=\"font-weight: 400;\" aria-level=\"1\">Antes que nada, es obviamente necesario tener una cuenta en una plataforma de gesti\u00f3n de c\u00f3digo compatible (<b>GitHub, GitLab o Bitbucket<\/b>). As\u00ed como una cuenta de <a href=\"\/\">CircleCI<\/a> conectada al repositorio que est\u00e1s utilizando.<\/li>\n \t<li style=\"font-weight: 400;\" 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<h4><font size=\"4\">2. Registro del proyecto<\/font><\/h4>\nDesde 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:\n\n<img decoding=\"async\" width=\"1277\" height=\"128\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image16.webp\" alt=\"\" loading=\"lazy\" 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\" sizes=\"(max-width: 1277px) 100vw, 1277px\">\n\nElige un m\u00e9todo de integraci\u00f3n, en este ejemplo, ser\u00e1 \u00abFast\u00bb.\n\n<img decoding=\"async\" width=\"438\" height=\"336\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image10.webp\" alt=\"\" loading=\"lazy\" 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\" sizes=\"(max-width: 438px) 100vw, 438px\">\n\nUn archivo de configuraci\u00f3n se crea autom\u00e1ticamente.\n\n<a href=\"https:\/\/liora.io\/es\/nuestros-cursos-de-data\">\nAprender a gestionar un proyecto en CircleCI\n<\/a>\n<h4><font size=\"4\">3. El archivo de configuraci\u00f3n<\/font><\/h4>\nEn nuestro ejemplo, el archivo de configuraci\u00f3n creado es el siguiente:\n<pre>version: 2.1\norbs:\n &nbsp;python: circleci\/python@2.1.1\njobs:\n &nbsp;build-and-test:\n &nbsp;&nbsp;&nbsp;docker:\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- image: cimg\/python:3.12\n &nbsp;&nbsp;&nbsp;steps:\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- checkout\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- python\/install-packages:\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pkg-manager: pip\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- run:\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name: Run tests\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;command: pytest\nworkflows:\n &nbsp;sample:&nbsp;\n &nbsp;&nbsp;&nbsp;jobs:\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- build-and-test<\/pre>\n<ul>\n \t<li style=\"font-weight: 400;\" aria-level=\"1\">La primera l\u00ednea se refiere a la versi\u00f3n del esquema utilizado por CircleCI.<\/li>\n \t<li style=\"font-weight: 400;\" aria-level=\"1\">Las <b>orbs<\/b> 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 \t<li style=\"font-weight: 400;\" aria-level=\"1\">Los <b>jobs<\/b> son unidades de trabajo. Contienen una serie de pasos, llamados <b>steps<\/b>, que se ejecutan en un entorno espec\u00edfico. En este caso, el trabajo <b>build-and-test<\/b> contiene un elemento <b>docker<\/b> que define el entorno de ejecuci\u00f3n del trabajo (aqu\u00ed, se trata de una imagen Docker proporcionada por CircleCI), y un elemento <b>step<\/b>, descrito a continuaci\u00f3n.<\/li>\n \t<li style=\"font-weight: 400;\" aria-level=\"1\">Los pasos (<b>steps<\/b>) definen las acciones a ejecutar en el marco de un trabajo:\n<ul>\n \t<li style=\"font-weight: 400;\" aria-level=\"1\"><b>checkout<\/b>: extrae el c\u00f3digo fuente desde el repositorio para hacerlo accesible en el entorno CircleCI.<\/li>\n \t<li style=\"font-weight: 400;\" aria-level=\"1\"><b>python\/install-packages<\/b>: Este comando instala las dependencias requeridas, usando el gestor de paquetes <b>pip<\/b><\/li>\n \t<li style=\"font-weight: 400;\" aria-level=\"1\"><b>run<\/b>: ejecuta un comando dentro del trabajo. <b>Pytest<\/b> se usa aqu\u00ed para ejecutar pruebas unitarias.<\/li>\n<\/ul>\n<\/li>\n \t<li style=\"font-weight: 400;\" aria-level=\"1\">Finalmente, los <b>workflows<\/b> son un conjunto de trabajos ejecutados seg\u00fan un orden definido:\n<ul>\n \t<li><b>sample<\/b>: nombre del flujo de trabajo<\/li>\n \t<li><b>jobs<\/b>: lista de trabajos a ejecutar en el flujo de trabajo<\/li>\n<\/ul>\n<\/li>\n<\/ul>\nPodemos eventualmente realizar las siguientes modificaciones:\n<ul>\n \t<li style=\"font-weight: 400;\" 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<pre>- restore_cache:\n &nbsp;&nbsp;&nbsp;keys:\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- v1-dependencies-{{ checksum \"requirements.txt\" }}\n- python\/install-packages:\n &nbsp;&nbsp;&nbsp;pkg-manager: pip\n- save_cache:\n &nbsp;&nbsp;&nbsp;key: v1-dependencies-{{ checksum \"requirements.txt\" }}\n &nbsp;&nbsp;&nbsp;paths:\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- ~\/.cache\/pip<\/pre>\n<a href=\"https:\/\/liora.io\/es\/nuestros-cursos-de-data\">\nSaber configurar CircleCI\n<\/a>\n\nAs\u00ed, CircleCI intentar\u00e1 restaurar un cach\u00e9 existente basado en el hash del archivo <b>requirements.txt<\/b>. Si est\u00e1 disponible, ser\u00e1n recuperadas, si no, ser\u00e1n instaladas a trav\u00e9s de <b>pip<\/b>.\n<ul>\n \t<li style=\"font-weight: 400;\" 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<pre>workflows:\n &nbsp;version: 2\n &nbsp;deploy:\n &nbsp;&nbsp;&nbsp;jobs:\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- build-and-test\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- deploy:\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;requires:\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- build-and-test\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filters:\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;branches:\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;only: main<\/pre>\n<h4><font size=\"4\">4. Integraci\u00f3n en la nube<\/font><\/h4>\nCircleCI se integra f\u00e1cilmente con infraestructuras en la nube, ya sea Azure, AWS o GCP. Aqu\u00ed, vamos a realizar una integraci\u00f3n AWS.\n\nPara simplificar, conviene a\u00f1adir en un primer momento un <b>orb<\/b>, que es el siguiente:\n<pre>aws-cli: circleci\/aws-cli@4.1.1<\/pre>\nAs\u00ed como un <b>job<\/b>, que se parecer\u00e1 al ejemplo a continuaci\u00f3n:\n<pre>deploy-to-aws:\n &nbsp;&nbsp;&nbsp;docker:\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- image: cimg\/python:3.12\n &nbsp;&nbsp;&nbsp;steps:\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- attach_workspace:&nbsp;\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at: \/home\/circleci\/project\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- aws-cli\/setup\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- run:\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name: Configure AWS credentials\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;command: |\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aws configure set default.region $AWS_DEFAULT_REGION\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- run:\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name: Deploy application to S3\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;command: |\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aws s3 cp \/home\/circleci\/project\/ s3:\/\/$AWS_S3_BUCKET_NAME --recursive\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- run:\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name: Clear AWS credentials (for security)\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;command: rm -f ~\/.aws\/credentials<\/pre>\nLas variables de entorno presentes (reconocibles por el signo <b>$<\/b>) deben crearse previamente en los par\u00e1metros de CircleCI.\n<h3>Buenas pr\u00e1cticas de CI\/CD<\/h3>\nCircleCI recomienda varias buenas pr\u00e1cticas para optimizar los pipelines de CI\/CD.\n\n<img decoding=\"async\" width=\"512\" height=\"512\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image1-1.webp\" alt=\"\" loading=\"lazy\" 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\" sizes=\"(max-width: 512px) 100vw, 512px\">\n<img decoding=\"async\" width=\"512\" height=\"512\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2025\/02\/image13.webp\" alt=\"\" loading=\"lazy\" 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\" sizes=\"(max-width: 512px) 100vw, 512px\">\n\nEl proceso de CI\/CD debe considerarse esencial para cualquier equipo de desarrollo.\n\nTrabajar con procesos manuales que ralentizan el desarrollo.\n\nReutilizar las configuraciones y implementar estrategias de cach\u00e9.\n\nDuplicar las configuraciones y descargar sistem\u00e1ticamente las dependencias en cada build.\n\nUtilizar las orbs de CircleCI para automatizar tareas repetitivas.\n\nEscribir manualmente configuraciones redundantes para cada proyecto.\n\nProteger los pipelines usando variables de entorno privadas, m\u00faltiples contextos y controles administrativos.\n\nAlmacenar informaci\u00f3n sensible en los archivos de configuraci\u00f3n del proyecto.\n\nMantener una alta cobertura de pruebas integrando herramientas asociadas (Codecov, Cypress o SonarCloud por ejemplo).\n\nDesplegar c\u00f3digo sin pruebas o sin verificar la cobertura de pruebas.\n\nUtilizar notificaciones automatizadas con Slack para seguir el estado de los pipelines y reaccionar r\u00e1pidamente a los fallos.\n\nNo implementar notificaciones, lo que puede causar retrasos en la detecci\u00f3n de problemas.\n\nUtilizar orbs populares como Node, AWS-CLI y Python para facilitar las configuraciones y el despliegue en la nube.\n\nConfigurar manualmente cada herramienta, lo que puede causar errores e incoherencias.\n\nAnalizar las m\u00e9tricas de los pipelines para identificar cuellos de botella y mejorar la eficiencia de los workflows.\n\nNo supervisar el rendimiento de los pipelines, lo que puede ralentizar los despliegues.\n<h3>Conclusi\u00f3n<\/h3>\nCircleCI es una soluci\u00f3n <b>poderosa y flexible<\/b> que permite automatizar y optimizar los procesos de CI\/CD.\n\n<a href=\"https:\/\/liora.io\/es\/nuestros-cursos-de-data\">\nFormarse en CI\/CD\n<\/a>","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":183280,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/posts\/177768\/revisions\/183280"}],"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}]}}