Guía para principiantes: creación de una canalización de DevOps

Si es nuevo en DevOps, consulte esta guía para crear su primer proceso de cinco pasos.

Guía para principiantes: creación de una canalización de DevOps

DevOps se ha convertido en la solución estándar para solucionar procesos de desarrollo de software lentos, desconectados o rotos. El problema es que si eres nuevo en DevOps y no sabes por dónde empezar, es posible que no comprendas estas técnicas. Este artículo se centrará en la definición de una canalización de DevOps y también ofrecerá instrucciones sobre cómo crearla en cinco pasos. Aunque este tutorial no es exhaustivo, debería brindarle una base para comenzar y ampliar sus conocimientos en el futuro. Pero comencemos con la historia.

Mi viaje de DevOps

Anteriormente trabajé para el equipo de nube de Citi Group desarrollando una aplicación web de infraestructura como servicio (IaaS) para administrar la infraestructura de nube de Citi, pero siempre me ha interesado cómo hacer que el proceso de desarrollo sea más eficiente y generar un cambio cultural positivo. al equipo de desarrollo. Encontré la respuesta en un libro recomendado por Greg Lavender, CTO de Arquitectura e Infraestructura de la Nube de Citi. El libro se llamó El Proyecto Fénix (El Proyecto Fénix) y explica los principios de DevOps mientras se lee como una novela.

La tabla al final del libro muestra con qué frecuencia diferentes empresas implementan sus sistemas en un entorno de lanzamiento:

Amazonas: 23 por día
Google: 5 por día
Netflix: 500 por día
Facebook: una vez al día
Twitter: 3 veces por semana
Empresa típica: Una vez cada 9 meses

¿Cómo son posibles las frecuencias de Amazon, Google y Netflix? Esto se debe a que estas empresas descubrieron cómo crear un proceso de DevOps casi perfecto.

Estábamos lejos de esto hasta que implementamos DevOps en Citi. En ese momento, mi equipo tenía diferentes entornos, pero la implementación en el servidor de desarrollo era completamente manual. Todos los desarrolladores tenían acceso a un solo servidor de desarrollo basado en IBM WebSphere Application Server Community Edition. El problema era que el servidor se cerraba cada vez que varios usuarios intentaban implementarlo al mismo tiempo, por lo que los desarrolladores tenían que informarse mutuamente de sus intenciones, lo cual era bastante doloroso. Además, hubo problemas con la cobertura de pruebas de código de bajo nivel, procesos de implementación manual engorrosos y la imposibilidad de rastrear la implementación del código asociado con una tarea o historia de usuario en particular.

Me di cuenta de que era necesario hacer algo y encontré un colega con ideas afines. Decidimos colaborar en la construcción del proceso inicial de DevOps: él configuró una máquina virtual Tomcat y un servidor de aplicaciones mientras yo trabajaba en Jenkins, integró Atlassian Jira y BitBucket, y trabajé en la cobertura de pruebas de código. Este proyecto paralelo fue muy exitoso: automatizamos casi por completo muchos procesos, alcanzamos casi el 100 % de tiempo de actividad en nuestro servidor de desarrollo, brindamos seguimiento y mejoramos la cobertura de las pruebas de código, y agregamos la capacidad de vincular sucursales en Git con problemas en Jira o la implementación. La mayoría de las herramientas que utilizamos para construir nuestro proceso de DevOps eran de código abierto.

Ahora entiendo lo simple que era nuestro proceso de DevOps: no usamos extensiones como archivos Jenkins o Ansible. Sin embargo, este sencillo canal funcionó bien, quizás gracias al principio de Pareto (también conocido como regla 80/20).

Una breve introducción a DevOps y el proceso de CI/CD

Si pregunta a algunas personas "¿Qué es DevOps?", probablemente obtendrá algunas respuestas diferentes. DevOps, al igual que Agile, ha evolucionado para abarcar muchas disciplinas diferentes, 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, por sus siglas en inglés) cuyo principio central es cambiar la cultura en la que desarrolladores y no desarrolladores. -Los desarrolladores existen en un entorno donde:

Se han automatizado operaciones que antes se realizaban manualmente;
Cada uno hace lo que mejor sabe hacer;
Aumenta el número de implementaciones durante un cierto período de tiempo; Mayor rendimiento;
Mayor flexibilidad de desarrollo.

Si bien tener las herramientas de software adecuadas no es lo único que necesita para crear un entorno DevOps, algunas herramientas son esenciales. La herramienta clave es la integración continua y la implementación continua (CI/CD). En este proceso, 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 agilidad de desarrollo y una alta frecuencia de implementación.

