Anda di halaman 1dari 31

UNIVERSIDAD MAYOR DE SAN SIMON 

FACULTAD DE CIENCIAS Y TECNOLOGIA 


DIRECCIÓN DE POSGRADO

“FLUJO DE IMPLEMENTACIÓN DE
DESARROLLO Y OPERACIONES EN
PROYECTOS WEB”

TRABAJO FINAL PRESENTADO PARA OBTENER EL


CERTIFICADO DE DIPLOMADO EXPERTO EN DESARROLLO DE
APLICACIONES EMPRESARIALES VERSIÓN I
.

POSTULANTE : Diego Alberto Maiz Villarroel


TUTOR : Msc. Richard Félix López Fulguera

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.

Y en general gracias a todas las personas que


me apoyaron durante la elaboración de la
presente monografía.

1
Índice

Resumen 6

Introducción 7

1 Generalidades 8

1.1 Antecedentes Generales 8

1.2 Antecedentes Específicos 8

2 Metodología 9

3 Definiciones clave 9

3.1 Integración Continua 9

3.2 Entrega Continua 10

3.3 Despliegue Continuo 10

3.4 DevOps 11

3.5 Virtualización 12

3.6 Docker 12

3.7 Orquestación de contenedores 13

3.8 Software de administración de contenedores 14

4 Proyecto 14

4.1 Flujo de trabajo del proyecto base 14

4.2 Requerimientos técnicos 16

4.3 Herramientas y tecnologías aplicadas 1​6

5 Diseño e Implementación 17

5.1 Descripción del proyecto 17

5.2 Flujo de trabajo 1​7

5.3 Plan de implementación 1​8

2
​5.3.1 Tecnologías para la implementación 20

5.4 Dockerización del proyecto 2​1

​5.4.1 Dockerización del backend 2​1

​5.4.2 Dockerizacion del frontend 22

5.5 Orquestación del proyecto 23

6 Resultados 2​​3

6.1 Resumen de resultados 2​3

6.2 Evaluación de resultados 27

7 Conclusiones 2​​8

Bibliografía 29

3
Índice de Figuras

Figura 1​​ ​Procesos de entrega continua y despliegue continuo 11

Figura 2​​ ​Arquitectura de Docker 13

Figura 3​​ ​Top orquestadores de contenedores 14

Figura 4​​ ​Estados de tareas del proyecto 15

Figura 5​​ ​Flujo de ejecución de tareas y combinación de código 15

Figura 6​​ ​Implementación técnica de integración continua 17

Figura 7​​ ​Proceso para la generación de contenedores Docker 19

Figura 8​​ ​Archivo “Dockerfile” para el backend 21

Figura 9​​ ​Archivo “Dockerfile” para el frontend 22

Figura 10​​ ​Código orquestación de contenedores 23

Figura 11​​ ​Adopción de DevOps 24

Figura 12​​ ​Adopción de DevOps en empresas de desarrollo de software 24

Figura 13​​ ​Implementacion de DevOps en organizaciones 25

Figura 14​​ ​Aplicación Base - Página de autenticación 26

Figura 15​​ ​Aplicación Base - Lista de activos 26

Figura 16​​ ​Beneficios de DevOps 27

Figura 17​​ ​Comportamiento de adopción de Docker 28

4
Índice de Tablas

Tabla 1​​ ​Requerimientos técnicos del proyecto base 16

Tabla 2​​ ​Tecnologías aplicadas en el proyecto base 16

Tabla 3​​ ​Tecnologías recomendadas para el flujo de implementación de desarrollo y


operaciones para el proyecto base 18

Tabla 4​​ ​Especificaciones técnicas para Ubuntu server 16.04 20

5
RESUMEN

La presente monografía de carácter investigativo pretende dar un vistazo al flujo de


implementación de desarrollo y operaciones para un proyecto de software web.

El proceso de desarrollo y operaciones, también conocido con el término “DevOps”, es una


