Guía para principiantes: creando un pipeline de DevOps

Si eres nuevo en DevOps, echa un vistazo a esta guía para crear tu primer pipeline en cinco pasos.

Guía para principiantes: creando un pipeline de DevOps

DevOps se ha convertido en la solución estándar para solucionar procesos de desarrollo de software lentos, fragmentados o ineficaces. El problema es que, si eres nuevo en DevOps y no sabes por dónde empezar, es posible que te falte comprensión sobre estos métodos. En este artículo se definirá qué es un pipeline de DevOps y se ofrecerá una guía para crear uno en cinco pasos. Aunque este tutorial no es exhaustivo, debería proporcionarte una base para comenzar tu camino y expandir tus conocimientos en el futuro. Comencemos con un poco de historia.

Mi viaje por DevOps

Antes trabajaba en el equipo de nube de Citi Group, desarrollando una aplicación web Infrastructure-as-a-Service (IaaS) para gestionar la infraestructura en la nube de Citi, pero siempre me interesó cómo hacer que el proceso de desarrollo fuera más eficiente y cómo promover cambios culturales positivos en el equipo de desarrolladores. Encontré la respuesta en un libro recomendado por Greg Lavender, director técnico de arquitectura e infraestructura en la nube de Citi. El libro se llama “El Proyecto Fénix” (The Phoenix Project), y en él se explican los principios de DevOps, presentándose como una novela.

En la tabla en la contraportada del libro se muestra la frecuencia con la que las diferentes compañías implementan sus sistemas en el entorno de lanzamiento de versiones:

Amazon: 23,000 por día
Google: 5,500 por día
Netflix: 500 por día
Facebook: Una vez al día
Twitter: 3 veces a la semana
Compañía típica: Una vez cada 9 meses

¿Cómo es posible que Amazon, Google y Netflix logren tales frecuencias? Todo porque estas empresas han ideado cómo crear un pipeline de DevOps casi perfecto.

Estábamos lejos de ello hasta que implementamos DevOps en Citi. En ese momento, mi equipo trabajaba en diferentes entornos, pero el despliegue en el servidor de desarrollo era completamente manual. Todos los desarrolladores tenían acceso solo a un servidor de desarrollo basado en IBM WebSphere Application Server Community Edition. El problema era que el servidor se apagaba cada vez que varios usuarios intentaban desplegar al mismo tiempo, por lo que los desarrolladores debían comunicarse entre sí sobre sus intenciones, lo cual era bastante doloroso. Además, existían problemas con la baja cobertura de pruebas de código, procesos de despliegue manual complicados y la falta de capacidad para rastrear el despliegue de código asociado con una tarea o historia de usuario específica.

Me di cuenta de que era necesario hacer algo y encontré a un colega afín. Decidimos colaborar en la creación del primer canal DevOps; él configuró una máquina virtual y un servidor de aplicaciones Tomcat, mientras yo trabajaba en Jenkins, integrando Atlassian Jira y BitBucket, y también mejorando la cobertura de pruebas de código. Este proyecto paralelo fue muy exitoso: casi automatizamos muchos procesos, logramos casi el 100% de operatividad de nuestro servidor de desarrollo, implementamos rastreo y mejoramos la cobertura de pruebas de código, así como añadimos la capacidad de vincular ramas en Git con tareas en Jira o despliegues. La mayoría de las herramientas que utilizamos para construir nuestro canal DevOps eran de código abierto.

Ahora entiendo cuán simple era nuestro pipeline DevOps: no utilizábamos extensiones como Jenkins files o Ansible. Sin embargo, este simple canal funcionaba bien, posiblemente gracias al principio de Pareto (también conocido como la regla del 80/20).

Una breve introducción a DevOps y al pipeline CI/CD