Este artículo describe un enfoque de cinco pasos para crear una canalización de DevOps similar a la que se muestra en el siguiente diagrama utilizando herramientas de código abierto.

Paso 1: Métodos CI/CD

Lo primero que necesita es una herramienta CI/CD. Jenkins, una herramienta de código abierto basada en Java y con licencia MIT, es la herramienta que popularizó DevOps y se convirtió en el estándar de facto.

Entonces, ¿qué es Jenkins? Piense en ello como una especie de control remoto universal mágico que puede comunicarse con varios servicios y herramientas y organizarlos. Por sí sola, una herramienta CI/CD como Jenkins es inútil, pero se vuelve más poderosa a medida que se conecta a diferentes herramientas y servicios.

Jenkins es solo una de las muchas herramientas de CI/CD de código abierto que puede utilizar para crear su canal de DevOps.

Jenkins: Creative Commons y MIT
Travis CI: MIT
Control de crucero: BSD
Robot de construcción: GPL
Apache Gump: Apache 2.0
Cabie: GNU

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

Guía para principiantes: creación de una canalización de DevOps

Tiene una herramienta CI/CD ejecutándose en su host local, pero no hay mucho que pueda hacer en este momento. Pasemos a la siguiente etapa del viaje de DevOps.

Paso 2: Administrar los sistemas de control del código fuente

La mejor forma (y posiblemente la más fácil) de probar que su herramienta CI/CD puede hacer magia es integrarla con una herramienta de control de código fuente (SCM). ¿Por qué necesitas control de fuente? Digamos que está desarrollando una aplicación. Cada vez que creas una aplicación, estás programando, ya sea que uses Java, Python, C++, Go, Ruby, JavaScript o cualquiera de los millones de lenguajes de programación. El código que escribe se llama código fuente. Al principio, especialmente cuando trabajas solo, probablemente esté bien poner todo en un directorio local. Pero a medida que el proyecto crece e invitas a otras personas a contribuir, necesitas una manera de evitar conflictos y al mismo tiempo compartir las modificaciones de manera efectiva. También necesita una forma de restaurar versiones anteriores, porque crear copias de seguridad y copiarlas y pegarlas ya está obsoleto. Tú (y tus compañeros de equipo) necesitáis algo mejor.

Aquí es donde el control del código fuente se vuelve casi una necesidad. Esta herramienta mantiene su código en repositorios, realiza un seguimiento de las versiones y coordina el trabajo de los participantes del proyecto.

Aunque existen muchas herramientas de control de código fuente, Git es el estándar, y con razón. Recomiendo encarecidamente usar Git, aunque existen otras opciones de código abierto si lo desea.

Git: GPLv2 y LGPL v2.1
Subversión: Apache 2.0
Sistema de Versiones Concurrentes (CVS): GNU
Vesta: LGPL
Mercurial: GNU GPL v2+

Así es como se ve una canalización de DevOps con la adición de controles de código fuente.

Guía para principiantes: creación de una canalización de DevOps

Una herramienta CI/CD puede automatizar los procesos de verificación, adquisición de código fuente y colaboración entre miembros. ¿Nada mal? Pero, ¿cómo se puede convertir en una aplicación funcional para que miles de millones de personas puedan utilizarla y apreciarla?

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

¡Excelente! Puedes verificar el código y realizar cambios en el sistema de control del código fuente, así como invitar a tus amigos a contribuir al desarrollo. Pero aún no has creado una aplicación. Para crear una aplicación web, debe compilarse y empaquetarse en un formato de paquete implementable o ejecutarse como un archivo ejecutable. (Tenga en cuenta que no es necesario compilar un lenguaje de programación interpretado como JavaScript o PHP).

Utilice una herramienta de automatización de compilación. Independientemente de qué herramienta de automatización de compilación elija utilizar, todas comparten el mismo objetivo: compilar el código fuente en algún 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 su lenguaje de programación, pero aquí se muestran algunas opciones comunes de código abierto.

nombre
Licencia
Lenguaje de programación

Maven
Apache 2.0
Java

Hormiga
Apache 2.0
Java

Gradle
Apache 2.0
Java

Bazel
Apache 2.0
Java

Haz
GNU
N/A

Gruñido
MIT
JavaScript

Trago
MIT
JavaScript

Constructor
APACHE
Rubí

Rastrillo
MIT
Rubí

AAP
GNU
Python

Desventajas
MIT
Python

bitcocinar
GPLv2
Python

Bizcocho
MIT
C#

ASDF
Expatriado (MIT)
CECEO

cábala
BSD
Haskell

¡Excelente! Puede poner los archivos de configuración de la herramienta de automatización de compilación en el control de fuente y dejar que su herramienta CI/CD junte todo.

Guía para principiantes: creación de una canalización de DevOps

