Guía de uso de Initializr
Un Initializr es un API que permite crear un proyecto con sus dependencias de manera rápida y sencilla. En el caso de Onesait, contamos con un Initializr que tiene como principal función proporcionar un arquetipo de inicialización al usuario con el propósito de acelerar la creación de un Microservicio con estructura y estándares Onesait, y que incluye Maven y Spring.
La herramienta permite crear un nuevo proyecto en blanco, o bien añadir una serie de módulos y librerías de manera automatizada gracias a la selección de los mismos desde los cuadros seleccionables. Las nuevas utilidades serán añadidas al proyecto mediante la inclusión automática de dependencias en el pom.xml de la nueva aplicación y la inclusión de las clases de configuración de cada funcionalidad en el caso de que fuesen necesarias.
Si queréis probar la herramienta y tenéis permisos de acceso, podéis descargaros el CLI de Initializr desde nuestro GitLab.
Tecnologías
Para el desarrollo del proyecto, se hace uso de las siguientes tecnologías:
- Maven: Para la resolución de dependencias.
- Java: Para la implementación del módulo de aplicación.
- Lombok: Para la simplificación del uso de métodos de clase.
- Jenkins: Ficheros de configuración para la conexión al pipeline de arquitectura. Para más información consultar el apartado de instrucciones de configuración de Jenkins.
- Swagger Codegen: utilizado para la generación de código.
Módulos y librerías disponibles
A continuación mostramos un listado con todos los módulos y librerías que pueden importarse al nuevo proyecto. Las versiones de las librerías vienen aportadas por el «architecture-dependencies», el cual aporta las versiones más actuales de las dependencias más utilizadas.
Librerías incluidas generadas por el Initializr
Librería | Descripción | Versión incluida |
---|---|---|
architecture- dependencies | Librería que añade las versiones de las librerías más utilizadas de Spring y de arquitectura. | 0.0.1-SNAPSHOT |
audit-lib | Librería que permite auditar las operaciones de nuestro servicio para almacenar dichos registros y que, posteriormente, puedan ser explotados. | 0.0.4-SNAPSHOT |
architecture- extrautilities- currency | Librería para facilitar el cambio de valor entre diferentes divisas. | 0.0.3-SNAPSHOT |
architecture- extrautilities-time | Librería para facilitar el uso y conversión entre diferentes franjas horarias. | 0.0.3-SNAPSHOT |
architecture-utils | Dependencia que engloba una serie de funcionalidades que podrán ser útiles a lo largo del desarrollo de microservicios. | 1.0.5-SNAPSHOT |
drools-platform | Servicio para hacer uso de reglas de negocio alojadas en OP. | 1.0.2.RELEASE |
hazelcast-platform | Servicio para agilizar el uso de HazelCast y abstraernos de la configuración, todo ellos sobre la OP. | 1.0.5.RELEASE |
logback-fluentd | Dependencias y configuración para enviar logs a Fluentd. | – |
onesaitplatform- iotclient4springboot | Librería Java preparada para funcionar sobre Spring Boot y que simplifica el acceso al DigitalBroker de la Onesait Platform. | 2.0.2-RELEASE |
onesaitplatform-web- security-client | Dependencia de seguridad delegada en la OP. | 1.5.0-RELEASE |
spring-boot-admin-starter-client | Dependencia para la monitorización mediante Spring Boot Admin. | 2.3.0 |
spring-cloud-starter- config | Dependencia y configuración para un cliente que recoge su configuración de un servidor de Spring Cloud Config. | 2.2.5.RELEASE |
spring-cloud-starter- kubernetes-config | Dependencia y configuración para un cliente que recoge su configuración de ficheros de configuración de Kubernetes. | 1.1.6.RELEASE |
spring-data-jpa | Dependencia de notificaciones a la Plataforma usando Spring Data JPA. | – |
spring-data-mongo | Dependencia de notificaciones a la Plataforma usando Spring Data Mongo. | – |
user-administrator | Librería para facilitar el uso y abstracción de la gestión de usuarios de la OP. | 1.2.4.RELEASE |
Módulos incluidos generados por el Initializr
Módulo | Descripción | Versión incluida |
---|---|---|
api-validator- pipeline | Pipeline de jenkins para realizar test periódicos a una API. | – |
app- monitoring | Monitorización de microservicios mediante Spring Boot Admin. | 0.0.1-SNAPSHOT |
login-backend | Módulo de inicio de sesión por oauth2 contra la OP, incluye la libreria user-administrator. | 1.0.0-RELEASE |
springbatch- example | Ejemplo de uso y configuración de Spring Batch. | – |
spring-cloud-config | Módulo con función de servidor encargado de recoger coniguraciones de una fuente de datos y servirlas a proyectos clientes. | 0.0.1-SNAPSHOT |
user- administrator | Módulo para facilitar el uso y abstracción de la gestión de usuarios de la OP. | 1.2.4.RELEASE |
Estructura del proyecto generado
Seguidamente, vamos a detallar la estructura generada por una ejecución de un ciclo de operaciones como el «init». Si observamos la ejecución, vemos que bajo la ruta especificada se ha generado el proyecto con el nombre de «onesait-<artifactId>». Bajo este directorio, se generará la siguiente estructura:
- Directorio «/sources»:
- pom.xml: dependencias Spring Boot, Spring Security, repositorios de la Onesait Platform, plugin package de Maven, librería de utilidades de Onesait, etc.
- podTemplate.yaml
- settings.xml
- JenkinsFile
- /docker: Dockerfile básico para la aplicación.
- /src/main/java/com/minsait/onesait/<artifactId>:
- /configuration: añade las clases de configuración de OpenApi y Spring Security.
- /controllers: contiene un controlador REST de ejemplo. En caso de que se especifique el fichero YAML de descripción de las APIs, se crearán las clases correspondientes.
- /model: contiene unos modelos de ejemplo. En caso de que se especifique el fichero YAML, se crearán las clases correspondientes.
- /service: contiene los servicios y sus implementaciones de ejemplo.
- Application.java
Configuración
Fichero YAML
Adicionalmente a la hora de crear un microservicio haciendo uso del Initializr, se puede adjuntar un fichero YAML de descripción de las APIs del proyecto. Con esto, el Initializr, aparte de generarnos el microservicio base con las dependencias que le hayamos configurado, generará los controladores y modelos para dicha documentación.
Instrucciones de configuración de Jenkins
Los proyectos generados contienen una configuración por defecto para utilizar el pipeline de Jenkins vinculado a un repositorio de Git. Para ello, se proporciona un fichero JenkinsFile y un PodTemplate.yaml, que deben ser modificados para que apunten al repositorio en cuestión. También se incluye un fichero settings.xml que proporciona los accesos al Nexus de arquitectura por defecto.
Además de la modificación de dichos ficheros, se deberá de pedir la creación del pipeline al equipo de DevOps, que cuelgue de la seed correspondiente.
Imagen de cabecera: modificado de Luke Thornton en Unsplash