CI/CD
CI/CD es la sigla para la integración y la distribución o implementación continuas, cuyo objetivo es mejorar y agilizar el ciclo de vida de desarrollo del software.
La integración continua (CI) es una práctica que consiste en incorporar los cambios de código a un repositorio compartido de código fuente de forma automática y periódica.La distribución continua, o implementación continua, (CD) es un proceso de dos partes en el que se integran, prueban y distribuyen los cambios de código. Mientras que en la distribución los cambios no se llegan a implementar en la producción de forma automatizada, en la implementación sí se lanzan las actualizaciones en este entorno automáticamente.
Estas prácticas relacionadas se conocen como "canales de CI/CD" y cuentan con el respaldo de los equipos de desarrollo y de operaciones que trabajan en conjunto de manera ágil, ya sea con un enfoque de DevOps o de ingeniería de confiabilidad del sitio (SRE).
La importancia de la CI/CD
La CI/CD evita errores y fallas de código en las empresas sin interrumpir el ciclo permanente de desarrollo y actualizaciones de software.
Sus funciones pueden ayudar a disminuir la complejidad, aumentar la eficiencia y optimizar los flujos de trabajo a medida que crecen las aplicaciones.
La CI/CD automatiza la intervención manual que suele necesitarse para que el código nuevo pase de la etapa de confirmación a la de producción, lo cual reduce el tiempo de inactividad y agiliza los lanzamientos de código. Además, dado que integra las actualizaciones y los cambios de código en menos tiempo, los comentarios de los usuarios se incorporan con mayor frecuencia y efectividad, lo cual produce resultados positivos para ellos y un mayor nivel de conformidad de los clientes en general.
La integración continua
La parte "CI" de la sigla CI/CD siempre significa integración continua y se trata de un proceso de automatización con el cual los desarrolladores fusionan los cambios de código en un sector o sitio compartido con mayor facilidad y frecuencia. A medida que se realizan las actualizaciones, se activan los pasos de pruebas automatizadas para garantizar que los cambios de código que se fusionaron sean confiables.
El objetivo del diseño de las aplicaciones modernas es que los desarrolladores puedan trabajar de forma simultánea en distintas funciones de la misma aplicación. Sin embargo, si una empresa fusiona todo el código fuente diversificado en un solo día (conocido como el "día de la fusión"), las tareas pueden tornarse tediosas, manuales y muy lentas.
Esto ocurre porque puede haber incompatibilidad entre los cambios que implementen los desarrolladores en la aplicación si trabajan de forma simultánea pero aislada. El problema puede agravarse aún más si cada desarrollador personaliza su propio entorno de desarrollo integrado (IDE) local, en lugar de que todo el equipo adopte un IDE basado en la nube.
La CI puede pensarse como una solución al problema de que se desarrollen demasiadas divisiones de una aplicación al mismo tiempo, que luego podrían entrar en conflicto entre sí.
Para que la integración continua tenga éxito, una vez que se incorporan las modificaciones del desarrollador, se validan con la compilación automática de la aplicación y la ejecución de distintas pruebas automatizadas (generalmente, de unidad e integración), para garantizar que los cambios no hayan introducido una falla. Esto significa que debe probarse todo, desde las clases y el funcionamiento hasta los distintos módulos que conforman toda la aplicación. Si una prueba automática detecta incompatibilidad entre el código nuevo y el actual, la CI facilita la resolución de esos errores con rapidez.
El significado de "CD" en la sigla CI/CD
La sigla "CD" se refiere a la distribución o la implementación continuas, y se trata de conceptos relacionados que suelen usarse indistintamente. Ambos hacen referencia a la automatización de las etapas posteriores del proceso, pero a veces se usan por separado para explicar hasta dónde llega la automatización. El proceso que se elija dependerá de la tolerancia a los riesgos y las necesidades puntuales de los equipos de desarrollo y operaciones.
La distribución continua
Luego de que se automaticen las compilaciones y las pruebas de unidad e integración en la CI, la distribución continua automatiza el lanzamiento de código validado en un repositorio. Por eso, para que este proceso sea eficiente, es esencial que la implementación continua ya esté integrada en el canal de desarrollo.
En todas sus etapas, desde la fusión de los cambios de código hasta la distribución de las compilaciones listas para la producción, las pruebas y el lanzamiento de código están automatizados. Al final de este proceso, el equipo de operaciones puede implementar una aplicación para la producción de forma rápida.
Por lo general, la distribución continua se refiere a que los cambios que implementa un desarrollador en una aplicación se someten a pruebas automáticas de errores y se cargan en un repositorio (como GitHub o un registro de contenedores), para que luego el equipo de operaciones pueda implementarlos en un entorno de producción en vivo. Es la solución al problema de la escasa supervisión y comunicación entre los equipos comerciales y de desarrollo. Por eso, su objetivo es garantizar que cuenten con una base de código que pueda enviarse a un entorno de producción en todo momento y que la implementación de código nuevo requiera un esfuerzo mínimo.
La implementación continua
La última etapa de un canal consolidado de CI/CD es la implementación continua. La implementación continua, que es una extensión de la distribución continua, hace referencia al lanzamiento automático de los cambios que implementa el desarrollador desde el repositorio hasta la producción, para ponerlos a disposición de los clientes.
Así, ya no se sobrecarga a los equipos de operaciones con procesos manuales que retrasan la distribución de las aplicaciones. Con este tipo de implementación, se aprovechan los beneficios de la distribución continua y se automatiza la siguiente etapa del proceso.
En la práctica, los cambios que implementan los desarrolladores en la aplicación en la nube podrían ponerse en marcha unos cuantos minutos después de su creación (siempre que hayan pasado las pruebas automatizadas). Esto facilita mucho más la recepción e incorporación permanente de los comentarios de los usuarios. En conjunto, estas prácticas de CI/CD relacionadas reducen los riesgos que conlleva la implementación de una aplicación, dado que es más sencillo realizar cambios a ella en pequeñas partes en lugar de hacerlo todo a la vez.
No obstante, debido a que no hay ninguna entrada manual en la etapa anterior a la producción, la implementación continua depende en gran medida del correcto diseño de la automatización de las pruebas. Esto implica que requiere de una gran inversión inicial, ya que se deben diseñar las pruebas automatizadas para que se adapten a las distintas etapas de prueba y lanzamiento en el canal de la CI/CD.
Diferencias entre la CI/CD y DevOps
La CI/CD es una parte esencial de la metodología DevOps, la cual busca fomentar la colaboración entre los equipos de desarrollo y operaciones. Ambas se centran en la automatización de los procesos que integran código, por lo que agilizan los procesos mediante los cuales una idea (como una función nueva, una solicitud de mejora o la corrección de un error) pasa del desarrollo a la implementación en un entorno de producción, donde puede generar valor para el usuario.
En el marco de trabajo colaborativo de DevOps, la seguridad es una responsabilidad compartida e integrada durante todo el proceso. Es un enfoque tan importante que llevó a que se acuñara el término "DevSecOps" para enfatizar la necesidad de diseñar una base de seguridad en las iniciativas de DevOps. DevSecOps (desarrollo, seguridad y operaciones) es un enfoque que aborda la cultura, la automatización y el diseño de plataformas, el cual integra la seguridad como una responsabilidad compartida a lo largo de todo el ciclo de vida de la TI. Uno de sus elementos fundamentales es la incorporación de un canal de CI/CD seguro.
Seguridad de la CI/CD
La seguridad de la CI/CD se utiliza para proteger los canales de código con pruebas y verificaciones automáticas y así evitar que se generen puntos vulnerables en la distribución del software. Si la incorpora a su canal - por medio de métodos como shift left y shift right, puede proteger el código de los ataques, evitar las pérdidas de datos, cumplir con las políticas y garantizar la calidad.
Sin las medidas de seguridad adecuadas, la agilidad propia de los procesos de desarrollo e implementación puede exponer los canales a varios riesgos:
- La divulgación de información confidencial a fuentes externas
- El uso de elementos de terceros o códigos no seguros
- El acceso no autorizado a las herramientas de diseño o los repositorios de código fuente
La identificación y eliminación de los puntos vulnerables a lo largo del ciclo de desarrollo de software garantiza que los cambios en el código se prueben minuciosamente y cumplan con los estándares de seguridad antes de su implementación en la etapa de producción.
Herramientas comunes de CI/CD
Las herramientas de CI/CD son útiles para que los equipos automaticen el desarrollo, la implementación y las pruebas. Hay algunas que gestionan específicamente la integración (CI), otras que abordan el desarrollo y la implementación (CD), y algunas que se especializan en las pruebas permanentes u otras funciones relacionadas.
Tekton Pipelines es un marco para las plataformas Kubernetes que ofrece una experiencia estándar de CI/CD en la nube con contenedores.
Además de Tekton Pipelines, estas son otras herramientas open source de CI/CD que podrían interesarle:
- Jenkins: con capacidad para gestionar desde un servidor de CI sencillo hasta una central de CD completa
- Spinnaker: plataforma de CD diseñada para los entornos multicloud
- GoCD: servidor de CI/CD que se enfoca en la creación de modelos y la visualización
- Concourse: sistema open source de automatización constante
- Screwdriver: plataforma de diseño creada para la distribución continua
Es posible que a los equipos también les convenga adquirir las herramientas gestionadas de CI/CD, que ofrecen muchos proveedores. Los principales proveedores de nube pública ofrecen soluciones de CI/CD, junto con GitLab, CircleCI, Travis CI, Atlassian Bamboo y muchos más.
Además, es probable que cualquier herramienta que sea fundamental para DevOps forme parte de un proceso de CI/CD. Las herramientas para la automatización de la configuración (como Ansible, Chef y Puppet), los tiempos de ejecución de los contenedores (como Docker, rkt y cri-o) y la organización en contenedores (Kubernetes) no son herramientas específicas de CI/CD, pero aparecen en muchos de sus flujos de trabajo.
Hay muchas maneras en que puede implementar CI/CD dependiendo de su estrategia de desarrollo de aplicaciones y su proveedor de nube. Red Hat® OpenShift® Service on AWS ofrece varias opciones para simplificar el flujo de trabajo de CI/CD, como Tekton y OpenShift Pipelines. Al utilizar Red Hat OpenShift, las empresas pueden utilizar CI/CD para automatizar el diseño, prueba e implementación de una aplicación en múltiples plataformas de nube o a nivel local.
Red Hat puede ayudarlo
Nuestros especialistas pueden ayudar a que su empresa desarrolle las prácticas, las herramientas y la cultura necesarias para modernizar las aplicaciones actuales y agilizar el proceso de desarrollo de otras nuevas en la nube.
Red Hat® OpenShift® permite que las empresas mejoren la productividad de los desarrolladores, automaticen los canales de CI/CD y apliquen sus iniciativas de seguridad al principio y durante el ciclo de desarrollo.
Red Hat OpenShift Pipelines se diseñó para ejecutar los pasos del canal de CI/CD en su propio contenedor, lo cual permite que cada uno de ellos pueda ajustarse de forma independiente para satisfacer las demandas del canal. Gracias a ello, los administradores y los desarrolladores pueden crear planes de canales para las aplicaciones en función de los requisitos comerciales y de seguridad exclusivos de la empresa.
Red Hat OpenShift GitOps es un operador, el cual proporciona un flujo de trabajo que integra los repositorios de Git, las herramientas de integración y distribución continuas (CI/CD) y Kubernetes para desarrollar sistemas de software con mayor agilidad, seguridad y adaptabilidad, pero sin dejar de lado la calidad.OpenShift GitOps permite que los clientes diseñen e integren flujos de trabajo declarativos de distribución continua impulsados por Git directamente en la plataforma de desarrollo de las aplicaciones.
Red Hat Ansible® Automation Platform incluye las herramientas que se necesitan para implementar la automatización en toda la empresa, como las soluciones basadas en eventos, los sistemas de análisis y los conjuntos prediseñados Content Collections. Utiliza un lenguaje común basado en YAML y un enfoque de estado deseado que le permite emplear el mismo contenido de automatización tanto para las operaciones diarias como para el canal de CI/CD. Además, gracias a que funciona con casi todos los aspectos de su infraestructura de TI, se simplifica y agiliza la implementación de entornos uniformes de desarrollo, prueba y producción, lo cual aumenta la confiabilidad y la resistencia de las aplicaciones.
Ansible Automation Platform también se integra a Red Hat Advanced Cluster Management for Kubernetes para que pueda organizar los clústeres de Kubernetes en su canal de CI/CD. Asimismo, puede utilizar el lenguaje de automatización que las personas pueden comprender para diseñar y mantener los operadores de Red Hat OpenShift con mayor facilidad.