de las tendencias en el desarrollo de software actual, el cual tiene gran impacto por los
beneficios que brinda como ser: la optimización de recursos, automatización de tareas,
integración y entrega continua, etc. Por lo que el objetivo principal, durante el desarrollo de la
investigación es explicar qué se necesita para iniciar en el mundo de “DevOps”, cómo
empezar a implementarlo, qué herramientas existen y cómo se utilizan.

El flujo de desarrollo y operaciones es aplicado durante todo el proceso de desarrollo de


software, desde el momento en que el código del proyecto es integrado hasta la entrega final
del producto, DevOps tiene como objetivo principal resolver la deficiente colaboración entre
el equipo de desarrollo y operaciones, automatizar procesos y facilitar la entrega del
producto.

La implementación de este flujo se demostrara en base a un proyecto que durante su


desarrollo se basó en la metodología ágil Scrum usando tecnologías como: Java, Maven,
Angular, Spring, Hibernate y Bootstrap. Esta implementación consiste en la dockerización del
proyecto y la orquestación de los contenedores generados con Docker Compose, esto
facilitará en un futuro la entrega continua e integración del proyecto con servidores de
integración continua como Jenkins, Bamboo o Hudson.

Palabras clave: ​DevOps, integración continua, entrega continua, despliegue continuo,


proceso de desarrollo, metodología ágil, virtualización, dockerización, automatización de
tareas, Docker.

6
I​​NTRODUCCIÓ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.

El flujo de DevOps en Scrum y otras metodologías ágiles es visible durante la ejecución de la


iteración, ya que este flujo tiene como base el proceso de integración continua y este es
aplicado cada vez que nuevo código es integrado en un repositorio común.

Este flujo es normalmente implementado por empresas que desarrollan y distribuyen


software constantemente, también conocidas como fábrica de software, ya que brinda
grandes beneficios respecto al desarrollo y entrega de los productos. Un ejemplo en el que
no aplica la implementación del flujo de desarrollo y operaciones es en aplicaciones que
tienen un alto nivel de seguridad, y tienen estrictos controles de acceso como ser bancos y
organizaciones gubernamentales.

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

1.1​​ ​Antecedentes Generales

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.

Para realizar estas entregas constantes se necesita de un equipo o personas encargada(s)


que realicen configuraciones de ambientes y entrega continua a los mismos. Al realizar estas
entregas constantes, normalmente existen varios problemas que tienen como resultado el
retraso de la entrega del producto entre otros, esto debido a no tener un buen proceso de
integración o entrega continua.

1.2​​ ​Antecedentes Específicos

Actualmente la entrega continua es un proceso indispensable en el desarrollo de software,


durante ese proceso pueden existir varios problemas, entre los más importantes la
comunicación y coordinación entre el equipo de desarrollo y operaciones, por ejemplo: El
primer equipo mencionado no toma en cuenta varios aspectos que son indispensables para
el equipo de operaciones, como ser: las configuraciones del proyecto o repositorios. Cuando
existe un problema después realizada la entrega del producto por parte de equipo de
desarrollo, en ocasiones surgen problemas o malentendidos y estos provocan retrasos en la
entrega final lo cual afecta al proyecto. Un escenario frecuente por el cual surgen los
retrasos es cuando se rompe alguna funcionalidad en el código y su detección tardía, esto
demuestra que el proceso de integración continua no es el adecuado.

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

Para la presente monografía se utilizarán los siguientes métodos de investigación:

● Método Bibliográfico​​, Permitirá realizar la lectura y compilación de libros


relacionados al tema de estudio.

● Método Analítico​​, Permitirá la revisión y el análisis de documentos de forma


ordenada relacionados al tema de estudio.

● Método Empírico o de Campo​​, Permitirá el uso de ejemplos de aplicación o


experiencias observadas en el proyecto desarrollado.

3 ​DEFINICIONES CLAVE

3.1​​ ​Integración Continua

Fowler (2006) afirma que:

“Continuous Integration is a software development practice where members of a team


