BLOG

Aprende a montar un entorno de integración continua
DevOps-Tecnología

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:

Ciclo de Integracion Continua

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

Fork

forkWeb

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:

new git repository

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

select git repository

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

share project

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.

ejecución web

¿Preparado para empezar a montar el entorno de integración continua? pues empecemos!!

  1. Instalación y Configuración de SonarQube y MySQL 
  2. Instalación de Nexus OSS
  3. Instalación  y configuración de Jenkins
  4. Configuración y ejecución de jobs en Jenkins
Comparte este artículo si te gustó:

11 Responses

  1. 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

  2. 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.

  3. 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.

  4. Hola! Al descargar del git en Eclipse tu proyecto, me pide contraseña y no me deja avanzar. ¿Puedes compartirla? gracias

  5. 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?

  6. Muy bien, voy a seguir todos los ejemplos. Quiero llegar al resultado final para terminar de entender todos estos principios, muy interesante. Excelente trabajo.

    • 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

  7. 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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.