¿Cómo crear un microservicio en Plataforma?
Demo
Introducción
La plataforma proporciona la integración con los sistemas al cargo del ciclo CI/CD.
A tal fin, la plataforma proporciona una herramienta para crear y administrar el ciclo de vida de aplicaciones web y microservicios desde la consola web del panel de control, siguiendo los estándares del ciclo CI/CD: creación, compilación, ejecución de pruebas, generación de imágenes Docker y despliegue en CaaS
Las funcionalidades que proporciona este ciclo de vida desde la plataforma son:
Creación de microservicios.
Descarga de código y desarrollo.
Compilación del código y generación de imágenes Docker desde Jenkins.
Despliegue de las imágenes Docker en la plataforma CaaS.
Actualización de un Microservicio.
Creación del microservicios
Al crear un microservicio en la plataforma, un desarrollador registra un nuevo artefacto desplegable. Automáticamente la plataforma genera toda la infraestructura para soportar el ciclo de vida completo :
Proyecto en repositorio GIT basado en Maven y Spring Boot, con un esqueleto predefinido según el propósito del artefacto, e incluyendo las APIs de la plataforma para facilitar a los desarrolladores la interacción con los diferentes módulos de la plataforma.
Pipeline Jenkins encargado de descargar el código desde una rama estable del repositorio GIT, y lanzar las tareas de compilación, ejecución de pruebas unitarias y de integración, aseguramiento de la calidad, generación de imágenes Docker y publicación de imágenes en el registro Docker.
Despliegue y ejecución en plataforma CaaS del microservicio encargado de descargar la imagen desde un registro Docker y desplegarla en contenedor en un entorno donde se exponga como servicio y pueda consumir servicios de la plataforma y otros microservicios.
Creación de un proyecto nuevo en Gitlab
Si estamos creando el proyecto desde 0, podemos elegir una plantilla y se nos generará un proyecto en Gitlab con un código base sobre el que empezar a trabajar. Cada plantilla proporcionará un arquetipo distinto con un esqueleto de código para iniciar el desarrollo, que podrá añadir o no dependencias del proyecto, incluyendo las que son APIs de plataforma como el broker. Por ejemplo, el arquetipo IoT Client, viene configurado para comunicarse con el broker de la plataforma, y realizar operaciones de consulta sobre una ontología.
Además de las plantillas cargadas por defecto, podemos crear plantillas propias siguiendo la siguiente guía Plantillas en Microservicios de Plataforma.
Para que podamos crear el proyecto en Gitlab, será necesario generar un clave privada personal para que se cree dentro de un usuario específico. Además, si queremos crearlo dentro de un grupo específico habrá que indicarlo en Gitlab Group Name y usar un token de un usuario con permisos para crear proyectos en ese grupo.
Creación desde un proyecto Git existente
En caso de que ya exista el código en un repositorio Git, y tan solo queremos gestionar todo el ciclo de vida desde la plataforma, podremos indicar que no queremos crear el repositorio Git (desmarcando el checkbox de 'CREATE GIT REPOSITORY'), y configurar el repositorio Git existente, indicando el directorio donde se encuentra los recursos del proyecto y el Dockerfile, además del repositorio. Tendremos que tener un token válido que tenga permisos para acceder al proyecto específico.
Contexto y puerto
Es importante especificar el context path definido en nuestra aplicación, así como el puerto, para poder generar posteriormente las rutas correctas en el gateway de microservicios. Si en el fichero de propiedades de nuestro proyecto no tenemos definido el server.servlet.contextPath, tendremos que marcar el checkbox “Strip context path”.
Configuraciones de Jenkins y containers CaaS
Para poder crear el microservicio, es necesario configurar las credenciales de Jenkins y del container CaaS (Rancher, Openshift, Rancher 2 o Kubernetes).
Para la configuración del Jenkins habrá que indicar la url, el usuario y el token de usuario. Si queremos que el microservicio se enlace a un pipeline ya existente en Jenkins, habrá que indicar el nombre en Existing pipeline name, de esta forma no se creará un pipeline propio del microservicio y se podrá usar el que se tenga configurado, sea uno propio o genérico para el proyecto.
Para la configuración del CaaS, habrá que seleccionar el que necesitemos e indicar su URL, usuario y token de acceso.
Una vez configurado todo, podemos crear el microservicio pulsando el botón Create de arriba a la derecha. Si hemos seleccionado la opción de crear repositorio en Git puede que tarde unos segundos.
Ya podremos ver y gestionar nuestro microservicio desde el listado anterior:
Si hemos creado un proyecto Git de cero, podremos acceder a la URL y, usando las herramientas del IDE de los desarrolladores, clonarnos el repositorio para empezar a trabajar en el proyecto, descargando el código generado por la plataforma.
Una vez descargado, se puede importar el proyecto en Eclipse para comenzar el desarrollo, aquí podrás ver que el esqueleto proporciona un conjunto de paquetes y fragmentos de código para facilitar el trabajo. Antes de compilar el código y generar las imágenes, habrá que subir los cambios al Git.
El token del usuario tanto de GitLab como de Jenkins tiene que tener los permisos necesarios para poder crear proyectos git y pipelines de integración continua.
Compilación y generación de imágenes docker
En cualquier momento, a través del pipeline autogenerado en Jenkins, podemos compilar cualquier rama Git del repositorio y generar imágenes de Docker nuevas. Este pipeline también se encarga de ejecutar las pruebas unitarias y de integración y de las reglas de aseguramiento de la calidad.
Tan solo tenemos que pulsar en el martillo 'Build service' y rellenar los campos necesarios, seleccionando la rama de origen en el repositorio Git que queramos compilar.
Una vez introducidos, le damos a 'Generate' y tendremos que esperar a que desaparezca el spinner, lo que indicará que ha finalizado. Ahora sería el momento de desplegarlo.
Despliegue en CaaS
Una vez generadas las imágenes, podemos proceder a desplegar el microservicio, para ello pulsamos sobre el cohete 'Deploy':
Se abrirá una ventana emergente, donde tendremos que seleccionar de un desplegable el entorno en la plataforma CaaS, el host donde el CaaS creará el contenedor y el DNS donde se expondrán los servicios. Además, una vez seleccionado el entorno y el host, aparecerán los stacks disponibles, para agrupar, por ejemplo, varios microservicios dentro de un stack.
La imagen Docker vendrá informada con el nombre de la imagen generada al hacer el Build. Si se ha seleccionado un pipeline ya existente es probable que tenga que ir a Jenkins y coger el nombre de la imagen en la salida de consola del propio build.
Una vez damos a Deploy, tras unos segundos aparecerá un mensaje indicando que ya se ha creado el servicio, y podrás acceder a Rancher u Openshift a ver el deployment. Además, se disponibilizará automáticamente desde el exterior y si se trata de una aplicación web con componentes visuales, podremos navegar al microservicio copiando la URL en el icono del enlace:
En caso de ser un servicio puramente REST, podremos copiar la URL generada y realizar llamadas desde cualquier cliente REST, o si tiene integrado la vista de swagger, podremos acceder a ella añadiendo /swagger-ui/index.html a la URL generada.
Actualización del servicio desplegado
Si queremos actualizar la versión del microservicio desplegado, o sobrescribir alguna variable de entorno, tan solo tenemos que pulsar sobre la tecla de la flecha 'Upgrade'.
Se nos abrirá una ventana parecida a la del despliegue pero en ésta podremos indicar variables de entorno, editarlas y añadir nuevas:
Una vez terminemos de ajustar las variables de entorno y la imagen a desplegar, pulsamos en 'Upgrade' y se lanzará el proceso que llevará unos segundos.