integrate their work frequently, usually each person integrates at least daily - leading to
multiple integrations per day. Each integration is verified by an automated build (including
test) to detect integration errors as quickly as possible. Many teams find that this approach
leads to significantly reduced integration problems and allows a team to develop cohesive
software more rapidly.”

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.

La integración continua tiene como énfasis principal la automatización de procesos para


comprobar que la aplicación no se rompe cada vez que se integran nuevas
implementaciones en el repositorio principal. Si la aplicación llegará a romperse es gracias a
la integración continua la temprana detección y solución del mismo. Algunas herramientas
que ayudan a llevar a cabo y automatizar este proceso son:

● Jenkins

● Bamboo

9
● Heroku CI

● Hudson

● Team City

● Travis CI

3.2 Entrega Continua

Fowler (2013) afirma que:

“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.

Lo que se pretende con la entrega continua además de automatizar las pruebas en la


aplicación, es automatizar el proceso de entrega de la aplicación o producto de software a
producción en cualquier momento.

3.3 Despliegue Continuo

El despliegue continuo es el siguiente paso de la entrega continua, ya que a diferencia de la


entrega continua; este automatiza la entrega del producto o aplicación al cliente final,
acelerando así el ciclo de retroalimentación por parte de los clientes tan pronto sea posible,
es importante mencionar que esta práctica no se aplica en todos los proyectos de software
ya que dependerá del tipo de producto y clientes.

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.

Figura 1. ​Procesos de entrega continua y despliegue continuo


Fuente: Elaboración propia

3.4 DevOps

Mueller (2010) afirma que:

“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.”

Por lo que se infiere que DevOps es la combinación de prácticas y herramientas que


aumentan la productividad en un equipo de desarrollo de software optimizando recursos en
el proyecto y automatizando los procesos de integración y entrega continua del producto.

El objetivo principal de DevOps es mejorar la comunicación y colaboración entre el equipo de


desarrollo y el de operaciones.

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

La virtualización es el proceso de ejecutar una instancia virtual de un sistema en una capa


abstracta del hardware real. Más comúnmente, se refiere a ejecutar múltiples sistemas
operativos en un sistema de computadora simultáneamente. Una de las grandes ventajas
que ofrece la virtualización es la reutilización y gestión de hardware en un único ambiente
real.

Existen varios tipos de virtualización, estos son:

● Virtualización asistida por hardware.

● Virtualización de almacenamiento.

● Virtualización de Red.

● Hypervisor de almacenamiento.

● Virtualización de datos.

3.6 Docker

Docker es un proyecto de código abierto que es utilizado para la ejecución de aplicaciones


dentro de un pequeño ambiente que aísla recursos del kernel llamados contenedores.

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.

La arquitectura de Docker se puede observar en la Figura 2.

12
Figura 2. ​Arquitectura de Docker
​Fuente: ​https://docs.docker.com/engine/docker-overview/#docker-architecture

3.7 Orquestación de contenedores

La orquestación de contenedores se refiere al proceso de organización del trabajo de


componentes individuales y capas de aplicación de forma automatizada, dentro de la
orquestación se pueden incluir varias características, por ejemplo: el aprovisionamiento de
recursos y/o gestión de contenedores. Algunos de los orquestadores más usados se pueden
observar en la Figura 3.

13
Figura 3. ​Top orquestadores de contenedores
Fuente: https://thenewstack.io/tns-research-present-state-container-orchestration/

3.8 Software de administración de contenedores

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

4.1 Flujo de trabajo del proyecto base

La organización del proyecto base al cual se aplicó el flujo de implementación de desarrollo y


operaciones está basado en Scrum y las tareas se organizaron en los estados que se
presentan en la Figura 4.

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.

Figura 5.​​ Flujo de ejecución de tareas y combinación de código.


Fuente: Elaboración propia

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

Memoria Ram 16 Gigabytes

Disco Duro 1 Terabyte

Tarjeta Gráfica Integrada

Tabla 1. ​Requerimientos técnicos del proyecto base


Fuente: Elaboración propia

