In this article
¿Qué es CI/CD? Explicación de los pipelines y las herramientas de CI/CD
En el transcurso de una generación, CI/CD pasó de ser un tema de nicho a un enfoque generalizado para el desarrollo y la entrega de software, que hoy se da por sentado en el sector. Aunque muchas personas usan el término con seguridad, a menudo se malinterpretan y confunden los significados precisos de CI y CD.
CI/CD: explicación
¿Qué es CI/CD?
CI/CD es una sigla de uso común en el desarrollo de software. Significa «integración continua» y «entrega continua». Aunque son conceptos distintos, suelen tratarse como si fueran uno solo.
La integración continua es un proceso estándar de desarrollo en el que todo el código de un proyecto se integra con regularidad en una sola rama, sin importar si el trabajo de desarrollo del que forma parte está terminado o no.
La entrega continua es un proceso periódico que empaqueta la unidad o las unidades de implementación que componen los resultados de la base de código. Estos procesos suelen asociarse con la automatización del desarrollo, DevOps y, más recientemente, GitOps.
¿Cuáles son los componentes clave de un pipeline de CI/CD?
¿Qué es la integración continua (CI)?
La integración continua (CI) suele entenderse como una práctica de desarrollo que consiste en integrar regularmente el código en desarrollo en una sola rama. Esta rama suele llamarse «trunk». Los equipos pueden crear ramas por motivos específicos (por ejemplo, para aplicar una corrección urgente a un sistema en producción), pero estos casos se consideran excepciones a la regla.
Para gestionar el trabajo en curso, se usan «indicadores de funcionalidad» para asegurar que el código no se active hasta que esté listo. Este enfoque de una sola rama contrasta con otras formas de desarrollo, como GitFlow, que tienen varias ramas de larga duración y permiten mantener varios flujos de desarrollo.
La importancia de CI en el marco de CI/CD
Con CI, puedes evitar el problema tradicional del «día de integración», cuando es necesario conciliar cuidadosamente estos flujos de desarrollo. Esta conciliación puede ser complicada y propensa a errores, y reducir la confianza en la publicación de cambios de código. La práctica de CI también ayuda a fomentar otras buenas prácticas, como una frecuencia regular de pruebas unitarias o de integración, si tienes un pipeline de CI automatizado. Desde el punto de vista técnico, CI requiere que los desarrolladores integren con frecuencia su trabajo en curso en una sola rama (es decir, que no creen ramas para desarrollar funcionalidades), aunque en la práctica habitual no siempre se cumple.
¿Qué es la entrega continua (CD)?
La integración continua garantiza que los cambios en desarrollo se integren regularmente en la línea principal de código. La entrega continua empaqueta el código en una unidad lista para entregar que los propios desarrolladores pueden implementar (en un modelo DevOps puro) o, si es necesario, un equipo de operaciones independiente. A menudo se confunde o se equipara con la «implementación continua», que se refiere a un proceso que implementa automáticamente los cambios en producción. De nuevo, en la práctica, este segundo uso es más común que la definición técnica.
¿Qué es la implementación continua?
La implementación continua permite que las organizaciones publiquen sus aplicaciones automáticamente, sin intervención manual. Con este enfoque, los equipos de DevOps definen los criterios de publicación con anticipación y, una vez que se cumplen y validan, el código se envía directamente a producción. Esto permite a las organizaciones responder más rápido a los cambios y entregar nuevas funcionalidades a los usuarios con mayor rapidez.
Aunque es posible practicar la integración continua (CI) sin entrega continua (CD) ni implementación continua, la CD requiere que la CI ya esté implementada. Implementar en producción a pedido sería prácticamente imposible sin fundamentos de CI, como integrar código en un repositorio compartido, automatizar pruebas y compilaciones, y trabajar en lotes pequeños y frecuentes cada día.
¿Qué es un pipeline de CI/CD?
La automatización es ideal para las prácticas de CI y CD, ya que requieren realizar las mismas acciones con regularidad. La automatización de los procesos de CI y CD suele llamarse «pipelines», por analogía con los pipelines de automatización de productos de las fábricas tradicionales. Como la automatización es un principio clave de DevOps (la «A» del modelo CALMS de DevOps), los pipelines de CI/CD suelen considerarse parte integral de las prácticas de DevOps. Un solo equipo puede crear y mantener el pipeline hasta producción (un modelo DevOps más puro), o el pipeline de CI/CD puede entregar un conjunto estable y más probado de artefactos de compilación a un equipo de operaciones independiente para su implementación.
Beneficios de la integración de CI/CD
Un pipeline de CI/CD también facilita la incorporación de otros cambios que pueden mejorar la confiabilidad. Por ejemplo, es relativamente sencillo incorporar pruebas unitarias o de integración antes en el ciclo de compilación e implementación. A esto se le conoce como «shift left» y puede reducir los costos de forma considerable, ya que los problemas se detectan antes en el proceso de entrega.
Del mismo modo, los pipelines fomentan un entorno en el que los cambios se pueden publicar «poco a poco y con frecuencia», lo que también reduce el riesgo, ya que cada uno de estos cambios más pequeños supone menos riesgo para el sistema en su conjunto. En cambio, el enfoque más tradicional de «gran lanzamiento» agrupa muchos cambios en una sola publicación importante e irregular.
Por último, reducir la intervención manual disminuye aún más el riesgo, ya que las máquinas son más confiables que las personas. Hay poco riesgo de que un pipeline automatizado ejecute el comando equivocado durante una compilación o de que se olvide una prueba de QA en un ciclo de publicación.
La reciente popularidad de GitOps se basa en este código de pipeline y exige que el pipeline esté representado por completo en el control de versiones. Además, agentes de control automatizados gestionan el estado de la implementación y se aseguran de que coincida con el código fuente.
Los pipelines de CI/CD y la seguridad
En lo que respecta a la gestión de la seguridad del software, la creciente popularidad de los pipelines de CI/CD ha generado nuevas oportunidades, pero también nuevas amenazas. Por un lado, los pipelines de CI/CD limitan el acceso libre al proceso de compilación e implementación. Además, es más fácil conceder a esos usuarios (tanto personas como servicios) acceso granular solo a los recursos que necesitan, en lugar de acceso completo de administrador. Los pipelines también aumentan considerablemente la capacidad de auditar la compilación y la entrega, ya que es relativamente sencillo registrar en cada paso qué acción se realizó, cuál fue el resultado y qué (o quién) la inició.
Como se mencionó, una desventaja de CI/CD es, por supuesto, el aumento de las amenazas. Desde el año 2000, varios factores han contribuido a la proliferación del código, así como de las fuentes y plataformas de software. A medida que el desarrollo y la implementación se han acelerado y los pipelines se han vuelto cada vez más confiables, el software se implementa hoy más rápido que nunca.
El auge de las bibliotecas de software de código abierto, las plataformas y las herramientas también ha ofrecido a los desarrolladores muchas más opciones de software. Por último, el auge de la contenerización como tecnología flexible de empaquetado e implementación, junto con la interoperabilidad de los componentes de software mediante interfaces REST y gRPC, ha permitido crear e implementar estos componentes juntos con más facilidad y rapidez que nunca.
En conjunto, estos factores han generado un tsunami de software nuevo que los departamentos centralizados deben intentar gestionar. Los equipos de seguridad, operaciones y arquitectura han tenido que adaptarse a este entorno nuevo y cambiante.
Esta presión ha dado lugar a DevSecOps, una extensión del modelo DevOps de responsabilidad compartida por el desarrollo, la implementación y el mantenimiento, que integra estrechamente los intereses de seguridad.

