DevOps para el Proyecto Carpeta Fiscal
DevOps para el Proyecto Carpeta Fiscal
AUTOR
Clara Alessandra JUSTINO LÍMACO
ASESOR
Joel Fernando MACHADO VICENTE
Lima, Perú
2021
Reconocimiento - No Comercial - Compartir Igual - Sin restricciones adicionales
[Link]
Usted puede distribuir, remezclar, retocar, y crear a partir del documento original de modo no
comercial, siempre y cuando se dé crédito al autor del documento y se licencien las nuevas
creaciones bajo las mismas condiciones. No se permite aplicar términos legales o medidas
tecnológicas que restrinjan legalmente a otros a hacer cualquier cosa que permita esta licencia.
Referencia bibliográfica
Datos de autor
Datos de investigación
Siendo las 17:13 horas del día 21 de diciembre del año 2021, se reunieron
virtualmente los docentes designados como Miembros de Jurado del Trabajo de
Suficiencia Profesional, presidido por el Mg. Alcántara Loayza Cesar Augusto
(Presidente), Mg. Cortez Vásquez Augusto Parcemon (Miembro) y el Mg. Machado
Vicente Joel Fernando (Miembro Asesor), usando la plataforma Meet
([Link] para la sustentación virtual del Trabajo de
Suficiencia Profesional intitulado: “IMPLEMENTACIÓN DE LA METODOLOGÍA
DEVOPS PARA MEJORAR EL PROCESO DE DESARROLLO DE SOFTWARE
DEL PROYECTO CARPETA FISCAL ELECTRÓNICA EN LA FISCALÍA DE LA
NACIÓN”, por el Bachiller Justino Límaco Clara Alessandra; para obtener el Título
Profesional de Ingeniera de Software.
_____________________
Presidente
Mg. Alcántara Loayza Cesar Augusto
__________________ _____________________
Miembro Miembro Asesor
Mg. Cortez Vásquez Augusto Parcemon Mg. Machado Vicente Joel Fernando
AGRADECIMIENTOS
IV
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERIA DE SISTEMAS E INFORMÁTICA
ESCUELA PROFESIONAL DE INGENIERÍA DE SOFTWARE
RESUMEN
V
NATIONAL MAJOR UNIVERSITY OF SAN MARCOS
FACULTY OF SYSTEMS ENGINEERING AND INFORMATIC
PROFESSIONAL SCHOOL OF SOFTWARE ENGINEERING
Title: Work of Professional Sufficiency to opt for the Professional Title of Software
Engineer
ABSTRACT
The present work of professional sufficiency for achieving the professional title of
Software Engineer, describes the project of DevOps methodology
implementation for the Electronic Prosecutor Folder project in the Public
prosecution of the Nation. For this, a set of procedures and elements are
established that ensure the delivery of the software, and a solution is given to the
inconveniences that have arisen throughout the software development process
of the Electronic Fiscal Folder project. Using the Scrum methodology, the
objectives set are achieved in the estimated time, improving the software
integration and deployment process between 30% and 40% in software delivery
times and development team productivity.
VI
CONTENIDO
ÍNDICE DE TABLAS .............................................................................................................. VIII
ÍNDICE DE FIGURAS .............................................................................................................. IX
INTRODUCCIÓN ........................................................................................................................ 1
CAPÍTULO I TRAYECTORIA PROFESIONAL .................................................................... 3
1.1. Presentación profesional ....................................................................................... 3
1.2. Experiencia profesional .......................................................................................... 3
1.3. Formación académica ............................................................................................. 6
1.4. Idiomas ........................................................................................................................ 6
CAPÍTULO II CONTEXTO EN EL QUE SE DESARROLLÓ LA EXPERIENCIA ........... 7
2.1. Empresa – actividad que realiza .......................................................................... 7
2.2. Visión ........................................................................................................................... 7
2.3. Misión .......................................................................................................................... 7
2.4. Organización de la empresa .................................................................................. 7
2.5. Área, cargo y funciones desempeñadas............................................................ 9
2.5.1 Área ...................................................................................................................... 9
2.5.2 Cargo .................................................................................................................... 9
2.5.3 Funciones desempeñadas ................................................................................ 9
2.6. Experiencia profesional realizada en la organización .................................. 10
CAPÍTULO III ACTIVIDADES DESARROLLADAS ........................................................... 11
3.1. Situación problemática ......................................................................................... 11
3.1.1 Definición del problema ................................................................................... 11
3.2. Solución .................................................................................................................... 13
3.2.1 Objetivos ............................................................................................................ 13
3.2.2 Alcance Funcional ............................................................................................ 14
3.2.3 Etapas y Metodología ...................................................................................... 14
3.2.4 Fundamentos Utilizados .................................................................................. 16
3.2.5 Implementación de las áreas, procesos, sistemas y buenas prácticas ... 29
3.3. Evaluación ................................................................................................................ 54
CAPÍTULO IV REFLEXIÓN CRITICA DE LA EXPERIENCIA ......................................... 58
CAPÍTULO V CONCLUSIONES Y RECOMENDACIONES ............................................. 59
5.1. Conclusiones........................................................................................................... 59
5.2. Recomendaciones.................................................................................................. 60
BIBLIOGRAFÍA ........................................................................................................................ 61
GLOSARIO ............................................................................................................................... 63
ANEXOS .................................................................................................................................... 65
VII
ÍNDICE DE TABLAS
VIII
ÍNDICE DE FIGURAS
IX
INTRODUCCIÓN
1
En el CAPITULO III se detalla el trabajo realizado respecto a la
implementación DevOps para el proyecto Carpeta Fiscal Electrónica, se expone
el problema, los objetivos, etapas y metodología usada.
En el CAPITULO IV se detalla la reflexión crítica de la experiencia
adquirida a lo largo del proyecto señalando los puntos más relevantes que fueron
clave para el logro de los objetivos.
En el CAPITULO V se describe las conclusiones y
recomendaciones del presente Trabajo Profesional.
2
CAPÍTULO I
TRAYECTORIA PROFESIONAL
Tabla 1: Empresa 1
3
Tabla 2: Empresa 2
PLATANITOS
Enero 2019 - Julio 2019
Cargo Programador Backend Senior
Desarrollo de aplicación para conteo de personas haciendo
uso del reconocimiento facial.
Desarrollo de servicios para proyecto OMNI, sistema de
Funciones
venta y gestión de almacén omnicanal en la cadena de
tiendas platanitos, en plataforma AWS
Soporte del sistema de ventas de las tiendas platanitos.
Nota: Elaboración propia
Tabla 3: Empresa 3
Tabla 4: Empresa 4
SUNAT
Febrero 2017 - Enero 2018
Cargo Programador
4
Resolución de incidencias derivadas de las bases de datos
en la División de Desarrollo de Sistemas Tributarios.
Resolución de incidencias derivados del módulo de liberación
de fondos en la División de Desarrollo de Sistemas
Tributarios.
Resolución de incidencias derivados del módulo de
retenciones-percepciones de fondos en la División de
Desarrollo de Sistemas Tributarios.
Resolución de incidencias derivados del módulo de carrito de
Funciones
pago en la División de Desarrollo de Sistemas Tributarios.
Mantenimiento y desarrollo de funcionalidades en el módulo
liberación de fondos de la División de Desarrollo de Sistemas
Tributarios.
Mantenimiento y desarrollo de funcionalidades en el módulo
de retenciones-percepciones de la División de Desarrollo de
Sistemas Tributarios.
Mantenimiento y desarrollo de archivos batch 4GL de la
División de Desarrollo de Sistemas Tributarios.
Nota: Elaboración propia
Tabla 5: Empresa 5
5
protección y visualización de parámetros de operación en
PC embebida - Raspberry.
Implementación de transmisor y receptor de audio streaming
basado en OpenOB en PC embebida - Raspberry.
Implementación, administración y adecuación de página
web bajo la herramienta Joomla (URL: [Link]).
Nota: Elaboración propia
1.4. Idiomas
Tabla 7: Idiomas
Nativo Español
Intermedio Portugués
Avanzado Ingles
6
CAPÍTULO II
CONTEXTO EN EL QUE SE DESARROLLÓ LA EXPERIENCIA
2.1. Empresa – actividad que realiza
2.2. Visión
2.3. Misión
7
Gerencia General y a la que pertenece el equipo del proyecto Carpeta Fiscal
Electrónica.
8
Figura 2: Equipo Proyecto Carpeta Fiscal Electrónica
2.5.1 Área
Las funciones asignadas fueron desarrolladas en el Proyecto
Carpeta Fiscal Electrónica (CFE) de la Oficina General de Tecnologías de la
Información, la que pertenece a la Gerencia General.
2.5.2 Cargo
Analista DevOps, bajo la Jefatura del área de Arquitectura de
Software y coordinación con los squads encargados del desarrollo e
implementación del proyecto Carpeta Fiscal Electrónica.
10
CAPÍTULO III
ACTIVIDADES DESARROLLADAS
3.1. Situación problemática
11
Generador de Notificaciones: automatiza el proceso de la creación de la
notificación fiscal remitiendo directamente a la Central de Notificaciones.
Central de Notificaciones: diligencia las notificaciones remitidas hacia los
despachos fiscales
Mesa de Partes Electrónica (MPE): permite al público presentar los
documentos correspondientes a denuncias hechas.
Bandeja Fiscal: permite a los despachos fiscales atender las denuncias y
documentos existentes que el público mediante la Mesa de Partes
Electrónica
12
Falta de entorno de desarrollo destinado a las pruebas de integración del
equipo de desarrollo frontend y backend.
Falta de entorno preproducción destinado a las capacitaciones.
Falta de versionamiento de componentes en producción.
Dificultad en uso de diferentes versiones de dependencias para cada
componente: frontend y backend.
Carencia de uso de métricas para evaluación de código desarrollado.
Las migraciones manuales de las bases de datos empleadas, en
diferentes entornos, se tornaban tediosas.
Carencia para acceso a logs de componentes ya desplegados.
Demora de tiempo en los pases a producción.
3.2. Solución
3.2.1 Objetivos
Objetivo general
Implementar la metodología DevOps para mejorar el proceso de
desarrollo de software del proyecto Carpeta Fiscal Electrónica de la Fiscalía de
la Nación.
Objetivos Específicos
Definir las herramientas que se usa para asegurar la implementación
DevOps
Definir los pipelines para todos los componentes que se involucran en el
DevOPS
Realizar la instalación de las herramientas DevOps en los servidores de
la MPFN.
Realizar la documentación necesaria, comunicar y capacitar a los
miembros de los diferentes equipos, que componen el proyecto Carpeta
Fiscal Electrónica, acerca de las herramientas y como usarse.
13
Análisis comparativo de los resultados de la implementación de DevOps.
14
Tabla 8 Listado de Sprints
SPRINT PERIODO
Sprint 1 14 de diciembre 2020 – 23 de diciembre 2020
Sprint 2 28 de diciembre 2020 – 9 de enero 2021
Sprint 3 11 de enero 2021 – 22 de enero 2021
Sprint 4 25 de enero 2021 – 5 de febrero 2021
Sprint 5 08 de febrero – 26 de febrero
Sprint 6 1 de marzo 2021 – 12 de marzo 2021
Sprint 7 15 de marzo 2021 – 26 de marzo 2021
15
4. Como herramienta de apoyo para el seguimiento del proyecto se utilizó
Trello, la cual a través del uso de tarjetas permite gestionar, supervisar y
compartir las tareas de principio a fin.
DevOps
16
el fin de obtener todos los beneficios de los enfoques de desarrollo
de software moderno que emplean lanzamientos rápidos de nuevas
funciones de software para los usuarios finales y, posteriormente,
aprender de ellos.
Cultura DevOps:
En (Consulting, 2021) se indica:
Para lograr un aumento de productos, servicios y la necesidad de
entregar rápidamente actualizaciones de sistemas tecnológicos, la
cultura DevOps juega un papel importante en la metodología ágil y
debe implementarse gradualmente, llevando a la unión entre el
desarrollo de tecnologías de la información y las operaciones, la
automatización de tareas, la transformación de entornos en
entornos escalables, la mejora de los indicadores de eficiencia e
incluso la reducción de costes para las empresas resultan
ventajosas.
También (Walls, 2013) menciona:
En los últimos años se ha debatido mucho sobre lo que es y no es
DevOps. DevOps se trata tanto de cultura como de herramientas,
y la cultura se trata de personas. No se garantiza que dos grupos
de personas creen el mismo tipo de cultura en circunstancias
similares entonces, hablar de un movimiento cultural en términos
absolutos es falso. La implementación de una cadena de
herramientas prescrita no convertirá mágicamente a su equipo en
un equipo de DevOps. El uso de herramientas y flujos de trabajo
17
compatibles con DevOps puede ayudar al trabajo en equipo de una
manera más DevOps, pero crear una cultura que apoye los ideales
del movimiento DevOps es crucial.
Pilares DevOps:
En (Davis & Daniels, 2016) se identifican cuatro pilares en común
que cualquier equipo u organización que busque implementar DevOps
necesitará dedicar tiempo y recursos:
18
Elementos:
19
recopilar comentarios e indicadores con regularidad. Luego,
sobre la base de esta información, formalice, defina y siga un
plan de mejora.
Otros procesos: Monitoreo y registro de información relevante
para facilitar el diagnóstico y la resolución de problemas.
Metologías ágiles
Scrum
20
adaptables para problemas complejos. Se basa en el empirismo y
el pensamiento lean: donde el empirismo afirma que el
conocimiento proviene de la experiencia y de la toma de decisiones
con base en lo observado y donde el pensamiento Lean reduce el
desperdicio y se enfoca en lo esencial.
Roles:
22
propietario del producto y el equipo de desarrollo asegura
que este artefacto se entienda comúnmente y se
implementen las cosas correctas. Se trata de una desviación
de la gestión de requisitos tradicional en la que las
especificaciones se escriben para ahorrar tiempo de
conversación. El Product Backlog siempre está ordenado
para que en todo momento sea transparente en lo que se
necesita trabajar a continuación.
Sprint Backlog: consiste en los elementos del Product
Backlog pronosticados por el Equipo de Desarrollo en el
Sprint actual. También contiene el desglose de tareas para
mostrar cómo convertir estos elementos en un Incremento
de producto "hecho". El equipo de desarrollo lo crea durante
la reunión de planificación del Sprint y es el único
responsable. Las personas ajenas al equipo no tienen voz
en su creación o uso. El Sprint Backlog es un artefacto
viviente, refinado, actualizado y corregido todos los días que
muestra el estado exacto del Sprint. Dado que Scrum ve
cada Sprint como un proyecto separado, se puede comparar
con un plan de proyecto. Si no cambia, no es un Sprint
Backlog real.
Eventos:
23
Sprint Planning: La reunión de planificación de Sprint es
lo primero que sucede en el ciclo y es el inicio oficial de
un Sprint. Persigue dos objetivos que a menudo están
representados en dos partes de esta reunión, el primer
objetivo es llegar a un acuerdo entre el Product Owner y
el Equipo de Desarrollo sobre lo que se desea en el
próximo Sprint. Esto generalmente termina con un
pronóstico del Equipo de Desarrollo, que le dice al Product
Owner qué esperar al final del Sprint actual. El segundo
objetivo es que el Equipo de Desarrollo planifique este
próximo Sprint, a menudo mediante la creación de tareas
de 8hrs o menos. El resultado final de esta reunión es el
Sprint Backlog que muestra con una granularidad muy
fina lo que el equipo va a abordar y cómo pretenden
lograrlo.
Daily Scrum: No es una reunión de estado, sino una
reunión de planificación. El equipo de desarrollo planifica
cómo alcanzar el objetivo de Sprint todos los días,
teniendo en cuenta el progreso reciente. Por supuesto, el
Scrum Master puede apoyar al equipo facilitando este
período de tiempo diario de 15 minutos. El estado de
todos se divulga, no por el hecho de conocer el estado,
sino para tomar las decisiones correctas al cambiar el
Sprint Backlog y, por lo tanto, el plan general. El Daily
Scrum también es una gran oportunidad para observar la
motivación y la autoorganización del Equipo de
Desarrollo. No se permiten invitados; generalmente ni
siquiera el Product Owner participa ya que las discusiones
se enfocan a un nivel técnico, que él no comprende.
Sprint review: La revisión de Sprint está abierta para
cualquiera que esté interesado en el resultado de Sprint.
Su objetivo es colaborar con todos los presentes sobre
qué hacer a continuación, para obtener inspiración e
identificar la necesidad de cambios. Es una reunión de
24
planificación, dirigida más al plan a largo plazo.
Idealmente, los clientes asistentes prueban el producto
ellos mismos y no solo ven a otra persona hacerlo. Las
presentaciones largas están prohibidas, no se trata de
presentaciones de diapositivas. Además, el objetivo
principal no es aceptar formalmente el resultado del
Sprint. Esto se puede hacer, pero es una muy mala
práctica, ya que generalmente significa que el propietario
del producto sabe, al mismo tiempo que sus partes
interesadas y clientes, qué se hizo y qué tan bien se logró.
Retrospectiva Sprint: Por lo general, la retrospectiva de
Sprint es el final oficial de un Sprint. Durante esta reunión
se inspecciona el proceso y se identifican las medidas
para mejorarlo. Hay muchas formas de llevar a cabo una
reunión de este. Lo importante es que se definan medidas
concretas; no basta con criticar el statu quo. Solo el
Equipo Scrum está presente en esta reunión, no se
permiten invitados. Es importante realizar la retrospectiva
en cada Sprint y que la lleve a cabo un Scrum Master
experimentado. Esto ayuda a los participantes a
concentrarse y crea un ritmo constante de mejora
continua. Si se lleva a cabo bien, esta reunión puede
revelar grandes oportunidades de mejora de la
productividad que, si se implementan, pueden generar
ganancias tangibles.
25
Figura 6: Flujo de funcionamiento Scrum
El caso Spotify
26
diferentes squads colaboran para mantener un documento de hoja
de ruta de alto nivel que muestra hacia dónde se dirige Spotify en
su conjunto. Además, el mantenimiento de una cartera de
productos coincidente para cada equipo también es
responsabilidad del Product Owner. Aparte de eso, cada squad
tiene acceso a un entrenador ágil. El ágil entrenador ayudará a la
plantilla a progresar y mejorar su forma de trabajar para conseguir
el objetivo. En Spotify, también hay una tribu. Es una colección de
squads cuyo objetivo es minimizar las dependencias que pueden
obstruir o ralentizar a un squad. Estos squads trabajan en la misma
ubicación de oficina para promover la colaboración entre squads.
Cada tribu está dirigida por un líder de tribu cuya responsabilidad
incluye proporcionar el mejor hábitat posible para los squads dentro
de la tribu. Las tribus están diseñadas básicamente para tener
menos de 100 personas, y realizan reuniones periódicas para
mostrar en qué han trabajado, entregado y logrado para que otros
puedan aprender de ellas.
27
preliminar se realiza conforme con los procedimientos y las
garantías correspondientes, y cuya sentencia revela lo que
realmente se discutió y se logró probar en el juicio oral.
Carpeta Fiscal
La denuncia
El Informe Policial de ser el caso
Las diligencias de investigación que se hubieran realizado o
dispuesto ejecutar
Los documentos obtenidos
Los dictámenes periciales realizados
Las actas levantadas
Las disposiciones emitidas
Las providencias dictadas
Los requerimientos formulados
Las resoluciones emitidas por el Juez de la Investigación
Preparatoria, y toda documentación útil a los fines de la
investigación.
28
Figura 7: Almacén de carpeta fiscales en MPFN
SPRINT 1
En el presente sprint se completaron tres historias de usuario las
cuales implicaron la organización del repositorio Gitlab, la elaboración de un
procedimiento para la entrega de software y la definición de la arquitectura
DevOps a implementar. Como resultado del release se obtuvo:
29
Definición del procedimiento de entrega de software:
El procedimiento de entrega para cada componente software (figura 8) se
realiza en los 4 entornos definidos para el proyecto de la Carpeta Fiscal
Electrónica, ellos se definen a continuación:
30
Figura 9: Flujo para entrega de software
31
Figura 10: Arquitectura DevOps
32
En la tabla 10 se muestra todos los componentes y la manera que están
agrupados en el gestor
RUTA
COMPONENTES TECNOLOGIA GRUPO
REPOSITORIO
PORTAL WEB DE MESA
JAVA 8 JEE backend back-mesa-parte
PARTES ELECTRONICAS
FLUJO FISCAL JAVA 8 JEE backend carpeta-fiscal-back
ALMACENAMIENTO cfegestordocument
JAVA 8 JEE backend
NOTIFICACIONES al
ALMACENAMIENTO MESA
JAVA 8 JEE backend repositorio
PARTES
GESTION DE USUARIO JAVA 8 JEE backend cfe-sad
GENERADOR DE cfe-generador-
JAVA 8 JEE backend
NOTIFICACIONES notificaciones
CASILLA ELECTRONICA JAVA 8 JEE backend casilla-backend-v2
investiga-fiscal-
INVESTIGA FISCAL JAVA 8 JEE backend
back
CENTRAL DE
JAVA 8 JEE backend cfe-central-backend
NOTIFICACIONES
33
CONFIGURATION JAVA 8 JEE backend/libreria mpfn-configuration
34
A su vez se estableció el uso de 3 perfiles para el manejo de dicha
herramienta:
Maintainer: Perfil de los líderes de squads y encargados de aprobar
los merge request.
Developer: Perfil para cada integrante del equipo de desarrollo y
analistas QA.
Administrator: Perfil que maneja el analista DevOps.
SPRINT 2
En el presente sprint se completó una historia de usuario la cual
implicó la implementación del entorno de desarrollo. Como resultado del release
se obtuvo la creación del entorno. Dicho entorno se creó a partir de un hipervisor
(figura 12) con las siguientes características:
IP: [Link]
CPU: 8 cores
RAM: 32 GB
Almacenamiento: 2 TB
35
La arquitectura para el entorno de desarrollo, presente en la figura
13, se define de la misma manera que está configurado el entorno de calidad:
SERVIDOR DE APLICACIONES
IP: [Link]
CPU: 4 cores
RAM: 15GB
Almacenamiento: 1,2 TB
Sistema Operativo: Centos 7
36
Figura 14: Máquina virtual aplicaciones - desarrollo
37
SPRINT 3
En el presente sprint se completó una historia de usuario la cual
implicó la definición de la herramienta de automatización CI/CD. Como resultado
del release se realizó la elección e implementación de la herramienta de
automatización CI/CD.
Para la elección de la herramienta de automatización CI/CD se
tomó en consideración dos herramientas que los miembros del equipo de
desarrollo ya conocían: Jenkins y Gitlab CI/CD. En la tabla 11 se muestra el
cuadro comparativo elaborado para la toma de decisión.
Gitlab CI/CD
Herramienta para el desarrollo de software que hace uso de las
siguientes prácticas continuas:
Integración Continua (CI)
Entrega Continua (CD)
Despliegue Continuo (CD)
38
Figura 16: Gitlab CI/CD
Proceso de despliegue
Con respecto al proceso de despliegue (Singh, Nikita Seth, & Kaur,
2019) afirman:
Un pipeline se activa cuando se confirma un cambio en un
repositorio Gitlab. Un pipeline para Gitlab es un archivo YML que
contiene una serie de trabajos o etapas a ejecutar. Cada etapa
tiene su propio significado y contiene una lista de pasos a ejecutar
para el despliegue de la última compilación en el servidor. El
pipeline activa un runner para hacer una compilación. Una vez que
se prepara una compilación después de pasar con éxito todos los
casos de prueba declarados, el archivo YML realiza el siguiente
paso de crear una imagen docker a partir de la compilación,
utilizando el archivo Dockerfile almacenado en el repositorio.
39
Figura 17: Máquina virtual para DevOps
40
A partir del uso de dockers dichos runners realizan las tareas que
se les asigna en cada componente. Su configuración se muestra en la figura 19:
SPRINT 4
En el presente sprint se completó una historia de usuario la cual
implicó la implementación del entorno de preproducción. Como resultado del
release se obtuvo la creación del entorno. Dicho entorno se creó a partir de un
hipervisor (figura 20) con las siguientes características:
IP: [Link]
CPU: 8 cores
RAM: 31.95 GB
Almacenamiento: 2,6 TB
41
Figura 20: Hipervisor para entorno de preproducción
42
Al igual que en el entorno de desarrollo se hizo uso del servicio
docker para crear contendedores donde desplegar todos los componentes
previamente mencionados, en este caso los componentes frontend en APACHE
y los backend en WILDFLY. En el caso de los contenedores Wildfly se repartirán
los componentes backend en cada uno de ellos, tal como se evidencia en la
figura 21. El ambiente de preproducción cuenta con 2 máquinas virtuales (figura
22 y 23), los detalles se muestran a continuación:
SERVIDOR DE APLICACIONES
IP: [Link]
CPU: 4 cores
RAM: 15GB
Almacenamiento: 1,2 TB
Sistema Operativo: Centos 7
43
Figura 23: Máquina virtual base de datos - preproducción
SPRINT 5
En el presente sprint se completó una historia de usuario la cual
implicó la definición de la herramienta de monitorización. Como resultado del
release se realizó la implementación de la herramienta para el monitoreo de
funcionamiento de las apis para los ambientes de desarrollo, calidad y
preproducción, para dicha actividad se eligió la herramienta ELK.
IP: [Link]
CPU: 4 cores
RAM: 15GB
Almacenamiento: 1,2 TB
Sistema Operativo: Centos 7
44
Figura 24: Máquina virtual para ELK
ELK
La definición se menciona en (elastic, 2021) como:
La unión de 3 proyectos open source: Elasticsearch, Logstash y
Kibana. Elasticsearch es un motor de búsqueda y analítica.
Logstash es un pipeline de gestión de datos del lado del servidor
que consume datos de gran cantidad de fuentes simultáneamente,
los procesa y luego los envía a Elasticsearch. Kibana facilita a los
usuarios la visualización de los datos en gráficos y cuadros
haciendo uso también de Elasticsearch.
45
Figura 25: Nueva arquitectura que integra ELK
46
Figura 27: Captura de logs desde ELK
SPRINT 6
En el presente sprint se completó dos historias de usuario las
cuales implicaron la definición de la herramienta de repositorio de artefactos y
evaluación de código. Como resultado del release para el presente sprint se
realizó la elección e implementación de las herramientas:
Nexus Sonatype
47
Figura 28: Repositorios Nexus Sonartype
48
docker-group: agrupa todos los repositorios anteriores y proporciona una
única URL para la descarga.
Sonarqube
En (Lenarduzzi, Lomio, Huttunen, & Taibi, 2020) se indica:
SonarQube es una de las herramientas de análisis de código
estático de código abierto más comunes adoptadas en la industria.
SonarQube calcula varias métricas, como el número de líneas de
código y la complejidad del código, y verifica el cumplimiento del
código con un conjunto específico de "reglas de codificación"
definidas para la mayoría de los lenguajes de desarrollo comunes.
En caso de que el código fuente analizado viole una regla de
codificación o si una métrica está fuera de un umbral predefinido,
SonarQube genera un "problema". SonarQube incluye reglas de
confiabilidad, mantenibilidad y seguridad.
49
Una vez agregados los componentes del repositorio Gitlab a la
herramienta Sonarqube (figura 30), se definió un gate inicial que solo incluyen
las métricas de bugs, code smells y líneas duplicadas. Dichas métricas, las
cuales se muestran en la figura 31, se usan para realizar la evaluación respectiva
del código en cada despliegue del entorno desarrollo, dichos valores de las
métricas cambiaran sus restricciones según lo indiquen los líderes de cada
squad.
SPRINT 7
En el presente sprint se completó dos historias de usuario las
cuales implicaron la definición de la herramienta de migración de base de datos
y la integración de los pipelines. Como resultado del release se realizó la
creación de los pipelines en cada componente y también la configuración de la
herramienta para la gestión en las migraciones de BD.
Flyway
“Herramienta para la gestión de los cambios del esquema de base
de datos de nuestra aplicación. Actualiza una base de datos de una versión a la
siguiente mediante migraciones. Las migraciones son en SQL con sintaxis
específica de base de datos o en Java para transformaciones de base de datos
avanzadas.” (Baeldung, 2021)
50
Figura 32: Colección de scripts en repositorio CFE
Elaboración de pipelines
Al ser Gitlab CI/CD la herramienta encargada de la automatización
de CI/CD se hace uso del archivo “.[Link]”, el cual se define dentro del
repositorio de cada componente. En el pipeline se digita el paso a paso para el
proceso de despliegue en cada entorno y también se indica, de ser necesario, la
conexión con las herramientas que participan en ese despliegue como:
sonarque, flyway, entre otras.
51
A continuación, en la figura 34 se muestra una pequeña parte del
pipeline correspondiente a un componente backend, en el anexo se coloca su
contenido completo.
Figura 34: Pipeline Gitlab
52
Figura 35: Ejecución pipeline
53
Cada repositorio de los componentes creados presenta
particularidades en sus pipelines y en todos se definen los pasos de despliegue
a llevar a cabo para cada entorno: desarrollo, calidad y preproducción. En el
sprint 1 se identificaron 35 componentes, para cada uno de ellos se creó su
pipeline y su gestión se puede realizar desde la misma plataforma de Gitlab tal
como se muestra en la figura 38.
3.3. Evaluación
54
Figura 39: Variación de commits en el 2021
INICIO
DevOps
INICIO
DevOps
55
Tabla 12: Cantidad de incidencias resueltas por componente
Componentes Enero Febrero Marzo Abril Mayo Junio Julio Agosto Setiembre Total
CASILLA ELECTRONICA 15 2 17
ADMINISTRADOR GENERAL 25 6 1 4 4 40
BANDEJA FISCAL 9 2 9 1 2 23
CARPETA FISCAL 77 27 123 52 210 197 176 76 145 1083
FISTUR 34 14 48
GENERADOR NOTIFICACIONES 19 2 4 25
INVESTIGACIÓN_FISCAL 2 39 41
MESA DE PARTES 1 3 1 1 1 9 1 17
Total 136 45 129 68 251 210 210 99 146 1294
INICIO
DevOps
Tiempo
promedio de Cantidad de
pase a pases a
producción por producción
componente
Enero 2hrs 2
Febrero 2hrs 30 min 2
Marzo 1hr 30 2
INICIO Abril 1hr 30 3
DevOps Mayo 1hr 2
Junio 1hr 7
Julio 50 min 10
Agosto 45 min 12
Setiembre 45 min 12
56
En el caso de las nuevas funcionalidades, hasta el mes de mayo la variación
no es muy evidente, pero desde junio hasta setiembre se evidencia la
disminución de esos días promedio.
30
25
20
15
Defect
10
Feature
5
0
INICIO
DevOps
57
CAPÍTULO IV
REFLEXIÓN CRITICA DE LA EXPERIENCIA
58
CAPÍTULO V
CONCLUSIONES Y RECOMENDACIONES
5.1. Conclusiones
59
5.2. Recomendaciones
60
BIBLIOGRAFÍA
Airaj, M. (2016). Enable cloud DevOps approach for industry and higher.
Concurrecy Computat.
Alqudah, M., & Razali, R. (2016). A Review of Scaling Agile Methods in Large
Software Development. International Journal on Advanced Science
Engineering and Information Technology.
Baeldung. (2021). Database Migrations with Flyway. Obtenido de
[Link]
Consulting, G. (2021). DevOps na prática: dia a dia do desenvolvedor. Obtenido
de [Link]
Davis, J., & Daniels, K. (2016). Effective DevOps. O'REILLY.
elastic. (2021). ELK stack. Obtenido de [Link]
stack
Gitlab. (2021). Gitlab Desarrollo continuo. Obtenido de
[Link]
spanish/
Jaatun, M. G., Cruzes, D., & Luna, J. (2017). DevOps for Better Software Security
in the Cloud., (págs. 1-6).
Kumar, G., & Kumar, P. (2012). Impact of Agile Methodology on Software
Development Process. International Journal of Computer Technology and
Electronics Engineering.
Lenarduzzi, V., Lomio, F., Huttunen, H., & Taibi, D. (2020). Are SonarQube Rules
Inducing Bugs? Internation COnference on Software Analysis, Evolution
and Reengineering.
Lwakatare, L., Kilamo, T., Karvonena, T., Sauvolaa, T., Heikkiläc, V., Itkonenc,
J., . . . Lassenius, C. (Junio de 2019). DevOps in practice: A multiple case
study of five companies. Information and Software Technology.
Mahnic, V., & Drnovscek, S. (2005). Agile Software Project Management with
Scrum.
Maximini, D. (2015). The Scrum Culture. Springer.
MPFN. (2006). Reglamento de la Carpeta Fiscal. Obtenido de
[Link]
rpeta_fiscal_aprobado_con_R_748-[Link]
MPFN. (2021). Obtenido de Estructura Organizacional MPFN:
[Link]
[Link]
MPFN. (2021). Cultura Organizacional. Obtenido de
[Link]
61
MPFN. (2021). Nuevo Codgio Procesal Penal. Obtenido de
[Link]
_p.pdf
MPFN. (s.f.). Presentacion Nuevo Codigo Procesal Penal. Obtenido de
[Link]
OBrien, T. (2021). "Why Nexus?" for the Non-Programmer. Obtenido de
[Link]
Radicals, A. (2021). The Spotify Model. Obtenido de [Link]
[Link]/en/the-spotify-model-2-2
Schwaber, K., & Sutherland, J. (2020). Scrum Guide. Obtenido de
[Link]
[Link]
Singh, C., Nikita Seth, G., & Kaur, M. (2019). Comparison of Different CI/CD
Tools Integrated with Cloud Platform. International Conference on Cloud
Computing, Data Science & Engineering (Confluence).
Walls, M. (2013). Building a DevOps Culture.
Willis, J. (Julio de 2010). What Devops Means to Me. Obtenido de
[Link]
62
GLOSARIO
63
12. DevSecOps: Enfoque de la cultura, la automatización y el diseño de la
plataforma que integra la seguridad como una responsabilidad compartida a
lo largo de todo el ciclo de vida de TI.
13. CI/CD: Acrónimo de Integración Continua – Despliegue Continuo.
14. Maven: Herramienta que proporciona pautas para realizar configuraciones
mínimas. Compila el código fuente, ejecuta pruebas, empaqueta los
resultados en JAR, WAR, etc. y carga los paquetes en repositorios remotos.
64
ANEXOS
ANEXO 1: Detalle de historias de usuario
ID HU01
Prioridad Alta
Como miembro del equipo de infraestructura se precisa contar con una arquitectura
para la implementación DevOps
Criterios de aceptación:
Definir el tipo de herramientas que participan en la arquitectura DevOps, al
igual que el funcionamiento que tendrá.
Se debe tomar en cuenta los servidores on premise disponibles.
ID HU02
Prioridad Alta
Como miembro del equipo de desarrollo y calidad preciso de conocer los pasos a
llevar a cabo para realizar la entrega del software desarrollado para:
Las pruebas de integridad
Las pruebas en el ambiente de calidad
Las pruebas de aceptación
Puesta en producción
Criterios de aceptación:
Definir cuántos entornos se crearán.
Definir personal encargado del control de las entregas.
Documentación respectiva al procedimiento acordado
ID HU03
Prioridad Baja
Como miembro del equipo de desarrollo requiero contar con accesos para la
herramienta de control de versiones elegida
Criterios de aceptación:
65
Definir los roles y crear los usuarios correspondientes en el gestor de
versiones
Agrupar y crear directorios según contenido de componentes
ID HU04
Prioridad Alta
Como miembro del equipo de infraestructura preciso definir que herramienta llevará a
cabo las tareas de automatización en la entrega de software
Criterios de aceptación:
La herramienta debe estar instalada en un servidor on premise y estar lista
para su funcionamiento
La herramienta debe poder integrarse con el controlador de versiones que el
equipo ahora usa, Gitlab
La herramienta debe incluir integración para todos los elementos que DevOps
define.
El uso de la herramienta debe explicarse mediante una capacitación.
La herramienta debe ser de código abierto.
ID HU05
Prioridad Alta
Como miembro del equipo de desarrollo preciso de una herramienta que sea el
repositorio de las librerías y artefactos que el equipo produzca y requiera.
Criterios de aceptación:
La herramienta debe estar instalada en un servidor on premise y estar lista
para su funcionamiento.
La herramienta debe poder integrarse con la herramienta CI/CD.
La herramienta debe soportar las tecnologías usadas para frontend y backend.
El uso de la herramienta debe explicarse mediante una capacitación.
La herramienta debe ser de código abierto.
ID HU06
66
Prioridad Alta
Como miembro del equipo de desarrollo preciso de un ambiente para desarrollar las
pruebas de integración entre equipos backend y frontend
Criterios de aceptación:
El entorno se debe implementar sobre los servidores on premise que el MPFN
brinda
El entorno debe tener las mismas características técnicas y funcionales como
el entorno de calidad
El entorno debe integrarse a la herramienta CI/CD instalada
ID HU07
Prioridad Alta
ID HU08
Prioridad Alta
Como miembro del equipo de desarrollo preciso de una herramienta para acceder a
los logs de las aplicaciones desplegadas.
Criterios de aceptación:
La herramienta debe estar instalada en un servidor on premise y estar lista
para su funcionamiento
La herramienta debe almacenar los logs de las diferentes componentes
almacenadas en Gitlab.
La herramienta debe mostrar los logs para los entornos de desarrollo, calidad
y preproducción
El uso de la herramienta debe explicarse mediante una capacitación.
La herramienta debe ser de código abierto.
67
ID HU09
Prioridad Alta
Como miembro del equipo de desarrollo preciso de una herramienta para automatizar
la ejecución de los scripts DDL y DML.
Criterios de aceptación:
La herramienta debe estar instalada en un servidor on premise y estar lista
para su funcionamiento
La herramienta debe integrarse a la herramienta CI/CD instalada
La herramienta debe contar con un registro de migraciones.
La herramienta debe soportar la base de datos PostgreSQL.
La herramienta debe ejecutar las migraciones en los entornos de desarrollo,
calidad y preproducción.
El uso de la herramienta debe explicarse mediante una capacitación.
La herramienta debe ser de código abierto.
ID HU10
Prioridad Alta
ID HU11
68
Tipo Funcionalidad Técnica
Prioridad Alta
69
ANEXO 2: Archivo pipeline para componente backend Carpeta Fiscal
Electrónica
cache:
paths:
- $CI_PROJECT_DIR/.m2/
variables:
MAVEN_CLI_OPTS: "-s .m2/[Link] --batch-mode"
stages:
- migrationDev
- migrationqa
- migrationPreprod
- sonarqube
- buildDev
- build
- buildPreprod
migrationDev:
only:
refs:
- development
changes:
- src/main/resources/sql/*
stage: migrationDev
image:
name: flyway/flyway:7.7-alpine
entrypoint: [""]
before_script:
- cp -R src/main/resources/sql/* ${HOME}/sql
- echo "[Link]=jdbc:postgresql://${POSTGRES_URL}:5432/${POSTGRES_DB}" >>
${HOME}/[Link]
- echo "[Link]=${POSTGRES_USER}" >> ${HOME}/[Link]
- echo "[Link]=${POSTGRES_PASSWORD}" >> ${HOME}/[Link]
- echo "[Link]=${POSTGRES_SCHEMA}" >> ${HOME}/[Link]
- echo "[Link]=filesystem:${HOME}/sql/" >> ${HOME}/[Link]
- echo "[Link]=__" >> ${HOME}/[Link]
- echo "[Link]=true" >> ${HOME}/[Link]
script:
- flyway repair
- flyway migrate
variables:
POSTGRES_DB: "carpeta_fiscal"
POSTGRES_SCHEMA: "public"
POSTGRES_USER: $postgres_user
POSTGRES_PASSWORD: $postgres_pass
POSTGRES_URL: "[Link]"
migrationqa:
only:
refs:
- qa
changes:
- src/main/resources/sql/*
stage: migrationqa
image:
name: flyway/flyway:7.7-alpine
entrypoint: [""]
before_script:
- cp -R src/main/resources/sql/* ${HOME}/sql
- echo "[Link]=jdbc:postgresql://${POSTGRES_URL}:5432/${POSTGRES_DB}" >>
${HOME}/[Link]
- echo "[Link]=${POSTGRES_USER}" >> ${HOME}/[Link]
- echo "[Link]=${POSTGRES_PASSWORD}" >> ${HOME}/[Link]
- echo "[Link]=${POSTGRES_SCHEMA}" >> ${HOME}/[Link]
- echo "[Link]=filesystem:${HOME}/sql/" >> ${HOME}/[Link]
- echo "[Link]=__" >> ${HOME}/[Link]
- echo "[Link]=.sql" >> ${HOME}/[Link]
- echo "[Link]=true" >> ${HOME}/[Link]
script:
- flyway repair
- flyway migrate
variables:
POSTGRES_DB: "carpeta_fiscal"
POSTGRES_SCHEMA: "public"
70
POSTGRES_USER: $postgres_user
POSTGRES_PASSWORD: $postgres_pass_qa
POSTGRES_URL: "[Link]"
migrationPreprod:
only:
refs:
- preproduccion
changes:
- src/main/resources/sql/*
stage: migrationPreprod
image:
name: flyway/flyway:7.7-alpine
entrypoint: [""]
before_script:
- cp -R src/main/resources/sql/* ${HOME}/sql
- echo "[Link]=jdbc:postgresql://${POSTGRES_URL}:5432/${POSTGRES_DB}" >>
${HOME}/[Link]
- echo "[Link]=${POSTGRES_USER}" >> ${HOME}/[Link]
- echo "[Link]=${POSTGRES_PASSWORD}" >> ${HOME}/[Link]
- echo "[Link]=${POSTGRES_SCHEMA}" >> ${HOME}/[Link]
- echo "[Link]=filesystem:${HOME}/sql/" >> ${HOME}/[Link]
- echo "[Link]=__" >> ${HOME}/[Link]
- echo "[Link]=.sql" >> ${HOME}/[Link]
- echo "[Link]=true" >> ${HOME}/[Link]
script:
- flyway repair
- flyway migrate
variables:
POSTGRES_DB: "prod_carpeta_fiscal"
POSTGRES_SCHEMA: "public"
POSTGRES_USER: $postgres_user
POSTGRES_PASSWORD: $postgres_pass
POSTGRES_URL: "[Link]"
sonarqube:
only:
- development
stage: sonarqube
image: maven:3.6.3-openjdk-8-slim
script:
- mvn $MAVEN_CLI_OPTS install
- mvn $MAVEN_CLI_OPTS sonar:sonar -[Link]=prueba -
[Link]=[Link] -
[Link]=643f37c280e95075267912c6ee22c4efabdded99 -[Link]=true
buildDev:
only:
- development
stage: buildDev
image: maven:3.6.3-openjdk-8-slim
script:
- mvn $MAVEN_CLI_OPTS install -Pdevelopment wildfly:deploy -
[Link]=[Link] -Dserver=wildfly-server -Dserver-group=mpfn-dev-group-2
build:
only:
- qa
stage: build
image: maven:3.6.3-openjdk-8-slim
script:
- mvn $MAVEN_CLI_OPTS install -Pcalidad wildfly:deploy -[Link]=[Link] -
Dserver=wildfly-server -Dserver-group=mpfn-calidad-group-2
- mvn $MAVEN_CLI_OPTS deploy
buildPreprod:
only:
- preproduccion
stage: build
image: maven:3.6.3-openjdk-8-slim
script:
- mvn $MAVEN_CLI_OPTS install -Ppreprod wildfly:deploy -[Link]=[Link] -
Dserver=wildfly-server -Dserver-group=mpfn-preprod-second
- mvn $MAVEN_CLI_OPTS deploy
71