Está en la página 1de 10

Práctica Final - Planificación DevOps

Nombres y Apellidos: Franz Javier Muraña Cruz

1. Descripción de la empresa / proyecto

Como escenario tenemos a una Empresa de Servicios Informáticos, que brinda sus
servicios a PYMEs, instituciones públicas y privadas.

La empresa realiza las siguientes actividades:

● Desarrollo de software a medida


● Desarrollo y soporte de Software genérico bajo demanda
● Alquiler de software como servicio

La empresa cuenta con el siguiente personal:

Gerente de la Empresa o representante legal que se encarga de la gestión


administrativa, económica, firma de contratos, etc.

Gerente de TI, profesional que tiene como funciones planificar, organizar, controlar
gestionar y evaluar los proyectos, procesos, recursos y herramientas que involucran
las actividades de desarrollo de software y la prestación de servicios como el caso
de software como servicio.

Lider de Proyectos, profesional que se encarga de coordinar los recursos


necesarios que involucran a los desarrolladores con la gerencia.

Desarrolladores, personal que está involucrado en el desarrollo y soporte de los


sistemas desarrollados; se tienen 2 permanentes (Devs Seniors) y 2 a 4 eventuales
dependiendo a los proyectos abordados.

A continuación se especifica los herramientas que se usa:

Comunicación y coordinación:

● Correos corporativos asignados para el personal administrativo y de


desarrollo para la comunicación y gestionar cuentas en herramientas o
plataformas que sean necesarias para el desarrollo de sus actividades.
● Whatsapp, Telegram, Slack para creación de grupos y canales de
coordinación.

Desarrollo:

● Trello, slack para planificación de tareas y comunicación


● Git, github, gitlab, docker hub para gestión de código y control de versiones
● Docker ejecutar contenedores durante el desarrollo y pruebas
● Plataformas para despliegue de pruebas como render
● Lenguajes como Nodejs, typescript, vuejs, reactjs, react native, python, php,
java
● Bases de datos mysql, postgres, sql server
● Servidores web nginx, apache
● Servidores VPS alquilados donde se configuran ambientes de producción del
software como servicio.

Software o sistemas que se desarrollan y mantienen:


● Se tienen en desarrollo un sistema basado nodejs con nestjs para el backend
y vuejs para el frontend.
● Se da mantenimiento a un sistema desarrollado en laravel para el backend y
vuejs para el frontend.

2. Involucrados

Desarrollo

● 1 Scrum Master
● 1 Dev Senior, Líder de Equipo
● 2 Devs Fullstack

Gestión

● 2 Gerentes (Administrativo, TI)

Justificación Reuniones y Preguntas

- Gerente Administrativo.- Se realizaría una reunión con el Gerente Administrativo


porque ayudaría a alinear la implementación de DevOps con la visión y estrategia de
la empresa, obtener el respaldo, recursos necesarios y garantizar el éxito del
proyecto a nivel organizativo. En la entrevista se harían las siguientes preguntas:
1. ¿Cuál es la visión estratégica de la empresa en términos de desarrollo de
software y entrega de productos/servicios?
2. ¿Cuáles son las expectativas empresariales en términos de mejora en la
eficiencia, calidad del software o tiempos de entrega?
3. ¿Cómo está la empresa preparada para invertir en términos de recursos
humanos, tecnológicos y financieros?
4. ¿Existe una estrategia de comunicación para asegurar la alineación en toda
la empresa?
- Gerente de TI.- Se realizaría una reunión con el Gerente de TI porque es la persona
que puede garantizar el respaldo estratégico, recursos adecuados y una gestión
efectiva del cambio durante la implementación. En la entrevista se harían las
siguientes preguntas:
1. ¿Cómo describiría los procesos actuales de desarrollo de software en el
equipo?
2. ¿Cuáles son las herramientas clave que se utilizan para el desarrollo y
despliegue de software?
3. ¿Cómo se gestionan los entornos de desarrollo, prueba y producción?
¿Existe consistencia entre estos entornos?
4. ¿Qué métricas de rendimiento se siguen actualmente?
5. ¿Se implementó alguna forma de integración continua o despliegue
continuo?
6. ¿Cómo se gestiona la seguridad del código fuente y las dependencias?
7. ¿Cómo se mide y garantiza la calidad del software?
8. ¿Se identificaron áreas en las que se necesita formación o desarrollo de
habilidades?
- Scrum Master.- Se realizaría una reunión con el Scrum Master porque es la persona
que tiene conocimiento de la cultura y procesos que sigue el equipo dentro del
marco de trabajo Scrum que tiene deficiencias y se pueden mejorar. En la entrevista
se harían las siguientes preguntas:
1. ¿Cuáles son los pasos específicos que se siguen desde la concepción de
una idea hasta la entrega de un producto?
2. ¿Cómo se gestiona la planificación y ejecución de sprints en el marco de
trabajo Scrum?
3. ¿Cómo se comunica y colabora el equipo durante el desarrollo?
4. ¿Existen barreras en la comunicación entre los equipos de desarrollo y
operaciones?
5. ¿Con qué frecuencia se entrega el software a los clientes?
6. ¿Qué métricas se utilizan para evaluar el rendimiento en el desarrollo?
7. ¿Cómo se recopila y gestiona el feedback del usuario?
8. ¿Qué tan rápido se puede incorporar cambios basados en la
retroalimentación del usuario?
- Lider de Equipo.- Se realizaría una reunión con el Líder de Equipo porque es la
persona que tienen la visión completa del flujo de trabajo de desarrollo y comprender
la situación actual del equipo e identificar los desafíos. En la entrevista se harían las
siguientes preguntas:
1. ¿Cómo se manejan el control de versiones y la gestión del código fuente?
2. ¿Cuánto tiempo se invierte en la fusión y resolución de conflictos durante el
proceso de desarrollo?
3. ¿Con qué frecuencia se entrega el software a los clientes?
4. ¿Qué tipo de pruebas se realizan actualmente (unitarias, integración,
funcionales, etc.)?
5. ¿Cómo se realizan los despliegues de software actualmente?
6. ¿Existen desafíos en la consistencia entre los entornos de desarrollo, prueba
y producción?
7. ¿Cuáles son las habilidades actuales del equipo en términos de
herramientas, tecnologías y prácticas?
- Desarrolladores.- Se realizaría una reunión con los desarrolladores para asegurar
su participación activa, entender sus necesidades y desafíos específicos, y
garantizar una implementación de DevOps que mejore significativamente el proceso
de desarrollo de software. En la entrevista se harían las siguientes preguntas:
1. ¿Cómo describirías el proceso actual de desarrollo de software en el equipo?
2. ¿Existen desafíos específicos al fusionar o gestionar cambios en el código?
3. ¿Cómo se realizan las pruebas de software en el proceso de desarrollo?
4. ¿En qué medida se utiliza la automatización en el proceso de desarrollo?
5. ¿Se fomenta la colaboración y la comunicación abierta entre los miembros
del equipo?
6. ¿Hay áreas en las que te gustaría recibir más formación?

3. Plan de Implementación de DevOps


a. Requerimientos Generales
Personal capacitado en DevOps, que adquieran capacidades para aplicar los
fundamentos en el proceso de desarrollo y operaciones.
Automatizar procesos en el desarrollo y operaciones aplicando herramientas
DevOps.
b. Requerimientos específicos del Software
Requisitos de Herramientas de automatización
Requisitos de Integración Continua y Entrega Continua
Requisitos de Control de Calidad y Seguridad
c. Necesidades de TI
Acelerar los tiempos de desarrollo, pruebas y entrega del software.
Mejorar la Calidad y Seguridad del software.
Reducir los costos operativos.
Monitoreo del rendimiento del software para feedback continuo

4. Plan de acción

Herramientas DevOps
- Jenkis
Jenkins es un servidor de automatización open source escrito en Java que ayuda en
la automatización de parte del proceso de desarrollo de un software. Se utiliza para
compilar, probar e implementar software de forma continua, lo que facilita a los
desarrolladores integrar cambios en un proyecto de forma segura y eficiente.

Jenkins es una herramienta esencial para implementar una metodología de


integración y despliegue continuos (CI/CD). La CI/CD es un enfoque para el
desarrollo de software que se centra en la automatización de las tareas de desarrollo
y despliegue. Esto ayuda a las organizaciones a reducir el tiempo de
comercialización de sus productos y a mejorar la calidad del software.

Jenkins puede utilizarse para automatizar una amplia gama de tareas de CI/CD,
incluidas las siguientes:

