DevOps para
principiantes
Manual de implementacin
FACULTAD DE INGENIERIA
Tabla de contenido
Qu es DevOps? .......................................................................................................................... 2
1.
2.
3.
4.
2.
3.
4.
El repositorio ....................................................................................................................... 9
2.
2.
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
Automatizar pruebas................................................................................................... 16
2.9
2.10
FACULTAD DE INGENIERIA
Qu es DevOps?
Mucho se ha escrito acerca de lo que es DevOps: Un camino para que los desarrolladores y
directores de operaciones colaboren; un conjunto de mejores prcticas para la gestin de
aplicaciones en la nube; una idea gil que se basa en la integracin continua, lo que permite
frecuentes liberaciones de cdigo.
La definicin de DevOps cubre todas estas cosas y ms. Pero dado que el trmino ha adquirido
estatus de palabra de moda, puede ser ms interesante preguntarse no lo que es DevOps, sino
lo que no es. En el artculo SearchSoftwareQuality pregunt a algunos profesionales de software
exactamente eso. He aqu lo que dijeron.
FACULTAD DE INGENIERIA
FACULTAD DE INGENIERIA
FACULTAD DE INGENIERIA
FACULTAD DE INGENIERIA
FACULTAD DE INGENIERIA
En cualquier momento, a medida que las aplicaciones estn siendo desplegadas y probadas,
DevOps exige que se capturen mtricas de calidad y que sean analizadas. Este monitoreo
frecuente provee aviso tempranero sobre temas operacionales y de calidad que podran aparecer
posteriormente en la etapa de produccin. Adicionalmente, las mtricas deben ser capturadas
en un formato que sea entendible y utilizable para todos los interesados, incluyendo a los
responsables de las aplicaciones en las lneas de negocio.
FACULTAD DE INGENIERIA
Gestion de Versionamiento
La Gestin de Versiones es la encargada de la implementacin y control de calidad de todo el
software y hardware instalado en el entorno de produccin.
La Gestin de Versiones tambin debe mantener actualizada la Biblioteca de Software Definitivo
(DSL), donde se guardan copias de todo el software en produccin, y el Depsito de Hardware
Definitivo (DHS), donde se almacenan piezas de repuesto y documentacin para la rpida
reparacin de problemas de hardware en el entorno de produccin.
FACULTAD DE INGENIERIA
1. El repositorio
Un gestor de versionamiento es un sistema centralizado para compartir informacin. En su
ncleo est un repositorio, que es un almacn central de datos. El repositorio almacena
informacin en forma de un rbol de archivos (una jerarqua tpica de archivos y directorios). Un
nmero de clientes se conectan al repositorio, y luego leen o escriben esos archivos. Al escribir
datos, el cliente hace que la informacin est disponible para los otros; al leer los datos, el cliente
recibe informacin de los dems.
Figura 1
2. Modelos de versionado
Todos los sistemas de control de versiones tienen que resolver los mismos problemas
fundamentales: cmo permitir el sistema compartir informacin entre usuarios, pero evitando
que ellos accidentalmente se pisen unos a otros? Es demasiado sencillo que los usuarios
accidentalmente sobre-escriban los cambios del otro en el repositorio.
FACULTAD DE INGENIERIA
despus)
accidentalmente
Sally
sobre-escribirlos
pueda
con
su
un
modelo bloquear-modificar-
FACULTAD DE INGENIERIA
La solucin copiar-modificar-fusionar
La mayora de gestores de versiones utilizan este modelo. En este modelo, el cliente de cada
usuario lee el repositorio y crea una copia de trabajo personal del archivo o del proyecto. Luego,
los usuarios trabajan en paralelo, modificando sus copias privadas. Finalmente, las copias
privadas se fusionan juntas en una nueva versin final. El sistema de control de versiones a
menudo ofrece ayuda en la fusin, pero al final la persona es la responsable de hacer que ocurra
correctamente.
Aqu hay un ejemplo. Digamos que tanto Harry como Sally crean copias de trabajo del mismo
proyecto, copiado del repositorio. Ellos trabajan simultneamente, y hacen cambios al mismo
archivo A dentro de sus copias. Sally es la primera en grabar sus cambios en el repositorio.
Cuando Harry intenta grabar sus cambios ms tarde, el repositorio le informa que su archivo A
est desactualizado. En otras palabras, que el archivo A en el repositorio ha cambiado de alguna
forma desde la ltima vez que lo copi. Por lo que Harry le pide a su cliente que fusione cualquier
nuevo cambio del repositorio dentro de su copia de trabajo del archivo A. Lo ms seguro es que
los cambios de Sally no se superpongan a los suyos; por lo que una vez que ambos conjuntos de
cambios se han integrado, l graba su copia de trabajo de nuevo en el repositorio.
FACULTAD DE INGENIERIA
Integracin Continua
Muchas veces, se tiende a pensar que la integracin continua es tener instalado el servidor de
integracin continua (por ejemplo Jenkins) y que este compile el cdigo peridicamente; o tener
automatizados los despliegues dndole a un botn desde dicho servidor. Pero la integracin
continua engloba mucho ms que esto. Es una serie de buenas prcticas, de comprobaciones
interconectadas entre s, para conseguir software de mejor calidad.
Martin Fowler define la integracin continua de la siguiente manera:
Prctica de desarrollo software donde los miembros del equipo integran su trabajo
frecuentemente, al menos una vez al da. Cada integracin se verifica con un build
automtico (que incluye la ejecucin de pruebas) para detectar errores de integracin tan
pronto como sea posible.
FACULTAD DE INGENIERIA
Cuando se distribuye el trabajo entre los miembros del equipo, y cada uno comienza a trabajar,
normalmente se asumen cosas de otros componentes del software que todava no estn
implementados o que est programando otra persona. Y hasta que no se junta todo ese cdigo,
no son visibles los errores de integracin que se cometen.
Antes, lo que se tenda a hacer es que cada desarrollador programara de forma independiente y
luego al final se realizaba la integracin de todo el cdigo. Esto se traduce en integraciones
difciles, que tardan mucho en completarse y mucho sufrimiento, ya que hay muchos cambios,
mucho cdigo que integrar. Uno de los motivos por los que surge la integracin continua es para
evitar esto. La idea es que en vez de dejar la integracin para el final, se vayan haciendo pequeas
integraciones de cdigo frecuentemente.
La frase que podramos aplicar aqu es que si algo te cuesta, debes hacerlo ms a menudo y poco
a poco, para que con el tiempo te vaya costando cada vez menos esfuerzo.
FACULTAD DE INGENIERIA
FACULTAD DE INGENIERIA
Subversion o SVN, no son iguales que Git o Mercurial y no gestionan las ramas de la misma
manera. Con Git o Mercurial, una estrategia de rama por historia de usuario es mucho ms fcil
y eso es algo a tener en cuenta.
FACULTAD DE INGENIERIA
FACULTAD DE INGENIERIA
(dejar el software en un estado listo para pasar a produccin) y despliegue continuo (que cada
cambio en el cdigo, despus de pasar por todo el pipeline de integracin continua que
definimos, se suba a produccin).