En muchas organizaciones, las aplicaciones son esenciales para el éxito. Si es tu caso, deberías implementar CI/CD para mantener organizada y escalada tu infraestructura de desarrollo y producción. Además de facilitar el trabajo a los desarrolladores.
El desarrollo de aplicaciones se ha convertido en el centro del éxito empresarial. Como resultado, los desarrolladores de aplicaciones son un recurso muy valioso, no solo dentro de las organizaciones, sino en la economía global. Según un informe de Stripe, los desarrolladores tenemos el potencial de aumentar conjuntamente el PIB mundial en 3 billones USD en la próxima década. Por lo que es más importante que nunca mantener la productividad y satisfacción.
¿Que es un pipeline CI/CD?
CI/CD es un método para distribuir aplicaciones de forma periódica, mediante el uso de la automatización en las etapas del desarrollo de las aplicaciones. Los principales conceptos que se atribuyen a un CI/CD son la integración continua (CI), la distribución continua (CD) y la implementación continua (el otro CI). Esto da como resultado la resolución de los problemas que pueda generar la integración de nuevo código entre tu equipo de desarrolladores.
Te mostraré cómo CI/CD puede automatizar el proceso de lanzamiento de los desarrollos de aplicaciones a entornos de desarrollo, test y producción. De este modo tu equipo de desarrolladores pueden dedicar tiempo a lo que realmente aporta valor: crear productos brillantes.
Pipeline CI/CD
Un pipeline CI/CD es un conjunto de prácticas para incorporar la automatización continua y el control permanente en todo el ciclo de vida. Desde las etapas de integración y prueba, hasta las de distribución e implementación. Veamos primero las características de un pipeline CI/CD y después veremos cada una de las prácticas que forman un pipeline CI/CD.
Característica de un pipeline CI/CD
Las características fundamentales de un pipeline CI/CD son:
- Integración y verificación: en un workflow de desarrollo de software típico, se espera que varios desarrolladores desarrollen en sus propias ramas. Estas se van integrando periódicamente en una rama de desarrollo común. Cuando se integra un nuevo código, o incluso antes de que se integre, es esencial verificar. Con ello podrás garantizar rápidamente que la integración no entra en conflicto con las funcionalidades existentes.
- Automatización: para lograr velocidad, es esencial que la verificación esté automatizada. Es decir, debería estar compuesto por una serie de pruebas automatizadas y revisión de la seguridad del desarrollo de forma continua. La automatización reduce el tiempo que los desarrolladores dedican a las tareas rutinarias y elimina los tiempos de espera en etapas de desarrollo.
- Cultura DevOps: tu equipo de desarrollo tiene un gran papel que desempeñar para garantizar la continuidad del pipeline. Puede detectar y solucionar errores con anticipación, antes de que se conviertan en problemas mayores. Podrán responder de inmediato a cambios más pequeños y generar pruebas con más frecuencia.
- Contenedores: no es obligatorio, pero si la implementación se basa en contenedores como Docker, reducirás la complejidad de la infraestructura. Además de estandarizar el sistema donde trabajará la aplicación.
Integración Continua (Continuous Integration CI)
La integración continua “CI” se ejecuta cuando un desarrollador sube alguna nueva implementación en una rama. Los cambios en la rama Git asociada al proceso de CI desencadenará el proceso de compilación en un Jenkins por ejemplo.
El pipeline de Jenkins se utiliza para impulsar el proceso de compilación y verificación. El control de calidad debe basarse en los requisitos mínimos de calidad que estén establecidos en tu organización. Por ejemplo:
- La compilación debe ser completada sin errores y alertas.
- Debe superar todas las prueba unitarias.
- El código debe cumplir con el estándar PSR-3. “RFC 5424 levels (debug, info, notice, warning, error, critical, alert, emergency)”
- No deben existir vulnerabilidades o alertas en el código, reportados con herramientas de Seguridad Continua como Snyk o Sonar.
Entrega continua (Continuous Delivery CD)
Una vez superado el control de calidad en CI, el equipo de desarrolladores pueden enviar sus desarrollos para incluir en la rama master. Los gestores de integración, fusionarán el código con la rama de desarrollo principal “master”. Esto desencadenara la Entrega Continua, y cada nuevo desarrollo una vez validado formará parte de la rama principal.
Idealmente, el control de calidad debería ejecutarse como parte del proceso de entrega continua (CD). Aunque esto puede llegar a ser ineficiente si la entrega de nuevos desarrollos se realiza en espacios de tiempos largos y no diarios. Por lo tanto, deberás añadir pruebas continuas (CT) de forma diaria para garantizar la calidad del desarrollo que esté producción.
Prueba continua (Continuous Test CT)
Este es un proceso diario en el que se examina el código con pruebas unitarias, análisis de seguridad y pruebas de rendimiento. Todo ello se ejecuta en la rama principal del desarrollo de la aplicación, la rama ‘master’. El escenario idóneo es ejecutar estas pruebas continuas (CT) en nuevos contenedores desplegados en un nuevo entorno para este propósito. Al finalizar las pruebas debes guardar el informe de resultado y así autodestruir los contenedores hasta la siguiente prueba.
El informe de la prueba continua se examina diariamente para evaluar si hay alguna nueva vulnerabilidad, alerta o posible mejora de rendimiento en alguna función. Tu equipo podrá evaluar la calidad de desarrollo diariamente, de este modo se podrá priorizar la mejora del sistema existente o nuevas funcionalidades. Los fallos en las pruebas continuas (TC) se deben consideran prioritarias y solucionar lo antes posible. También debes evaluar el desarrollo en tiempo real, con herramientas como Sentry.
Despliegue Controlado
La puesta en producción se simplifica, ya que la mayor parte del trabajo se ha realizado en las etapas previas. En la Integración Continua (CI), Entrega Continua (CD) y Prueba Continua (CT). El despliegue del desarrollo lo podrás ejecutar en cualquier momento después de haber superado el ciclo de prueba continua (CT). Tu aplicación después de superar CT cumple con los requisitos de calidad como para ser expuesta en producción.
Como comentamos la semana anterior, en como escalar tu API, el versionado es la clave del éxito a largo plazo de tus aplicaciones. Con el despliegue controlado podrás tener en producción diferentes versiones, pero recuerda aplicar Prueba Continua (CT) en cada una de ellas para evitar vulnerabilidades en producción.
Herramientas CI/CD
Para poder desarrollar tu pipeline CI/CD, existen muchas herramientas. Cada herramienta está enfocada a unas necesidades, así que deberías evaluar cuál de las siguientes herramientas que te proporciono son la mejor solución a tus necesidades.
Herramientas basadas en Jenkins como arquitectura principal:
- Jenkins Pipelines para impulsar el proceso CI
- Git Hooks para ejecutar la compilación de los cambios en las ramas
- SonarQube para verificar la calidad del código
- Robot Framework para automatizar las pruebas de código
- JMeter para pruebas de rendimiento
- OWASP ZAP para verificaciones de seguridad
No todas las infraestructuras se basan en Jenkins, hay otras herramientas comerciales y gratuitas disponibles:
Algunos proveedores de servicios Git, también ofrecen su propio market de herramientas CI/CD:
Además, algunos proveedores cloud también ofrecen herramientas CI/CD para acelerar la integración:
Conclusión
Un pipeline CI/CD puede mejorar significativamente el tiempo de despliegue de una aplicación. Ayudando a mantener la estabilidad y la calidad del desarrollo de la aplicación. Sin embargo, la implementación de un pipeline CI/CD en tu organización, no requiere únicamente la tecnología adecuada, también es primordial el compromiso de tu equipo de desarrolladores.
Con CI/CD mejoras la productividad entre tu equipo de desarrolladores. Profesionalmente satisfechos con nuevos procesos de desarrollo, incluida la integración y la entrega continua (CI/CD).
Desarrolladores felices, clientes felices
Al implementar un pipeline CI/CD, tus desarrolladores dispondrá de herramientas para ejecutar y probar rápidamente ideas innovadoras. Esto fomenta una nueva cultura co-innovadora, creando seguramente productos brillantes.
¿Implementas algún pipeline CI/CD en tu organización? ¿Que herramientas utilizas? ¿Tienes alguna estrategia de control de calidad?
Referencias: