Este documento introduce los conceptos de integración continua y describe cómo configurar un entorno de integración continua utilizando las herramientas Jenkins, Sonar y Maven. Explica qué es cada herramienta, cómo instalarlas y configurarlas, y demuestra su uso conjunto mediante un ejemplo de integración continua para un proyecto de gestión de alumnos alojado en GitHub.
2. 21.10.15 Your name here (insert->page number) 2
INDICE
INTEGRACION CONTINUA:
Qué es
Problemas típicos en un proyecto
Ejemplo de un entorno de IC (Maven, Sonar, Jenkins)
MAVEN
Qué es Maven (repositorios, plugins, dependencias...)
Instalación y ejemplos
SONAR
Qué es Sonar
Instalación y ejemplos
JENKINS
Qué es Jenkins.
Instalación y ejemplos
3. 21.10.15 Your name here (insert->page number) 3
INTEGRACION CONTINUA
TE SUENAN ESTAS SITUACIONES ??
En mi máquina funcionaba ...
Pero si no he tocado esa función …
Ese error ya lo corregí ...
Funciona, pero no he hecho pruebas
Se me olvidó subir los cambios ...
La versión que se ha desplegado, no es la última
En Internet Explorer no funciona …
Será la caché del navegador ...
4. 21.10.15 Your name here (insert->page number) 4
INTEGRACION CONTINUA
Y ESTOS ERRORES … ?
NoClassDefFoundError
Problemas con el classpath
StackOverflowError
Algo no va bien en la pila
NullPointerException
Uff .. cualquier cosa ...
ArrayIndexOutOfBoundsException
¿Cuantas posiciones tiene ese array?
OutOfMemoryError
¿Sin memoria?, no es posible
Java.net.SocketException
¿Por qué se cerró la conexión?
5. 21.10.15 Your name here (insert->page number) 5
INTEGRACION CONTINUA
¿SOLUCION?
INTEGRACION
CONTINUA
6. 21.10.15 Your name here (insert->page number) 6
INTEGRACION CONTINUA
¿Qué es la Integración Continua?
Martin Fowler:
“La integración continua es una práctica de
desarrollo de software en la cual los
miembros de un equipo integran su trabajo
frecuentemente, como mínimo de forma
diaria.
Cada integración se verifica mediante una
herramienta de construcción automática para
detectar los errores de integración tan
pronto como sea posible. ”
7. 21.10.15 Your name here (insert->page number) 7
INTEGRACION CONTINUA
Problemas en equipos sin Integración Continua
Problemas de compilación
Ej: Juan compila con Jdk 1.5, Alberto con Jdk 1.7
Poca frecuencia de commits
No se suele subir el código al final del día
Se sube el código cuando está “estable”
Escasa documentación
Muy poca gente documenta su código
Pérdida de tiempo con becarios o nuevos miembros
8. 21.10.15 Your name here (insert->page number) 8
INTEGRACION CONTINUA
Problemas en equipos sin Integración Continua
Errores en el paquete de instalación
Se genera el paquete al final del proyecto.
Se pierde mucho tiempo generando el paquete
Aparecen errores no contemplados
Errores en el despliegue en servidor
No se despliega en servidor más que cuando se entrega el
proyecto.
Aparecen errores de espacio, de memoria, no se han
parametrizado bien las cosas
La máquina del usuario final no es como se pensaba
9. 21.10.15 Your name here (insert->page number) 9
INTEGRACION CONTINUA
Entorno de Integracion Continua
Automatización de tareas usando Jenkins, Git, Sonar y Maven
11. 21.10.15 Your name here (insert->page number) 11
MAVEN
MAVEN: QUE ES?
Herramienta opensource para la gestión y construcción de un
proyecto Java.
Capaz de gestionar un proyecto pasando por todas sus etapas
Validacion
Compilacion
Empaquetar
Testing
Instalar
Desplegar
12. 21.10.15 Your name here (insert->page number) 12
MAVEN
MAVEN: Estructura Proyecto Maven
Un proyecto Maven tiene siempre una estructura similar
Necesita un fichero pom.xml
13. 21.10.15 Your name here (insert->page number) 13
MAVEN
MAVEN: POM (Project Object Model)
El pom.xml es el elemento principal de un proyecto Maven
Se encuentra en la raíz del proyecto
Nos pemite gestionar:
Configuración básica del proyecto
Nombre
Versión
Propiedades del proyecto
Dependencias(libs) del proyecto
Forma de buscar la librería en el repositorio de Maven
Automatizar tareas
Construcción, empaquetado, despliegue ...
14. 21.10.15 Your name here (insert->page number) 14
MAVEN
MAVEN: POM (Project Object Model)
15. 21.10.15 Your name here (insert->page number) 15
MAVEN
MAVEN: POM (Project Object Model)
16. 21.10.15 Your name here (insert->page number) 16
MAVEN
MAVEN: CICLO DE VIDA
Un proyecto Maven sigue unas etapas básicas
Compile: genera los .class del proyecto
Test: Ejecuta los test
Package: Genera el .jar
Install: Copia el .jar a un directorio indicado
Deploy: Copia el fichero .jar a un servidor remoto
Se ejecutan con el comando
mvn <accion>
Cada etapa engloba a las anteriores
Ejemplo mvn install
Se lanzarán compile, test, package, install
17. 21.10.15 Your name here (insert->page number) 17
MAVEN
MAVEN: Uso de Plugins
Maven-surefire-plugin
Permite lanzar los test unitarios
Maven-failsafe-plugin
Permite lanzar los test integrados
Jacoco-maven-plugin
Permite analizar la cobertura de código por los test ejecutados
Sonar-maven-plugin
Integra cobertura de jacoco junto a otras métricas de calidad del
código
Podeis consultar la lista de plugins en
https://maven.apache.org/plugins/index.html
18. 21.10.15 Your name here (insert->page number) 18
MAVEN
MAVEN: Repositorios locales y remotos
Maven trabaja con un repositorio remoto en donde están
alojadas las dependencias del proyecto
http://mvnrepository.com/
En el repositorio local se almacenan las descargas del repositorio
remoto. Es una carpeta oculta llamada .m2
Según el SO
$HOME/.m2 Linux→
C:/Documents and Settings/{nombre-usuario}/.m2 Windows→
~/.m2 Mac→
Se puede cambiar en el fichero settings.xml
19. 21.10.15 Your name here (insert->page number) 19
MAVEN
MAVEN: Ventajas de proyectos con Maven
Ahorro de espacio en máquina local
Las librerías están centralizadas en un único punto (.m2)
Ahorro de espacio en servidor de control de versiones
No se almacenan las librerías en el proyecto, solo sus dependencias
en el pom.xml
Proyecto uniforme
Un proyecto Maven mantiene siempre la misma estructura.
Esto ayuda trabajando en equipo
Plugins
Se pueden extender las tareas mediante plugins
20. 21.10.15 Your name here (insert->page number) 20
MAVEN
MAVEN: Ventajas de proyectos con Maven
Herencia en la configuración
Proyectos grandes pueden crearse mediante módulos y heredar una
configuración común
Automatización de tareas
Permite automatizar tareas de empaquetado y despliegue y evitar
errores humanos
21. 21.10.15 Your name here (insert->page number) 21
MAVEN
MAVEN: Inconvenientes de proyectos Maven
Necesidad de red
Sin red no podemos descargar las librerías
Dependencias transitivas
Excesivo número de librerías en el proyecto por depender unas de
otras
Ejemplo:
Al instalar junit4.11, se descarga junto a ella hamcrest-core-1.3.jar
22. 21.10.15 Your name here (insert->page number) 22
MAVEN
MAVEN: Instalación
Descargar Maven
https://maven.apache.org/
Añadir carpeta bin al Path
Windows: c:apache-maven-3.0.5bin
Unix:
MAVEN_HOME="/home/user/Downloads/apache-maven-3.1.1"
export MAVEN_HOME PATH=$PATH:$MAVEN_HOME/bin
Comprobar instalación
mvn -version
24. 21.10.15 Your name here (insert->page number) 24
SONAR
QUÉ ES SONAR
Plataforma de software libre para evaluar código fuente
Código duplicado
Resultado de test
Cobertura de código (Jacoco)
Posibles errores
Se integra con Maven y Jenkins
Compatible con JDK a partir de 1.7
26. 21.10.15 Your name here (insert->page number) 26
SONAR
ARQUITECTURA SONAR
27. 21.10.15 Your name here (insert->page number) 27
SONAR
ARQUITECTURA SONAR
Base de Datos
Configuración de sonar
Calidad de código de los proyectos
Soporte para Mysql, Oracle, Postgress, SqlServer
Analizadores
Realizan las mediciones sobre el código
Hay varios tipos de analizadores (SonarQubeRunner, Maven,
SonarAnt ...)
Servidor Web
Permite al usuario visualizar la calidad de su código
28. 21.10.15 Your name here (insert->page number) 28
SONAR
INSTALACION SONAR
Descarga Servidor Web SONAR QUBE
http://www.sonarqube.org/downloads/
Descomprimir el fichero zip
Arrancar servidor web Sonar QUBE
sh sonar.sh start Unix→
startSonar.bat Windows→
Url por defecto : http://localhost:9000
29. 21.10.15 Your name here (insert->page number) 29
SONAR
INSTALACION SONAR
Configuración BBDD
Creación de BBDD, usuario y permisos
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE
utf8_general_ci;
CREATE USER 'sonar' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY
'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED
BY 'sonar';
FLUSH PRIVILEGES;
30. 21.10.15 Your name here (insert->page number) 30
SONAR
INSTALACION SONAR
Configuración parámetros Sonar
<install_directory>/conf/sonar.properties
sonar.jdbc.username=nombre_usuario
sonar.jdbc.password=password
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar
31. 21.10.15 Your name here (insert->page number) 31
SONAR
ADMINISTRACION DE SONAR
Deuda Técnica
Tiempo a invertir para corregir una carencia en el código
Cuanto más pequeña sea mejor será la calidad del código
SCALE Rating
Transmite de forma rápida la calidad del proyecto asignándole
una categoria
A: Deuda técnica <10%
B: Entre el 10 y el 20%
C: Entre el 21 y el 50%
D: Entre el 51% y el 100%
E: Superior al 100%
32. 21.10.15 Your name here (insert->page number) 32
SONAR
ADMINISTRACION DE SONAR
33. 21.10.15 Your name here (insert->page number) 33
SONAR
GESTION DE WIDGETS y PLUGINS
Podemos personalizar el Dashboard con widgets
34. 21.10.15 Your name here (insert->page number) 34
SONAR
INTEGRACIÓN MAVEN - SONAR
Analizador Maven
Añadimos configuración de sonar en el fichero settings.xml
Añadimos plugin Sonar en el fichero pom.xml
36. 21.10.15 Your name here (insert->page number) 36
JENKINS
QUÉ ES JENKINS
Es un servidor opensource de integración continua escrito en Java
Extensible mediante plugins
Soporta herramientas de control de versiones (Git, Subversion..)
Se integra facilmente con Maven y Sonar
37. 21.10.15 Your name here (insert->page number) 37
JENKINS
INSTALACION JENKINS
Descargar Jenkins
https://jenkins-ci.org/
Hay 2 formas de instalar
Como servicio/demonio
Descarga .war y lanzar en un servidor ajeno (Tomcat)
Url por defecto: http://localhost:8080
38. 21.10.15 Your name here (insert->page number) 38
JENKINS
INSTALACION PLUGINS
Menú Administrar Jenkins/Administrar Plugins
39. 21.10.15 Your name here (insert->page number) 39
DEMO INTEGRACION CONTINUA
GESTION DE ALUMNOS
Servidor Jenkins
http://localhost:8080
Servidor Sonar
Http://localhost:9000
Código fuente en Github
https://github.com/rocimunoz/GestionAlumnos
40. 21.10.15 Your name here (insert->page number) 40
DEMO INTEGRACION CONTINUA
41. Integración Continua
(Jenkins, Sonar,Maven)
rocimunoz@gmail.com https://www.linkedin.com/in/rociomp
@roci_munoz
ROCIO MUÑOZ PINEDO
rmpinedo@cic.es
CONCLUSIONES
El coste incial del montaje es alto
Nos permite ahorrar tiempo
Nos permite reducir errores
Dispondremos de métricas sobre nuestros proyectos
Dispondremos de un histórico de ejecuciones
Da seguridad al equipo de trabajo