4.3 Herramientas y tecnologías aplicadas

Para el desarrollo del proyecto base, se usó las tecnologías de la Tabla 2.

Especificación Descripción

Sistema Operativo Windows 10

Gestor de Base de datos SQL Server 2014


H2

Tecnologías en el lado del Java


servidor Maven
Spring Boot

Tecnologías en el lado del Angular


cliente Bootstrap

Tabla 2. ​Tecnologías aplicadas en el proyecto base


Fuente: Elaboración propia

16
5 DISEÑO E IMPLEMENTACIÓN

5.1 Descripción del proyecto

El proyecto base usado para el flujo de implementación de desarrollo y operaciones o


“DevOps” es un proyecto web diseñado para una empresa constructora. Este proyecto tiene
como objetivo principal facilitar el seguimiento de la información respecto a la seguridad
industrial en la empresa, este permite registrar la estructura organizacional de la empresa,
registrar accidentes e incidentes ocurridos, registrar la asignación y devolución de activos a
los empleados, realizar consultas sobre el cumplimiento del plan de seguridad y establecer
un mecanismo para identificar los riesgos presentes dentro de la empresa con la generación
de reportes.

5.2 Flujo de trabajo

El proceso principal para el flujo de implementación de desarrollo y operaciones es la


integración continua, este proceso se puede apreciar en la Figura 6.

Figura 6.​​ Implementación técnica de integración continua


Fuente: http://www.pepgotesting.com/continuous-integration/

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.

5.3 Plan de implementación

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

VMware® Workstation 14 Pro

Linux Ubuntu Server 16.04

Putty

OpenSSH Server

Docker

Docker Compose

Tabla 3. ​Tecnologías recomendadas para el flujo de implementación de desarrollo y


operaciones para el proyecto base.
Fuente: Elaboración propia

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.

En la Figura 7, se puede observar cómo se espera que se aplique la entrega continua en el


proyecto base.

Figura 7. ​Proceso para la generación de contenedores Docker


Fuente: Elaboración propia

Una vez dockerizado el proyecto el siguiente paso es gestionar el orquestamiento de los


mismos con Docker Compose.

19
5.3.1 Tecnologías para la implementación

VMware Workstation

Es un programa que permite la configuración de máquinas virtuales en una sola máquina


física, este cuenta con versiones para Windows y Linux.

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.

Linux Ubuntu Server 16.04

Es un sistema operativo variante de Ubuntu especializada para el uso de servidores, este se


usará en la presente monografía para el despliegue de los contenedores Docker necesarios
para la ejecución de la aplicación.

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

Memoria Ram 4 Gigabytes

Disco Duro 30 Gigabytes

Adaptador de Red Configuración NAT

Tabla 4. ​Especificaciones técnicas para Ubuntu server 16.04


Fuente: Elaboración propia

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.

5.4 Dockerización del proyecto

Para la dockerizacion se realizó un análisis de código para identificar qué componentes de la


aplicación están menos acoplados. Realizando este análisis se concluyó que el proyecto
será dividido en 2 contenedores Docker, uno para el backend en el que se ejecutarán todas
las tecnologías del lado del servidor, y otro para el frontend, en el que se alojarán todas las
tecnologías del lado del cliente.

5.4.1 Dockerización del backend

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.

Figura 8. ​Archivo “Dockerfile” para el backend.


Fuente: Elaboración propia
En la imagen anterior se muestra la configuración de capas necesarias, en este caso Java 8,
para la ejecución del backend en el contenedor Docker.

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”.

5.4.2 Dockerizacion del frontend

Para la dockerizacion del frontend se creó un archivo llamado “Dockerfile” en el directorio


raíz del proyecto, el código de dicho archivo se puede observar en la Figura 9.

Figura 9. ​Archivo “Dockerfile” para el frontend


Fuente: Elaboración propia

En la figura anterior se muestra la configuración de capas necesarias para la ejecución del


frontend, en este caso NodeJS, y adicionalmente la ejecución de los comandos para instalar
Angular y ejecutar el frontend del proyecto base.

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”.