● Compilación de código
● Pruebas de software
● Implementación de software
● Monitoreo de software
● Análisis de código

Jenkins es una herramienta flexible y extensible que puede adaptarse a las


necesidades específicas de cualquier organización. Está disponible en una amplia
gama de plataformas, incluyendo Linux, Windows y macOS.
En resumen, Jenkins es una herramienta de automatización de código abierto que
ayuda a las organizaciones a implementar una metodología de CI/CD. Es una
herramienta esencial para las organizaciones que desean reducir el tiempo de
comercialización de sus productos y mejorar la calidad del software.

Porque utilizar Jenkins:

● Mejora la calidad del software: Jenkins puede ayudar a detectar y corregir


errores de forma temprana, lo que ayuda a mejorar la calidad del software.
● Reduce el tiempo de comercialización: Jenkins puede ayudar a automatizar
las tareas de desarrollo y despliegue, lo que ayuda a reducir el tiempo de
comercialización de los productos.
● Mejora la colaboración: Jenkins puede ayudar a los desarrolladores a
colaborar de forma más efectiva, lo que puede conducir a un mejor software.

- SonarQube
SonarQube es una plataforma de código abierto para la inspección continua de la
calidad del código a través de diferentes herramientas de análisis estático de código.
Se utiliza para identificar problemas de calidad y seguridad en el código, y obtener
informes detallados sobre cómo mejorar la calidad del código.

SonarQube puede utilizarse para analizar una amplia gama de lenguajes de


programación, incluyendo Java, JavaScript, Python, C++, y más. También puede
utilizarse para analizar código fuente en formatos binarios, como JAR, WAR, y EAR.

Porque utilizar SonarQube:

● Mejora la calidad del código: SonarQube puede ayudar a detectar y corregir


errores de forma temprana, lo que ayuda a mejorar la calidad del software.
● Reduce el tiempo de comercialización: SonarQube puede ayudar a
automatizar las tareas de análisis de código, lo que ayuda a reducir el tiempo
de comercialización de los productos.
● Mejora la colaboración: SonarQube puede ayudar a los desarrolladores a
colaborar de forma más efectiva, lo que puede conducir a un mejor software.

Características para mejorar calidad del código:

● Identificación de errores: SonarQube puede identificar errores de sintaxis,


errores de lógica, y otros errores en el código.
● Detección de vulnerabilidades: SonarQube puede detectar vulnerabilidades
de seguridad en el código, como vulnerabilidades de inyección SQL y
vulnerabilidades de desbordamiento de búfer.
● Métricas de calidad del código: SonarQube puede generar métricas de
calidad del código, como la complejidad ciclomática, la densidad de código, y
la cobertura de pruebas.
Procesos
- Integración continua (CI): Este proceso automatiza la integración de los cambios
de código en un repositorio central. Esto ayuda a garantizar que los cambios de
código sean compatibles entre sí y que se puedan implementar sin problemas.
- Entrega continua (CD): Este proceso automatiza la implementación de los cambios
de código en el entorno de producción. Esto ayuda a reducir el tiempo de
comercialización y a mejorar la calidad del software.
- Pruebas continuas (CT): Este proceso automatiza la ejecución de pruebas de
software a medida que se desarrolla el código. Esto ayuda a detectar errores y
problemas temprano en el proceso de desarrollo.

Tiempos de Implementación de herramientas y procesos

Semana 1-2: Investigación y Planificación

1. Investigación de Herramientas:
○ Investigar las características y requisitos de Jenkins y SonarQube.
○ Evaluar la infraestructura actual y decidir la ubicación del servidor
para Jenkins y SonarQube.
2. Planificación Inicial:
○ Definir objetivos claros para la implementación de Jenkins y
SonarQube.
○ Establecer roles y responsabilidades en el equipo.

Semana 3-4: Instalación y Configuración de Jenkins

3. Instalación de Jenkins:
○ Configurar un servidor VPS para Jenkins.
○ Instalar Jenkins siguiendo la documentación oficial.
4. Configuración Básica:
○ Configurar usuarios y permisos en Jenkins.
○ Crea un nuevo proyecto de Jenkins para tu aplicación.

Semana 5-6: Configuración del Pipeline de CI/CD en Jenkins

5. Configuración del Pipeline:


○ Configurar un pipeline de CI/CD en Jenkins para tu proyecto.
○ Integrar pruebas unitarias y de integración en el pipeline.
6. Despliegue Continuo:
○ Configurar el despliegue continuo en el pipeline para entornos de
prueba.

Semana 7-8: Implementación de SonarQube

7. Evaluación de SonarQube:
○ Investigar características y beneficios de SonarQube según los
objetivos.
○ Seleccionar la versión de SonarQube adecuada y planificar la
integración.
8. Integración en el Pipeline:
○ Configurar SonarQube en el pipeline de Jenkins.
○ Definir reglas de calidad y configuración de análisis estático.

Semana 9-10: Pruebas de Calidad y Seguridad

9. Pruebas de Calidad:
○ Desarrollar pruebas de calidad adicionales, como pruebas de
rendimiento y de carga.
○ Integrar pruebas en el pipeline de CI/CD.
10. Pruebas de Seguridad:
○ Introducir pruebas de seguridad automatizadas, como análisis de
vulnerabilidades.
○ Integrar las pruebas en el pipeline de CI/CD.

Semana 11-12: Pruebas y Ajustes Finales

11. Pruebas y Validación:


○ Realizar pruebas integrales con todas las herramientas y procesos
integrados.
○ Ejecutar pruebas de extremo a extremo utilizando herramientas como
Selenium.
12. Ajustes Finales:
○ Realizar ajustes finales según la retroalimentación del equipo.
○ Documentar el flujo de trabajo y los procesos implementados.

Post-implementación: Capacitación y Mejora Continua

● Capacitación:
○ Proporcionar capacitación a los miembros del equipo sobre las
nuevas herramientas y procesos.
● Mejora Continua:
○ Establecer revisiones periódicas para identificar áreas de mejora
continua.

Casos de Uso

Gestionar el código del repositorio remoto


Control de versiones del Código
Automatizar construcción y despliegue Test
Visualizar y probar software
Diagrama de las herramientas

Métricas de Evaluación
1. Frecuencia de Implementación

Porque mide la frecuencia con la que se implementan cambios en producción. Una


alta frecuencia indica un proceso eficiente y ágil.

○ Cómo medir: Número de implementaciones exitosas en un período de tiempo


específico.
2. Tiempo de Ciclo (Cycle Time)
Porque mide el tiempo transcurrido desde que se inicia el desarrollo de una
característica hasta que se implementa en producción. Un tiempo de ciclo corto
indica eficiencia en el desarrollo y entrega.

○ Cómo medir: Tiempo promedio desde la creación de una tarea o historia de


usuario hasta su implementación en producción.
3. Tiempo de Recuperación ante Fallos (Mean Time to Recover - MTTR)

Porque mide el tiempo que se tarda en restaurar el servicio después de un fallo. Un


MTTR bajo indica una capacidad rápida de respuesta ante problemas.

○ Cómo medir: Tiempo promedio que se tarda en restaurar el servicio después


de una interrupción.
4. Tasa de Éxito de Implementación (Deployment Success Rate):

Porque mide la proporción de implementaciones exitosas frente al total. Una alta


tasa de éxito indica estabilidad en el proceso de implementación.

○ Cómo medir: Número de implementaciones exitosas dividido por el número


total de implementaciones.
5. Porcentaje de Cobertura de Pruebas (Test Coverage Percentage)

Porque mide la proporción de código que está cubierto por pruebas automatizadas.
Una alta cobertura reduce el riesgo de errores no detectados.

○ Cómo medir: Porcentaje del código fuente cubierto por pruebas


automatizadas.

Arquitectura
En este diagrama se cuenta con los siguientes componentes:

Se tiene un repositorio GitLab, al que se accede mediante internet para gestionar el código.

Se cuenta con un servidor VPS con los recursos necesarios para implementar Jenkis,
SonarQube y Nginx dentro de contenedores, formando una red de contenedores para su
comunicación.

El flujo inicia cuando el desarrollador realiza cambios en el código y los sube al repositorio
GitLab. Jenkins detecta el cambio, se inicia el proceso de pruebas y se envía el código para
análisis de calidad y seguridad a SonarQube, este retorna el informe de resultados a
Jenkins. Si las pruebas son exitosas, Jenkins notifica al cliente de que el software está listo
para ser probado. El cliente puede acceder al entorno de prueba y probar el software.

También podría gustarte