Si preguntas a varias personas: «¿Qué es DevOps?», probablemente obtendrás varias respuestas diferentes. DevOps, al igual que Agile, ha evolucionado para abarcar muchas disciplinas distintas, pero la mayoría de la gente estará de acuerdo en algunas cosas: DevOps es una práctica de desarrollo de software o ciclo de vida de desarrollo de software (SDLC), cuyo principio central es un cambio cultural en el que desarrolladores y no desarrolladores coexisten en un entorno en el que:

Las operaciones que antes se realizaban manualmente están automatizadas;
Cada uno hace lo que mejor sabe hacer;
El número de implementaciones en un período determinado aumenta; La capacidad de trabajo se incrementa;
La flexibilidad del desarrollo se mejora.

Aunque tener las herramientas de software adecuadas no es lo único necesario para crear un entorno DevOps, algunas herramientas son fundamentales. Una herramienta clave es la integración y despliegue continuos (CI/CD). En este pipeline, los entornos tienen diferentes etapas (por ejemplo, DEV, INT, TST, QA, UAT, STG, PROD), muchas operaciones están automatizadas y los desarrolladores pueden escribir código de alta calidad, lograr flexibilidad en el desarrollo y una alta frecuencia de despliegues.

Este artículo describe un enfoque de cinco etapas para crear un pipeline DevOps, similar al representado en el siguiente diagrama, utilizando herramientas de código abierto.

Paso 1: Métodos de CI/CD

Lo primero que necesitas es una herramienta para CI/CD. Jenkins, una herramienta de código abierto basada en Java y distribuida bajo la licencia MIT, es el medio que ha popularizado la dirección de DevOps y se ha convertido en el estándar de facto.

¿Entonces, qué es Jenkins? Piensa en ello como un tipo de control remoto mágico que puede comunicarse con varios servicios y herramientas y organizarlos. Una herramienta de CI/CD como Jenkins por sí sola es inútil, pero se vuelve más poderosa a medida que se conecta a diversas herramientas y servicios.

Jenkins es solo una de las muchas herramientas de código abierto para CI/CD que puedes usar para construir un pipeline DevOps.

Jenkins: Creative Commons y MIT
Travis CI: MIT
CruiseControl: BSD
Buildbot: GPL
Apache Gump: Apache 2.0
Cabie: GNU

Así es como se ven los procesos de DevOps con una herramienta de CI/CD:

Guía para principiantes: creando un pipeline de DevOps

Tienes una herramienta de CI/CD funcionando en tu localhost, pero por ahora, no puedes hacer mucho. Vamos a pasar a la siguiente etapa del viaje al mundo de DevOps.

Paso 2: Gestión de sistemas de control de versiones

La mejor (y probablemente la más sencilla) manera de comprobar que tu herramienta de CI/CD puede hacer magia es integrarse con una herramienta de control de código fuente (SCM). ¿Por qué necesitas control sobre el código fuente? Supongamos que estás desarrollando una aplicación. Cada vez que creas una aplicación, estás programando, independientemente de si usas Java, Python, C++, Go, Ruby, JavaScript o cualquiera de los miles de lenguajes de programación. El código que escribes se llama código fuente. Al principio, especialmente cuando trabajas solo, probablemente puedes poner todo en un directorio local. Pero cuando el proyecto crece y comienzas a invitar a otras personas a colaborar, necesitas una forma de prevenir conflictos y compartir modificaciones de manera efectiva. También necesitas una manera de restaurar versiones anteriores, porque hacer copias de seguridad y copiar/pegar en ellas ya está obsoleto. Tú (y tus compañeros de equipo) necesitan algo mejor.

Es aquí donde una herramienta de control de código fuente se vuelve prácticamente indispensable. Esta herramienta almacena tu código en repositorios, lleva un registro de versiones y coordina el trabajo de los miembros del proyecto.

Aunque hay muchas herramientas de control de código fuente, Git es el estándar, y esto es cierto. Recomiendo encarecidamente usar Git, aunque, si lo prefieres, hay otras opciones de código abierto.

