Configure el registro cerrado para proyectos Spring Boot con Github y Jenkins

En este tutorial, implementaremos un registro cerrado para Spring Boot Projects usando GitHub y Jenkins para garantizar que pasen los controles para cada solicitud de confirmación/extracción de GitHub.

Introducción

Uno de los mayores desafíos que enfrentan los desarrolladores es ser ágiles o, en otras palabras, poder entregar versiones estables de los productos a tiempo. Con cada Sprint, debemos ofrecer nuevas funciones, funciones sin errores.

¿Y por qué molestarse en construir, probar e implementar manualmente cuando podríamos tener un proceso automatizado? Un proceso que verificaría cada fragmento de código antes de fusionarlo en la rama estable y luego implementarlo. Por ejemplo, implementarlo en una máquina de prueba lista para el equipo de control de calidad.

Existen muchas herramientas para implementar este proceso de CI/CD, pero nos quedaremos con una increíble herramienta de código abierto, Jenkins.

Jenkins es un servidor de automatización. Ayuda a automatizar la creación, prueba e implementación de su aplicación. Jenkins apoya a Git y Maven, que serán nuestras estrellas invitadas en este mini proyecto.

Este artículo lo guiará a través de la configuración del proceso de Jenkins para que se active cada vez que se realice una confirmación. Luego, nos aseguraremos de que nuestro repositorio de GitHub esté configurado correctamente para este escenario. Por último, haré una pequeña prueba para comprobar que todo funciona correctamente.

Requisitos previos

Para que pueda seguir este tutorial, es necesario configurar algunas cosas pequeñas.

  • Un servidor Jenkins. Puede usar DigitalOcean para crear una gota con Jenkins lista para usar. Debe tomar menos de 5 minutos.
  • Un repositorio de GitHub. Tenga en cuenta que puede usar un proveedor de alojamiento de control de fuente siempre que le brinde la posibilidad de agregar Webhooks.
  • Una aplicación Spring Boot con pruebas. Si aún no tiene uno, puede clonar el repositorio este.

Configuración de Jenkins {#configuración de Jenkins}

Entonces, después de crear el droplet de Jenkins, hay algunos pasos que debe seguir para que la máquina esté en funcionamiento.

Conectémonos a nuestra gota recién creada y preparemos nuestro entorno. Comenzaremos ejecutando algunos comandos en la terminal:

1
$ ssh [correo electrónico protegido]_VM_IP

Se le pedirá que cree su contraseña de Jenkins. Use una contraseña segura y reinicie su servicio Jenkins:

1
$ systemctl restart jenkins

Ahora se puede acceder a su servidor Jenkins en la siguiente dirección http://YOUR_VM_IP:8080 y debería ver algo como esto. Después de eso, será redirigido a la página de inicio de sesión:

jenkins loading screen

Y listo, ¡estamos listos!

jenkins login page

El nombre de usuario predeterminado es admin, y la contraseña es la que creó al principio.

Antes de crear nuestro primer proyecto, vayamos a Administrar Jenkins ~> Administrar complementos e instalar GitHub Pull Request Builder.

Ahora vaya a Administrar Jenkins ~> Configurar sistema configure el servidor GitHub. Vayamos y hagamos clic en Nuevo elemento en la esquina superior izquierda de la pantalla:

click on new item jenkins

Ahora, continúa, escribe un nombre para tu nuevo proyecto y selecciona Proyecto de estilo libre:

create a new freestyle project jenkins

Necesitamos especificar algunos parámetros para el proyecto, por lo que Jenkins sabrá qué confirmación debe usar para la parte de compilación y prueba.

Lo primero que debemos hacer es especificar la URL del proyecto, en la pestaña General, y GitHub project.

En la pestaña Administración de código fuente, seleccione Git. Después de ingresar la URL de su Repositorio y sus credenciales, en Branched to build, use ${ghprbActualCommit}.

Haga clic en el botón Avanzado... y agregue los siguientes detalles:

  • Nombre: origen
  • Refspec: +refs/pull/${ghprbPullId}/*:refs/remotes/origin/pr/${ghprbPullId}/*

Nota: Este valor es obligatorio para generar solo las solicitudes de incorporación de cambios.

source code management jenkins

Una vez que hayamos configurado nuestro repositorio, debemos especificar cuándo se activará este trabajo. Para eso, vaya a la pestaña Desencadenadores de compilación y seleccione Generador de solicitudes de extracción de GitHub.

En primer lugar, seleccione las credenciales configuradas anteriormente y marque Usar GitHub Hooks para activar la compilación. Ahora, agregue un activador Actualizar estado de compromiso durante la compilación y configúrelo como en la imagen:

commit status update during jenkins build

Agregue un disparador de Mensajes de estado de compilación para SUCCESS, ERROR y FAILURE.

Para la fase de Creación, agregaremos Invocar objetivos Maven de nivel superior con la siguiente configuración:

  • Versión Maven: su versión Maven deseada, se puede configurar desde Configuración del sistema
  • Objetivos - instalación limpia -U
  • POM - pom.xml

Haz clic en Guardar y ¡listo!

Configuración del repositorio de GitHub

Hasta ahora hemos logrado configurar el flujo de trabajo de Jenkins, pero ¿qué pasa con GitHub? Eso es lo que vamos a hacer ahora.

Vaya a Configuración en la página de su repositorio y seleccione la opción Webhooks del menú de la izquierda. Agregue un nuevo webhook con los siguientes detalles:

Para la URL de carga útil, escriba http://YOUR_VM_IP:8080/ghprbhook/ y seleccionaremos Pull Requests como la opción de activación. El tipo de contenido debe ser application/json. Deje el campo Secreto vacío y Guardar.

Probando el flujo de trabajo

El momento que hemos estado esperando. Cree una nueva rama, envíela a GitHub y luego cree una solicitud de extracción. Tan pronto como creamos la solicitud de extracción, se activará un trabajo en Jenkins:

github pull request jenkins

Pronto, aparecerá un enlace Detalles en la página de la solicitud de extracción. Si haces clic en el enlace, verás una página como esta:

jenkins job triggered

Ahora si vamos a la Salida de Consola podemos ver que todas las pruebas han pasado:

1
2
3
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
...
Finished: SUCCESS

success build jenkins

Por el bien de este tutorial, haré otra confirmación con una prueba fallida para ver si funciona correctamente. Y el resultado:

1
2
3
[ERROR] Tests run: 3, Failures: 1, Errors: 0, Skipped: 0
...
Finished: FAILURE

failing build jenkins

Aquí, hemos implementado con éxito un registro cerrado para proyectos de Spring Boot, utilizando GitHub y Jenkins.

Conclusión

Se espera que los ingenieros de software proporcionen soluciones libres de errores a sus clientes. Con una lógica compleja, se vuelve primordial probar el software y garantizar controles y casos de prueba para asegurarse de que el proyecto sea estable.

En este artículo, implementamos un control cerrado para proyectos de Spring Boot, usando GitHub y Jenkins, para garantizar que pasen los controles en el código que enviamos.