Los procesos de desarrollo software están en constante evolución y la integración continua se ha convertido en un elemento clave a la hora de mejorar y optimizar el ciclo de desarrollo. En esta entrada voy a explicarte los pasos para montar un entorno básico de ALM (Application Lifecycle Management)
Pero antes de empezar ¿Sabes en qué consiste la integración continua?
Aunque pueda sorprenderte, el concepto de integración continua no es nada reciente, fue definido por Martin Fowler en 2006 de la siguiente manera:
“Práctica de desarrollo software donde los miembros del equipo integran su trabajo frecuentemente, al menos una vez al día. Cada integración se verifica con un build automático (que incluye la ejecución de pruebas) para detectar errores de integración tan pronto como sea posible.”
Por tanto la integración continua es una serie de buenas prácticas con el fin de realizar comprobaciones automáticas y periódicas de código con el objetivo de detectar errores lo antes posible y analizar la calidad del software. Para conseguir esto, contamos con herramientas muy potentes que nos facilitarán la realización de estas tareas.
Los procesos de integración continua pueden ir desde la construcción periódica y programada del software, hasta tareas más complejas como el despliegue continuo en los entornos de producción del software generado.
Herramientas del entorno de integración continua que vamos a utilizar
El entorno estará compuesto por::
- Maven: Para la gestión y construcción de proyectos JAVA
- Git: Sistema de control de versiones donde estará alojada la aplicación
- Jenkins: Servidor de integración continua
- SonarQube: Herramienta para el análisis de código
- MySQL: Base de Datos que utilizará sonar para realizar sus operaciones y almacenar sus resultados
- Nexus OSS: Repositorio de artefactos
- La aplicación java de prueba será un Hola Mundo que puedes descargar en el este link pero antes necesitarás tener una cuenta creada en Bitbucket
El flujo de integración continua que se pretende crear con este ejemplo es el siguiente:
El objetivo que perseguimos es que cada vez que un programador haga un push en el repositorio git remoto y suba código a la rama master, Jenkins lo detecte, compile la aplicación, llame a Sonar para ejecutar los test y realizar el análisis de la calidad del código y, si todo ha ido bien, publique un WAR del proyecto en Nexus.
¿Qué necesitas para empezar a montar el entorno?
Antes de empezar, asegúrate de tener instalado en tu equipo las siguientes herramientas:
- JDK7 o superior.
- Un cliente GIT: Si vas a utilizar Eclipse como IDE, te recomiendo usar el plugin egit. En este link puedes encontrar información de cómo descargarlo e instalarlo .
- Maven 3.x: Puedes descargar una distribución en este link. Te dejo algunos enlaces que te pueden resultar de ayuda a la hora de instalar Maven:
- Tomcat 8 (puedes utilizar otro si prefieres), como servidor para desplegar y probar la aplicación java
- Una cuenta en Bitbucket para acceder al repositorio git donde se encuentra la aplicación de ejemplo
¿Cómo obtengo una aplicación de ejemplo?
Decirte que puedes utilizar cualquier aplicación que ya tengas o bien usar una de ejemplo que he subido a mi cuenta de Bickbucket. Para obtener la aplicación y poder modificarla, es necesario transferirla a un repositorio tuyo. Para ello, cuando accedas a este link, será tan sencillo como hacer un Fork
Una vez hayas hecho el fork, se te habrá creado un nuevo proyecto en tu cuenta de Bitbucket con el nombre que le hayas dado (en mi ejemplo MyWebCI). Accede al proyecto y recupera la URI de acceso y copiala en el portapapeles. En mi caso: https://rcrespop@bitbucket.org/rcrespop/mywebci.git
Si utilizas Eclipse, situate en la perspectiva Git. Te aparecerá una ventana con los repositorios git que ya tuvieras. Si pulsas botón derecho del ratón sobre la vista verás la opción Paste Repository Path or URI. Haz click sobre ella y te aparecerá la siguiente ventana para dar de alta el nuevo repositorio:
Completa los pasos que te indica eclipse hasta el final. Cuando termines observa que el nuevo repositorio aparece en la vista que general de Git repositories
Por último solo quedaría importar el proyecto en nuestro workspace de trabajo. Situate en la vista Project Explorer y selecciona Import –> Existing Maven Projects y en root directory indica la ruta del repositorio git local del proyecto
Una vez compruebes que el proyecto importado te aparece en tu workspace, lo último que haremos será conectarlo con el repositorio git correspondiente. Situate sobre el proyecto en la vista Project Explorer, botón derecho del ratón Team –> Share Project y selecciona el repositorio git que corresponda
Recuerda actualiza el fichero pom.xml del proyecto para modificar la información de configuración y acceso al repositorio git que acabas de crear. En mi caso:
<scm> <connection>scm:git:https://rcrespop@bitbucket.org/rcrespop/mywebci.git</connection> <developerConnection>scm:git:https://${username}:${password}@bitbucket.org/rcrespop/mywebci.git</developerConnection> <url>scm:git:https://rcrespop@bitbucket.org/rcrespop/mywebci.git</url> <tag>HEAD</tag> </scm>
Por último te recomiendo hacer un mvn clean install (para compilar todos los módulos e instalarlos en el repositorio local de maven), desplegar la aplicación de ejemplo en un servidor web como Tomcat y comprobar que funciona correctamente.
¿Preparado para empezar a montar el entorno de integración continua? pues empecemos!!
11 Responses
Buen día, el punto numero 4 – Configuración y ejecución de jobs en Jenkins, no abre. Por favor puede verificar?? hace días pude verlo después de mucho esperar, pero ya no logro ver, se queda como cargando.
Gracias de ante mano
solucionado!
buenas tardes.
Veo muy interesante tus artículos pero no he podido ver la 2 parte ya que no me carga la pagina, solo se queda dando vueltas.
Estimado Roberto, llegue a esta pagina porque estoy interesado en entrar al mundo de DEVOPS, yo desarrolle por muchos años con tecnologias JEE y framewoks como struts, pero ultimamente he estado dedicado mas a la parte de gestion, y quiero ponerme al dia.
Estoy siguiendo tu tutorial para configurar un entorno de integracion continua,ya complete el capitulo 1 y tengo todo configurado, pero NO ME CARGAN LOS OTROS ENLACES DE LOS CAPITULOS 2 Y 3, no se si son muy pesados y mi internet esta lento o si hay algun problema. Por favor tu ayuda.
Por cierto el tutorial esta increible, esa es la mejor forma de enseñar, ahciendo.
De antemano gracias.
Hola! Al descargar del git en Eclipse tu proyecto, me pide contraseña y no me deja avanzar. ¿Puedes compartirla? gracias
Los artículos están muy bien,
Se podrían montar todas las herramientas en un solo servidor?
Maven
Git
Jenkins
SonarQube
MySQL
Nexus OSS
Me gustaría añadir las herramientas a tu escenario.
Jira
Gitlab/github
Slack
Como lo ves?
Muy bien, voy a seguir todos los ejemplos. Quiero llegar al resultado final para terminar de entender todos estos principios, muy interesante. Excelente trabajo.
el tomcat me funciona para otros lenguajes o solo para java
Hola Aurelio! Tomcat es un contenedor web basado en el lenguaje Java que actúa como motor de servlets y JSPs y puesto que fue escrito en Java, funciona en cualquier sistema operativo que disponga de la máquina virtual Java.
Saludos
Buenas, me gustaría saber sobre que sistema operativo lo has implementado, los requisitos para implementar
el entorno de integración continua y cual seria la distribución más senzilla para aplicarlo (Centos, Ubuntu, Windows …)
Otro apunte seria si solo has usado tomcat o también apache, debido a que en mi caso necesitaría ambos.
Espero tu respuesta
Hola Silvia. Las pruebas las hice sobre OSx pero puedes utilizar perfectamente otras opciones, en función del SO con el que más cómoda que sientas. En mi caso, si hablamos por distribuciones linux, me inclino más por Ubuntu. En cuanto al servidor web, yo he usado Tomcat porque estoy desplegando un aplicación java para el ejemplo
Saludos