Herramientas para pipelines de CI/CD
Los pipelines de CI/CD comenzaron como combinaciones de scripts sencillos de shell y derivados de archivos Make, como Ant y Maven. Con el tiempo, se generalizó el uso de aplicaciones más completas que cumplen esta función. Algunas empezaron como aplicaciones sencillas del lado del servidor y luego se convirtieron en productos comerciales exitosos por derecho propio. Los principales actores de este espacio son Jenkins y TeamCity. Al principio, estas herramientas almacenaban la configuración del pipeline en el servidor, de forma persistente, mediante la interfaz gráfica de la aplicación. Sin embargo, más recientemente, se ha generalizado el uso de «pipelines como código» declarativos obtenidos de repositorios de código fuente remotos.
Por ejemplo, Snyk puede ayudarte a evitar continuamente las vulnerabilidades conocidas en tus dependencias mediante pruebas estáticas de seguridad de aplicaciones. Puedes encontrar integraciones de seguridad de Snyk con TeamCity, Jenkins y muchas otras herramientas y sistemas de CI/CD. Aquí puedes consultar los ejemplos de configuración de integraciones de Snyk en nuestro repositorio de GitHub.

Los principales servicios de control de versiones también se han sumado. GitLab fue el primero en lanzar su oferta GitLab CI/CD; después, GitHub presentó GitHub Actions. Snyk ofrece integración con GitLab y GitHub.
Por supuesto, los principales proveedores de servicios en la nube también ofrecen estos servicios. Azure tiene su producto Pipelines y AWS ofrece CodePipeline. Los productos de Azure y AWS se pueden integrar con Snyk.
CI/CD como nuevo estándar de la industria
Desde que se acuñó el término CI en 1991, CI/CD pasó de ser una práctica relativamente especializada a convertirse en el estándar de la industria. Junto con ello, los efectos combinados y mutuamente potenciadores del auge del código abierto, la contenerización y las aplicaciones distribuidas han generado una explosión de artefactos de software que abarcan una variedad aparentemente infinita de herramientas y tecnologías.
Sin embargo, esto ha creado un problema de seguridad para quienes administran los pipelines de entrega de software y buscan controlar todos estos nuevos vectores de ataque. La verificación manual no es un enfoque sostenible, eficiente ni confiable. Obtén más información sobre los diferentes tipos de auditorías de seguridad que puedes agregar a tu pipeline aquí.
Refuerza la seguridad de los desarrolladores durante todo el proceso de desarrollo. Integra la automatización de tu pipeline con el análisis de vulnerabilidades de Snyk. Consulta todas las integraciones de Snyk aquí.
Integra la seguridad en tus pipelines de CI/CD
Snyk se integra con el pipeline de CI/CD que elijas y te ayuda a corregir las vulnerabilidades de mayor prioridad.