Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
“FLUJO DE IMPLEMENTACIÓN DE
DESARROLLO Y OPERACIONES EN
PROYECTOS WEB”
Cochabamba – Bolivia
2018
Agradezco a Dios y a toda mi familia por
haberme acompañado todos estos años de
estudio, gracias a mi madre que además de ser
mi mejor amiga me dio la fuerza y el cariño para
seguir adelante, gracias a mi abuelito por ser un
ejemplo como persona y darme la motivación
para concluir esta fase de estudio de mi vida.
1
Índice
Resumen 6
Introducción 7
1 Generalidades 8
2 Metodología 9
3 Definiciones clave 9
3.4 DevOps 11
3.5 Virtualización 12
3.6 Docker 12
4 Proyecto 14
5 Diseño e Implementación 17
2
5.3.1 Tecnologías para la implementación 20
6 Resultados 23
7 Conclusiones 28
Bibliografía 29
3
Índice de Figuras
4
Índice de Tablas
5
RESUMEN
6
INTRODUCCIÓN
El desarrollo de software a lo largo del tiempo fue evolucionando de manera tan acelerada
que actualmente existen varias metodologías para su desarrollo, de las cuales las más
usadas y mejor adaptadas son las que tienen un enfoque ágil o también conocidas como
metodologías ágiles. Estas metodologías tienen como objetivo realizar entregas del producto
por iteraciones asegurando la calidad del mismo en cortos periodos de tiempo. Durante el
proceso de desarrollo, el equipo pasa por un ciclo de planificación, diseño, implementación y
pruebas, éste proceso normalmente toma mucho tiempo en ser implementado por lo que
algunas empresas para optimizar este y la calidad del producto, optan por dividir al equipo
por sectores, como ser: sector de desarrollo y sector de operaciones. El primer sector se
enfoca en la elaboración de código y control de calidad correspondiente a la iteración en un
intervalo de tiempo corto. El sector de operaciones tiene como objetivo mantener el producto
de software estable y entregable, así como la optimización de recursos en el proyecto.
Los problemas más comunes que existen entre ambos sectores durante el proceso de
desarrollo es la falta de comunicación y coordinación entre el equipo de operaciones y el de
desarrollo, dando lugar de esta forma al término “DevOps”, el cual está enfocado en un
cambio de cultura y paradigma centrándose en la colaboración y comunicación entre ambos
equipos.
7
Por lo cual con la presente monografía de carácter investigativo se pretende demostrar el
flujo de desarrollo y operaciones en proyectos web, como también el uso de herramientas
existentes que pueden ser utilizadas durante su desarrollo.
1 GENERALIDADES
Para el desarrollo de software existen varias metodologías que cuentan con diferentes
artefactos como roles y procesos; actualmente las metodologías ágiles son las más
utilizadas, en estas se realizan entregas periódicas de un producto por el equipo de
desarrollo.
Otro escenario común es cuando existen errores en ambientes de producción debido a que
no fueron correctamente configurados, ya sea por descuido del equipo de operaciones o por
cambios en la configuración por parte del equipo de desarrollo, como ser: la configuración de
la base de datos o puertos del proyecto.
8
2 METODOLOGÍA
3 DEFINICIONES CLAVE
Por lo que se infiere que la integración continua es una práctica de desarrollo de software en
el cual los desarrolladores fusionan sus cambios de código en un repositorio principal de
forma constante.
● Jenkins
● Bamboo
9
● Heroku CI
● Hudson
● Team City
● Travis CI
“Continuous Delivery is a software development discipline where you build software in such a
way that the software can be released to production at any time.”
Por lo que se concluye que la entrega continua es una práctica de desarrollo de software que
extiende de la integración continua, este tiene como objetivo garantizar que el código pueda
ser implementado de forma rápida y segura en producción o un ambiente parecido a este.
Una diferencia importante con la entrega continua es que existe un proceso de puesta en
producción automática, para esto necesitamos herramientas de automatización que permitan
gestionar los entornos, así como también cambios en las bases de datos y no sea un
proceso difícil de llevar a cabo.
Una característica importante del despliegue continuo es: lograr completar este proceso sin
pérdida del servicio de la aplicación, es decir, asegurar que para el usuario sea imperceptible
todo el despliegue.
10
En la Figura 1 se puede observar la diferencia entre los procesos de entrega continua y
despliegue continuo.
3.4 DevOps
“DevOps is a term for a group of concepts that, while not all new, have catalyzed into a
movement and are rapidly spreading throughout the technical community. Like any new and
popular term, people may have confused and sometimes contradictory impressions of what it
is. Here’s my take on how DevOps can be usefully defined; I propose this definition as a
standard framework to more clearly discuss the various areas DevOps covers. Like “Quality”
or “Agile,” DevOps is a large enough concept that it requires some nuance to fully
understand.”
11
Una de las ventajas de DevOps es el aumento de productividad en el proyecto, ya que, al
basarse en la colaboración existe una mejor comunicación en el equipo enfocándose así en
los objetivos y no en los procesos.
3.5 Virtualización
● Virtualización de almacenamiento.
● Virtualización de Red.
● Hypervisor de almacenamiento.
● Virtualización de datos.
3.6 Docker
Docker es muy usado ya que permite ejecutar aplicaciones en ambientes aislados mucho
más livianos que las máquinas virtuales. Otras ventajas de usar contenedores Docker
respecto al uso de máquinas virtuales son: la portabilidad, administración y rapidez, ya que
los recursos que consumen del sistema operativo son mínimos.
12
Figura 2. Arquitectura de Docker
Fuente: https://docs.docker.com/engine/docker-overview/#docker-architecture
13
Figura 3. Top orquestadores de contenedores
Fuente: https://thenewstack.io/tns-research-present-state-container-orchestration/
Es un programa que tiene como propósito gestionar las tareas relacionadas con los
contenedores, entre los más conocidos están Google Kubernetes, Amazon Elastic Container
Service (ECS), Apache Mesos y Docker Data Center.
4 PROYECTO
14
Figura 4. Estados de tareas del proyecto.
Fuente: Elaboración propia
La ejecución de estas tareas e integración de código con el repositorio remoto fue realizada
de acuerdo al flujo que se muestra en la Figura 5.
15
4.2 Requerimientos técnicos
Los requerimientos técnicos necesarios para el proyecto base están citados en la Tabla 1.
Especificación Descripción
Procesador Core I7
Especificación Descripción
16
5 DISEÑO E IMPLEMENTACIÓN
17
Partiendo como base del proceso ya mencionado, el siguiente paso a la integración continua
es la entrega continua, en este existen varias opciones, por ejemplo: el uso de Vagrant en el
cual se configura una máquina virtual donde se ejecuta el producto y por otro lado el uso de
contenedores Docker, este último recientemente está teniendo gran impacto en la entrega de
un proyecto de software, debido a que es portable, consume pocos recursos del sistema y lo
más importante es que un contenedor Docker puede ser configurado con el fin de ejecutar
un producto o servicio específico, asegurando así la ejecución del mismo en un ambiente
controlado.
De acuerdo a la investigación llevada a cabo, existen varias herramientas que son muy útiles
para el flujo de implementación de desarrollo y operaciones, entre estas las más
recomendadas para el proyecto base se citan en la Tabla 3.
Tecnología
Putty
OpenSSH Server
Docker
Docker Compose
18
Un aspecto clave a tomar en cuenta durante el flujo es: cómo se realizará la entrega final del
producto. Tomando en cuenta este y otros aspectos como la mantenibilidad y escalabilidad,
se realizó la dockerización del proyecto base, separando los componentes menos acoplados
en diferentes contenedores Docker, para ser usados por cualquier servidor de integración
continua, ya sea Jenkins, Heroku, Bamboo, Team Foundation Server, Hudson, etc,
facilitando así la entrega del producto.
19
5.3.1 Tecnologías para la implementación
VMware Workstation
Se usará VMware Workstation 14 Pro para la configuración de máquinas virtuales con Linux
Ubuntu Server 16.04 con el propósito de ejecutar los contenedores Docker necesarios para
el proyecto base.
Para la instalación de Ubuntu server 16.04 en VMware se contará con un ordenador con las
características presentadas en la Tabla 4.
Especificación Descripción
Cantidad de núcleos 2
20
PuTTY
Es un programa que tiene como objetivo usarse como cliente SSH, Telnet, Rlogin y TCP
raw, este se usa normalmente para conectarse a servidores remotos iniciando sesión en
ellos.
Se usará PuTTY para la conexión remota entre el sistema operativo Windows de la máquina
física con el servidor remoto Ubuntu server 16.04 configurado en VMware y ejecutar los
comandos necesarios para la instalación y ejecución de Docker.
OpenSSH Server
Es una herramienta que permite la conectividad remota con otros ordenadores mediante el
protocolo SSH, este se lo usará para facilitar la comunicación entre el servidor Ubuntu y la
computadora física.
Para dockerizar el backend se creó un archivo llamado “Dockerfile” en el directorio raíz del
proyecto, el código de este archivo se puede observar en la Figura 8.
21
El comando para la generación de la imagen Docker fue “sudo docker build -t backend .”,
este fue ejecutado desde la raíz del proyecto, donde se encuentra el archivo “Dockerfile”, y el
comando para la creación del contenedor Docker fue “sudo docker run -p 2000:8080
backend”.
El comando para la generación de la imagen Docker fue “sudo docker build -t frontend-prod
.”, éste fue ejecutado desde la raíz del proyecto, donde se encuentra el archivo “Dockerfile”,
22
y el comando para la creación del contenedor Docker fue “sudo docker run -p 2001:4300
frontend-prod”.
Para la orquestación del proyecto se usó “Docker-Compose”, esta es una herramienta que
sirve para definir y ejecutar aplicaciones alojadas en contenedores Docker diferentes, usa un
archivo YAML para configurar los servicios de la aplicación, este proceso se ejecuta después
de que los contenedores Docker son creados, para el proyecto se creó un archivo llamado
“docker-compose.yml” en el cual se tiene configurado la ejecución de los servicios del
backend y frontend, el código aplicado se puede observar en la Figura 10.
6 RESULTADOS
23
Figura 11. Adopción de DevOps
Fuente: https://www.cloudtp.com/doppler/rightscales-state-cloud-report-devops-trends-2016/
24
Figura 13. Implementacion de DevOps en organizaciones
Fuente: https://go.forrester.com/blogs/2018-the-year-of-enterprise-devops/
Con la dockerización realizada al proyecto base, este podría ser integrado con distintos
servidores de integración continua como Bamboo, Jenkins, Heroku, Hudson, etc,
adicionalmente con la dockerizacion realizada se podría configurar distintos ambientes,
como los de desarrollo, pruebas y producción, de una forma rápida y segura. También como
resultado de esto se pudo ejecutar el proyecto base desde un contenedor Docker para el
frontend que a la vez está usando otro contenedor Docker configurado para el backend, en
las Figuras 14 y 15 se puede observar el correcto funcionamiento de la aplicación usando
contenedores Docker.
25
Figura 14. Aplicación Base - Página de autenticación
Fuente: Elaboración propia
26
6.2 Evaluación de resultados
Este conocimiento puede ser aplicado a cualquier proyecto de software, tomando en cuenta
los aspectos mencionados en los puntos anteriores, en la Figura 16 se puede observar
algunos beneficios de la implementación de DevOps.
Con la dockerizacion del proyecto, se tiene mejor escalabilidad y portabilidad, además de ser
una de las tecnologías mejor adoptadas en la actualidad para la entrega continua, este dio
más valor al proyecto y se tendrá una mejor integración con otras aplicaciones o servicios
para así enfrentar los cambios futuros, en la Figura 17 se puede observar una referencia de
cómo es la aceptación de Docker actualmente.
27
Figura 17. Comportamiento de adopción de Docker
Fuente: https://www.datadoghq.com/docker-adoption/
7 CONCLUSIONES
También se enfatizó que un buen proceso o técnica para realizar la entrega del producto es
muy importante en el ciclo de desarrollo de software, debido a la mantenibilidad y
escalabilidad del proyecto.
28
como consecuencia saber elegir las herramientas adecuadas, cuando usarlas y para qué
tipo de proyecto pueden ser aplicadas.
BIBLIOGRAFÍA
https://medium.com/@nagarwal/docker-containers-filesystem-demystified-b6ed8112a04a
Fowler, M. (2013, Junio 4). Martin Fowler defines continuous delivery. Fecha de consulta:
22-08-2018. Disponible en: https://dzone.com/articles/martin-fowler-defines
Fowler, M (2013, Mayo 30). Continuous Delivery. Fecha de consulta: 25-08-2018. Disponible
en: https://martinfowler.com/bliki/ContinuousDelivery.html
Goasguen, S. (2016). Docker Cookbook. California, United States of America: O`Reilly Media
Guminski, L. (2018, Febrero 27). Orchestrate Containers for Development with Docker
Compose. Fecha de consulta: 26-08-2018. Disponible en:
https://blog.codeship.com/orchestrate-containers-for-development-with-docker-compose/
Mueller, E. (2010, Agosto 2). What is DevOps. Fecha de consulta: 23-08-2018. Disponible
en: https://theagileadmin.com/what-is-devops/
29
Rouan, W. (2015, Julio 9). DevOps Culture. Fecha de consulta: 24-08-2018. Disponible en:
https://martinfowler.com/bliki/DevOpsCulture.html
https://docs.docker.com/v17.09/engine/docker-overview/
Linux Ubuntu Server 16.04 Overview. Fecha de consulta: 29-08-2018. Disponible en:
https://tutorials.ubuntu.com/tutorial/tutorial-install-ubuntu-server-1604#0
https://help.ubuntu.com/lts/serverguide/openssh-server.html.en
https://searchvmware.techtarget.com/definition/VMware
30