Git: GPLv2 y LGPL v2.1
Subversion: Apache 2.0
Concurrent Versions System (CVS): GNU
Vesta: LGPL
Mercurial: GNU GPL v2+

Así es como se ve un pipeline de DevOps con la adición de herramientas de control de código fuente.

Guía para principiantes: creando un pipeline de DevOps

Una herramienta de CI/CD puede automatizar los procesos de verificación, obtención de código fuente y colaboración entre miembros. ¿No está mal? Pero, ¿cómo convertir esto en una aplicación funcional que miles de millones de personas puedan usar y disfrutar?

Paso 3: Crear una herramienta de automatización de compilación

¡Excelente! Puedes revisar el código y hacer cambios en el sistema de control de versiones, así como invitar a tus amigos a colaborar en el desarrollo. Sin embargo, aún no has creado una aplicación. Para crear una aplicación web, debe ser compilada y empaquetada en un formato de paquete implementable o ejecutarse como un archivo ejecutable. (Ten en cuenta que un lenguaje de programación interpretado, como JavaScript o PHP, no necesita ser compilado).

Utiliza la herramienta de automatización de compilación. Independientemente de qué herramienta de automatización de compilación elijas, todas persiguen el mismo objetivo: compilar el código fuente en el formato deseado y automatizar la tarea de limpieza, compilación, prueba e implementación en un entorno específico. Las herramientas de compilación variarán según tu lenguaje de programación, pero aquí hay algunas opciones comunes de código abierto.

Nombre
Licencia
Lenguaje de programación

Maven
Apache 2.0
Java

Ant
Apache 2.0
Java

Gradle
Apache 2.0
Java

Bazel
Apache 2.0
Java

Make
GNU
N/A

Grunt
MIT
JavaScript

Gulp
MIT
JavaScript

Buildr
Apache
Ruby

Rake
MIT
Ruby

A-A-P
GNU
Python

SCons
MIT
Python

BitBake
GPLv2
Python

Cake
MIT
C#

ASDF
Expat (MIT)
LISP

Cabal
BSD
Haskell

¡Genial! Puedes colocar los archivos de configuración de la herramienta de automatización de compilación en el sistema de control de versiones y permitir que tu herramienta CI/CD los reúna todos.

Guía para principiantes: creando un pipeline de DevOps

Todo bien, ¿verdad? Pero, ¿dónde implementarás tu aplicación?

Paso 4: Servidor para aplicaciones web

Hasta ahora, tienes un archivo empaquetado que puede ser tanto ejecutable como instalable. Para que cualquier aplicación sea realmente útil, debe ofrecer algún servicio o interfaz, pero necesitas un contenedor para alojar tu aplicación.

El servidor para aplicaciones web es precisamente ese contenedor. El servidor proporciona un entorno donde se puede definir la lógica del paquete implementado. También proporciona una interfaz y ofrece servicios web, abriendo sockets al mundo exterior. Necesitas un servidor HTTP, así como algún entorno (por ejemplo, una máquina virtual) para implementarlo. Mientras tanto, asumamos que aprenderás más sobre esto más adelante (aunque hablaré sobre contenedores más abajo).

Existen varios servidores de aplicaciones web de código abierto.

Nombre
Licencia
Lenguaje de programación

Tomcat
Apache 2.0
Java

Jetty
Apache 2.0
Java

WildFly
GNU Lesser Public
Java

GlassFish
CDDL & GNU Less Public
Java

Django
3-Clause BSD
Python

Tornado
Apache 2.0
Python

Gunicorn
MIT
Python

Python
MIT
Python

Rails
MIT
Ruby

Node.js
MIT
Javascript

Tu pipeline de DevOps está casi listo para usar. ¡Buen trabajo!

Guía para principiantes: creando un pipeline de DevOps

Aunque se puede detener aquí y encargarse de la integración por cuenta propia, la calidad del código es un aspecto importante para cualquier desarrollador de aplicaciones y debe ser una preocupación constante.

