[:es]El objetivo de esta publicación es compartir contigo algunas ideas y experiencias que hemos recopilado a lo largo de los años trabajando con clientes y socios para entregar software que cumpla con sus requisitos comerciales a tiempo.[:en]The goal of this post is to share with you some ideas and experiences we’ve been collecting through the years working with customers and partners to deliver software that meets their business requirements on time.[:]
[:es]
La aplicación de los principios ágiles para desarrollar software permite la entrega incremental de nuevas características a los clientes. Pero en algún momento nos enfrentamos a cuellos de botella para llevar estas nuevas características a los entornos de producción debido a las siguientes razones:
Cuando surgen estos problemas, comenzamos a acumular los cambios que se moverán a cada etapa (la etapa de producción es la más común), lo que resulta en lanzamientos poco frecuentes y elimina la oportunidad de recibir comentarios rápidamente de los usuarios.
Las organizaciones podrían adoptar un enfoque para implementar procesos más manuales y una colaboración constante entre los equipos, pero en algún momento esto reducirá la productividad y generará agotamiento en los miembros del equipo debido a la cantidad de tiempo y reuniones que tendrán que llevar a cabo para lograr resultados. Al final del día, automatizar los pasos de compilación, prueba e implementación ayuda a completar las características de manera eficiente y rápida.
El punto es que aplicar una cultura de DevOps desde el principio podría ser realmente difícil, pero hay una cita importante relacionada con esto:
«DevOps tiene la idea de que si algo es doloroso, deberías hacerlo con más frecuencia».
[:en]
The application of agile principles to develop software makes possible the incremental delivery of new features to the customers. But at some point we face bottlenecks to move these new features into production environments due the following reasons:
When these problems come up we start to batch up the changes to be moved to each stage (production stage is the most common one) this ends up in infrequent releases and removes the opportunity to receive feedback from users quickly.
Organizations could take an approach to implement more manual processes and constant collaboration between teams, but at some point this is going to reduce productivity and generate burnout in team members due the amount of time and meetings they will have to achieve results. At the end of the day automating the build, test and deployment steps helps to get the features done efficiently and quickly.
The point is that apply a DevOps culture at the beginning could be really hard but there is an important quote related to this:
“DevOps takes the view that if something is painful, you should do it more often”
[:]
[:es]
Comencemos definiendo qué es CI/CD. La Integración Continua (CI) y la Implementación/Entrega Continua (CD) son prácticas que automatizan los pasos que se deben realizar para lanzar nuevas versiones de software con las siguientes ventajas:
La Integración Continua reduce el riesgo de problemas de integración y mejora la calidad del código. Los desarrolladores envían sus cambios al repositorio de código de manera regular y comprueban si el repositorio de código sigue funcionando cuando otros desarrolladores están contribuyendo. Más que un componente técnico, la Integración Continua es un componente cultural donde los desarrolladores aprenden buenas prácticas para integrar sus cambios con frecuencia.
Por lo tanto, hemos integrado GitFlow en nuestro flujo de trabajo de desarrollo de software. Nos ha ayudado a aplicar buenas prácticas para trabajar colectivamente, mantener el historial de nuestros repositorios coherente y reducir significativamente el riesgo de problemas de integración e introducción de errores.
Estas son algunas herramientas que necesitas para aplicar los principios de CI:
Un servidor de CI tiene las siguientes misiones:
Después de completar todos los pasos de la Integración Continua, entra en juego la Entrega Continua. Esta práctica automatiza algunos de los pasos necesarios para entregar nuestras soluciones al entorno de producción.
La entrega continua integra un conjunto de procesos, herramientas y una cultura de colaboración y retroalimentación continua para cumplir con la misión. Un cambio de mentalidad de tu equipo es importante para:
Implementar un pipeline requiere identificar los puntos problemáticos y cuellos de botella que podrían afectar el proceso de entrega, e implementar prácticas para detectar errores temprano es relevante. Después de identificar estos elementos, piensa en cuáles se pueden automatizar (no es obligatorio automatizar todos ellos), es muy relevante gestionar algunos escenarios manualmente. Esto es lo que llamamos puertas manuales, algunos de ellos pueden ser cuestionables, mientras que otros pueden ser legítimos.
Escenario legítimo:
Escenario cuestionable:
Otro paso importante para la entrega continua es definir una etapa casi igual a la producción para validar las configuraciones del entorno y realizar pruebas manuales. Esto ayuda a avanzar con la auditoría de seguridad, encontrar vulnerabilidades y detectar errores temprano. Tendrás mucho espacio para mejorar.
La última práctica que se puede aplicar es la implementación continua, donde la integración continua y la entrega continua se llevan al extremo, haciendo que este proceso sea completamente automatizado.
El código enviado por los desarrolladores se prueba, compila e implementa automáticamente sin intervención manual. Grandes empresas han adoptado esta práctica, incluyendo elementos para validar las versiones en producción con la ayuda de sus usuarios y evitar posibles indisponibilidades de servicios:
No queremos crear un ranking o algo así, a lo largo de los años hemos visto proyectos que han implementado soluciones con estas herramientas:
No es tan importante conocer todos los detalles o la semántica de las diferencias entre la integración continua, la entrega continua y la implementación continua. En este punto, deberías poder identificar los conceptos, pasos, prácticas y beneficios de comenzar con la implementación de esta cultura en tus proyectos.
Esta publicación ha sido escrita con el apoyo y la colaboración de Fernanda Jaramillo e Ihann Pascuas Ihann Pascuas. Gracias a Ayté y TBBC por proporcionar las herramientas y proyectos para validar estas ideas.
Todo lo mejor, no dudes en contactarnos si tienes preguntas.
Esteban Cerón
[:en]
Let’s start by defining what CI/CD is. Continuous Integration (CI) and Continuous Deployment/Delivery (CD) are practices that automate the steps that must be performed to release new versions of software with the following advantages:
Continuous Integration reduces the risk of integration issues and improves code quality. Developers commit their changes to the codebase regularly and check whether the codebase still works when other developers are contributing. More than a technical component, Continuous Integration is a cultural component where developers learn good practices to integrate their changes frequently.
Therefore, we have integrated GitFlow in our software development workflow. It has helped us to apply good practices to work collectively, keep the history of our repositories consistent and reduce significantly the risk of integration issues and bugs introduction.
These are some tools you need to apply the principles of CI:
A CI server has the following missions:
After all steps of Continuous Integration have been completed, Continuous Delivery takes place. This practice automates some of the steps required to deliver our solutions to the production environment.
Continuous delivery integrates a set of processes, tools and a culture of collaboration and continuous feedback to accomplish the mission. A change of mentality of your team is important to:
Implementing a pipeline requires the identification of pain points and bottlenecks that could affect the delivery process, and implementing practices to detect bugs early is relevant. After you have identified these items, think about which ones can be automated (it is not mandatory to automate all of them), it is very very relevant to manage some scenarios manually. This is what we call manual gates, some of them might be questionable, whereas some could be legitimate.
Legitimate scenario:
Questionable scenario:
Another important step for continuous delivery is the definition of one stage almost equal to production to validate environment configurations and execute manual testing is helpful to advance with the security audit, find vulnerabilities and detect bugs early. You are going to have a lot of space to improve.
The final practice you can apply is continuous deployment where continuous integration and continuous delivery are taken to the extreme making this process entirely automated.
The code pushed by developers is automatically tested, built and deployed without any manual intervention. Big companies have adopted this practice including elements to validate the releases in production with help of their users and avoid potential unavailability of services:
We don’t want to create a ranking or something like that, thru the years we’ve seen projects that have implemented solutions with these tools:
It is not All-important to know every detail or the semantics about the differences between continuous integration, continuous delivery and continuous deployment. At this point you should be able to identify the concepts, steps, practices and benefits of starting with the implementation of this culture in your projects.
This post has been written with the support and collaboration of Fernanda Jaramillo and Ihann Pascuas, Thanks to Ayté and TBBC for providing the tools and projects to validate these ideas.
All the best, don’t hesitate to contact us if you have questions.
Esteban Cerón
[:]
17
Jul17
Jul
Leave A Comment