5.5 Orquestación del proyecto

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.

Figura 10. ​Código orquestación de contenedores


Fuente: Elaboración propia
El comando para la ejecución de docker compose fue “sudo docker-compose up”.

6 RESULTADOS

6.1 Resumen de resultados

A lo largo del desarrollo e investigaciones hechas para la presente monografía se pudo


evidenciar que existen varias herramientas que nos facilitan el flujo de implementación de
desarrollo y operaciones. También se pudo evidenciar la importancia que tiene la
herramienta y la forma en la que se llevará a cabo la entrega o despliegue continuo de un
producto, ya que este es el paso final del ciclo de desarrollo de software. Como
complemento, en las Figuras 11, 12 y 13 se puede apreciar la adopción que tiene la
implementación de desarrollo y operaciones (DevOps) en la actualidad.

23
Figura 11. ​Adopción de DevOps
Fuente: https://www.cloudtp.com/doppler/rightscales-state-cloud-report-devops-trends-2016/

Figura 12. ​Adopción de DevOps en empresas de desarrollo de software


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

Figura 15. ​Aplicación Base - Lista de activos


Fuente: Elaboración propia

26
6.2 Evaluación de resultados

Como resultado de la investigación realizada se obtuvo el conocimiento necesario para


entender el flujo de implementación de desarrollo y operaciones.

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.

Figura 16. ​Beneficios de DevOps


Fuente: http://www.zarantech.com/blog/key-benefits-of-devops-certification-training

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

De acuerdo a la investigación realizada para la presente monografía, se demostró el flujo de


implementación de desarrollo y operaciones en un proyecto web, a lo largo de esta se
evidencio cual es el ciclo completo de desarrollo de software, y se mencionó algunas
herramientas actuales con las que se puede llevar a cabo este proceso en general.

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.

Por lo que se concluye que entender cuál es el flujo de implementación de desarrollo y


operaciones en un proyecto es muy importante, así como las tecnologías que se aplican en
este proceso, ya que este agrega mucho valor al producto. Entender bien este flujo tiene

28
como consecuencia saber elegir las herramientas adecuadas, cuando usarlas y para qué
tipo de proyecto pueden ser aplicadas.

En proyectos futuros se recomienda tener en cuenta un enfoque hacia los microservicios y


saber elegir bien las herramientas de integración y entrega continua, ya que actualmente
existe un crecimiento exponencial de usuarios debido al crecimiento tecnológico y uso de
internet, por lo que los proyectos web tienen que ser soportados por miles de usuarios, y
actualmente existen varias herramientas que ayudan a afrontar este problema para
aplicaciones orientadas a microservicios, que podrían ser usadas en nuestro proyecto,
algunas de las aplicaciones enfocadas a microservicios son: Netflix, Facebook, Twitter.

BIBLIOGRAFÍA

Agarwal, N. (2017, Enero 22). Docker Container’s Filesystem Demystified. Fecha de


consulta: 24-08-2018. Disponible en:

​https://medium.com/@nagarwal/docker-containers-filesystem-demystified-b6ed8112a04a

Fowler, M. (2006, Mayo 1). Continuous Integration. Fecha de consulta: 20-08-2018.


Disponible en: ​https://www.martinfowler.com/articles/continuousIntegration.html

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

Docker overview. Fecha de consulta: 28-08-2018. Disponible en:

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

PuTTY user manual. Fecha de consulta: 28-08-2018. Disponible en:


https://the.earth.li/~sgtatham/putty/0.70/htmldoc/

Overview of Docker Compose. Fecha de consulta: 28-08-2018. Disponible en:


https://docs.docker.com/compose/overview/

OpenSSH Server. Fecha de consulta: 29-08-2018. Disponible en:

https://help.ubuntu.com/lts/serverguide/openssh-server.html.en

VMware. Fecha de consulta: 28-08-2018. Disponible en:

https://searchvmware.techtarget.com/definition/VMware

30