Está todo bien, ¿no? ¿Pero dónde implementar su aplicación?

Paso 4: Servidor de aplicaciones web

Hasta ahora, tienes un archivo empaquetado que puede ser ejecutable o instalable. Para que cualquier aplicación sea realmente útil, debe proporcionar algún tipo de servicio o interfaz, pero necesita un contenedor para alojar su aplicación.

El servidor de aplicaciones web es precisamente uno de esos contenedores. El servidor proporciona un entorno en el que se puede definir la lógica del paquete que se implementa. El servidor también proporciona una interfaz y ofrece servicios web abriendo sockets al mundo exterior. Necesita un servidor HTTP y algún entorno (como una máquina virtual) para configurarlo. Por ahora, supongamos que aprende más sobre esto (aunque cubriré los contenedores a continuación).

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

nombre
Licencia
Lenguaje de programación

Gato
Apache 2.0
Java

Embarcadero
Apache 2.0
Java

Vuelo salvaje
Público menor de GNU
Java

Pescador de pescado
CDDL y GNU menos públicos
Java

Django
BSD de 3 cláusulas
Python

Tornado
Apache 2.0
Python

gunicornio
MIT
Python

Python
MIT
Python

Rieles
MIT
Rubí

Node.js
MIT
Javascript

Su proceso de DevOps está casi listo para usarse. ¡Buen trabajo!

Guía para principiantes: creación de una canalización de DevOps

Si bien puede detenerse allí y realizar la integración usted mismo, la calidad del código es algo importante de lo que debe preocuparse un desarrollador de aplicaciones.

Paso 5: cobertura de prueba de código

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

Las pruebas de código se dividen en dos partes: marcos de prueba de código que le ayudan a escribir y ejecutar pruebas, y herramientas de sugerencias que ayudan a mejorar la calidad del código.

Sistemas de prueba de código

nombre
Licencia
Lenguaje de programación

JUnit
Licencia pública Eclipse
Java

Fácil Mock
APACHE
Java

Mockito
MIT
Java

Mock de poder
Apache 2.0
Java

Pytest
MIT
Python

Hipótesis
Mozilla
Python

Tox
MIT
Python

Sistemas de recomendación de mejora de código.

nombre
Licencia
Lenguaje de programación

Cobertura
GNU
Java

Portada del código
Eclipse público (EPL)
Java

Cobertura.py
Apache 2.0
Python

Emma
Licencia pública común
Java

jacoco
Licencia pública Eclipse
Java

Hipótesis
Mozilla
Python

Tox
MIT
Python

Jazmín
MIT
JavaScript

Karma
MIT
JavaScript

Mocha
MIT
JavaScript

Broma
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 es de código abierto).

Ahora que ha implementado herramientas de cobertura de código, su proceso de DevOps debería verse similar al diagrama que se muestra al comienzo de este tutorial.

Pasos adicionales

contenedores

Como dije antes, puedes alojar tu servidor en una máquina virtual o en un servidor, pero los contenedores son una solución popular.

¿Qué son los contenedores? La explicación breve es que una máquina virtual necesita una enorme cantidad de memoria del sistema operativo, más que el tamaño de una aplicación, mientras que un contenedor sólo necesita unas pocas bibliotecas y configuraciones para ejecutar una aplicación. Obviamente, todavía existen usos importantes para una máquina virtual, pero un contenedor es una solución liviana para alojar una aplicación, incluido un servidor de aplicaciones.

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

Ventana acoplable: Apache 2.0
Kubernetes: Apache 2.0

Herramientas de automatización intermedias

Nuestro proceso de DevOps se centra principalmente en la creación conjunta y la implementación de aplicaciones, pero hay muchas otras cosas que puede hacer con las herramientas de DevOps. Uno de ellos es el uso de herramientas de infraestructura como código (IaC), que también se conocen como herramientas de automatización de middleware. Estas herramientas ayudan a automatizar la instalación, la administración y otras tareas del middleware. Entonces, por ejemplo, una herramienta de automatización puede extraer aplicaciones como un servidor de aplicaciones web, una base de datos y una herramienta de monitoreo con las configuraciones correctas e implementarlas en un servidor de aplicaciones.

A continuación se muestran algunas herramientas de automatización de middleware de código abierto:

Ansible: Público GNU
SaltStack: Apache 2.0
Chef: Apache 2.0
Marioneta: Apache o GPL

Guía para principiantes: creación de una canalización de DevOps

Descubra los detalles de cómo conseguir una profesión solicitada desde cero o subir de nivel en términos de habilidades y salario completando los cursos en línea pagos de SkillFactory:

más cursos

útil

Fuente: habr.com

Añadir un comentario