Paso 5: Cobertura de pruebas de código

La implementación de pruebas puede ser otro requisito engorroso, pero los desarrolladores deben detectar cualquier error en la aplicación en una etapa temprana y mejorar la calidad del código para garantizar que los usuarios finales estén satisfechos. Afortunadamente, existen muchas herramientas de código abierto para probar su código y generar recomendaciones para mejorar su calidad. Aún mejor, la mayoría de las herramientas CI/CD pueden conectarse a estas herramientas y automatizar el proceso.

Las pruebas de código constan de dos partes: los marcos de prueba que ayudan a escribir y ejecutar pruebas, así como herramientas de sugerencia que ayudan a mejorar la calidad del código.

Sistemas de pruebas de código

Nombre
Licencia
Lenguaje de programación

JUnit
Licencia Pública de Eclipse
Java

EasyMock
Apache
Java

Mockito
MIT
Java

PowerMock
Apache 2.0
Java

Pytest
MIT
Python

Hypothesis
Mozilla
Python

Tox
MIT
Python

Sistemas de sugerencias para mejorar el código

Nombre
Licencia
Lenguaje de programación

Cobertura
GNU
Java

CodeCover
Eclipse Public (EPL)
Java

Coverage.py
Apache 2.0
Python

Emma
Licencia Pública Común
Java

JaCoCo
Licencia Pública de Eclipse
Java

Hypothesis
Mozilla
Python

Tox
MIT
Python

Jasmine
MIT
JavaScript

Karma
MIT
JavaScript

Mocha
MIT
JavaScript

Jest
MIT
JavaScript

Tenga en cuenta que la mayoría de las herramientas y marcos mencionados anteriormente están escritos para Java, Python y JavaScript, ya que C++ y C# son lenguajes de programación propietarios (aunque GCC tiene código abierto).

Ahora que ha implementado las herramientas de cobertura de código, su pipeline de DevOps debería parecerse al diagrama mostrado al principio de esta guía.

Pasos adicionales

Contenedores

Como mencioné anteriormente, puede alojar su servidor en una máquina virtual o en un servidor, pero los contenedores son una solución popular.

¿Qué son los contenedores? La breve explicación es que una máquina virtual necesita una gran cantidad de memoria del sistema operativo, que supera el tamaño de la aplicación, mientras que un contenedor solo necesita algunas bibliotecas y configuraciones para ejecutar la aplicación. Es evidente que las máquinas virtuales todavía tienen áreas de aplicación importantes, pero un contenedor es una solución ligera para alojar aplicaciones, incluidas las aplicaciones servidoras.

Aunque existen otras opciones de contenedores, las más populares son Docker y Kubernetes.

Docker: Apache 2.0
Kubernetes: Apache 2.0

Herramientas de automatización intermedias

Nuestro pipeline de DevOps se centra principalmente en la creación y despliegue colaborativo de aplicaciones, pero hay muchas otras cosas que se pueden hacer con herramientas de DevOps. Una de ellas es el uso de herramientas de Infraestructura como Código (IaC), que también se conocen como herramientas de automatización intermedia. Estas herramientas ayudan a automatizar la instalación, gestión y otras tareas para software intermedio. Por ejemplo, una herramienta de automatización puede extraer aplicaciones como servidores de aplicaciones web, bases de datos y herramientas de monitoreo, configurarlas correctamente y desplegarlas en el servidor de aplicaciones.

Aquí hay algunas herramientas de automatización intermedia de código abierto:

Ansible: GNU Public
SaltStack: Apache 2.0
Chef: Apache 2.0
Puppet: Apache o GPL

Guía para principiantes: creando un pipeline de DevOps

Descubre más sobre cómo obtener una profesión demandada desde cero o mejorar tus habilidades y salario con los cursos online de pago de SkillFactory:

más cursos

Útil

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster