Integrando sonar

52
Abimael Desales López Java Developers México

description

Continuous Integration, SONAR, Jenkins

Transcript of Integrando sonar

Page 1: Integrando sonar

Abimael Desales López

Java Developers México

Page 2: Integrando sonar

Temario

1. El paradigma de Inspección Continua

2. Instalando Subversion

3. Montando un Servidor de Subversion

4. Instalando el Servidor de CI Jenkins

5. Configurando Jenkins

6. Creando una tarea de build

7. Instalando el plugin Sonar

8. Construyendo y monitoreando tu proyecto

Page 3: Integrando sonar

Introducción En este artículo discutiremos los procesos de inspección e integración continua y montaremos un entorno de integración continua para permitir estas prácticas. Instalaremos Software de Gestión de la Configuración (SCM), y aprenderemos cómo importar y gestionar el código fuente hospedado en él. Luego, instalaremos el servidor de Integración Continua Jenkins (Jenkins CI) y conectaremos un proyecto en el repositorio al servidor de build para automatizar el proceso de build. Finalmente, instalaremos el plugin de Sonar Jenkins y configuraremos un job de build en Jenkins de forma que automáticamente ejecute un análisis Sonar después de cada build.

Page 4: Integrando sonar

1. El Paradigma de Inspección Continua La integración continua es una práctica de desarrollo de software donde el equipo de desarrolladores integra su código frecuentemente. Cada vez que se emite un cambio al código fuente es provisto un nuevo build, generalmente a través de un proceso automatizado. El proyecto crece incrementalmente, un build estable está siempre disponible para cada iteración, y los errores del build pueden ser identificados por los miembros del equipo rápidamente. La inspección continua se expande y construye sobre esta práctica, agregando una capa de análisis de calidad en cada iteración. Mientras la integración continua asegura la estabilidad y minimiza el esfuerzo de mezclar código fuente en el proyecto, la inspección continua rastrea los requerimientos de calidad en un esfuerzo para controlar la calidad del producto final. Para permitir la inspección continua, se requiere la recolección y análisis de datos después de que cada build es producido por el servidor de build.

Page 5: Integrando sonar

Servidores de integración continua Un servidor de integración continua o servidor de build es responsable para ejecutar tareas de build y almacenar datos históricos y artefactos para cada build. Los builds pueden ser disparados ya sea manual o automáticamente. Una práctica común es que el servidor de build construya el proyecto automáticamente voteando en un repositorio de código siempre que se detecten modificaciones. El build server absorbe todos los cambios e inicia un nuevo build. El objetivo es proporcionar un nuevo un build rápido y verificar que el código nuevo no ha perjudicado el proyecto en un momento específico cada día, corriendo todas las pruebas unitarias y herramientas de calidad post-build. El objetivo es tener un build estable diariamente que ha pasado todas las pruebas unitarias y requerimientos de calidad y una continuidad más simple para ayudar a identificar errores.

Page 6: Integrando sonar

2. Instalando Subversion Subversion es un sistema de control de versiones desarrollado por Apache Software Foundation. Un servidor central de Subversion administra diferentes versiones de archivos / proyectos, mientras los desarrolladores se conectan al servidor vía línea de comandos o herramientas de GUI para emitir sus cambios al código. Si necesitas más información visita el sitio de subversion http://subversion.apache.org.

Por abreviar, aquí sólo usaremos los comandos básicos de subversion para importar un proyecto en subversion y emitir los cambios a archivos.

A continuación instalaremos el servidor de Subversion y su cliente en Linux y Windows.

Page 7: Integrando sonar

Instalación de Subversion en Ubuntu/Debian Las distros de Ubutu y Debian mantienen proyectos de subversion y están disponibles en la herramienta Synaptic Package Manager. Para instalar el servidor y cliente de subversion, abre una terminal e ingresa los siguientes comandos:

$sudo apt-get install subversion

$sudo apt-get install libapache2-svn

Para más información visita el sitio de los paquetes de subversion de Ubuntu:

http://packages.ubuntu.com/search?keyworks=subversion&exact=1

Page 8: Integrando sonar

Instalación de Subversion en Red hat Para Red Hat Linux, puedes elegir entre tres diferentes releases, a saber el paquete Subversion estándar, WANdisco, o Summersoft. WANdisco proporciona un release para cubrir todas las versiones de Red Hat y requiere registro, mientras

Summersoft hospeda múltiples paquetes rpm, y no requiere registro.

Para instalar el paquete estándar de Subversion de Red hat, abre la terminal e ingresa el siguiente comando como root:

#yum install mod_dav_svn subversion

Si aún no tienes instalado Apache, este comando también lo instala.

Page 9: Integrando sonar

Para instalar el release Summersoft, visita http://the.earth.li.pub/subversion/summersoft.fay.ar.us/pub/subversion/latest, selecciona el directorio con el número de versión más alto, y descarga e instala el package rpm para tu distribución Red Hat.

Para instalar el release de WANdisco ve a http://wandisco.com/subversion/download#redhat y haz click en el link Download Subversion Installer. Completa el formulario de registro y descarga el instalador. Luego, abre una terminal e ingresa los siguientes comandos como root:

#chmod +x svninstall_rhel5_wandisco.sh

#./svninstall_rhel5_wandisco.sh

Page 10: Integrando sonar

Instalación de Subversion en Windows Para instalación en Windows se utilizará Subversion Edge 2.x de Collabnet.

Visita la página http://www.open.collab.net/downloads/subversion y navega para encontrar las secciones de Collabnet Subversion Edge 2.x para Windows 32-bits o 64-bits. Descarga e instala como cualquier otra aplicación de Windows a través del wizard.

Page 11: Integrando sonar

3.Montando un servidor de Subversion A continuación, crearemos un repositorio para nuestros proyectos, configura un usuario llamado svnpackt para que tenga acceso al repositorio e importa un proyecto Maven dummy llamado packt-app al repositorio. El proceso es el mismo para Windows y para Linux.

Creando un repositorio de subversion

Un repositorio de subversion es simplemente un directorio en el sistema de archivos conteniendo archivos de configuración del repositorio y los archivos de nuestro proyecto. Para crear un repositorio abre una terminal e ingresa el siguiente comando:

$svnadmin create $PATH_REPO

Remplaza PATH_REPO con un directorio, por ejemplo /home/dev.

Page 12: Integrando sonar

Subversion seguridad y autorización Subversion soporta diferentes esquemas de autorización, con el más simple siendo autenticación basada en archivo-password. Los usernames y passwords son almacenados en un archivo de

password dentro del directorio conf del repositorio. Navega al directorio $PATH_REPO/conf, abre el archivo svnserve.conf y descomenta la línea password-db=passwd:

### If SASL is enabled (see below), this file will NOT be used.

### Uncomment the line below to use the default password file.

password-db = passwd

Para crear el usuario svnpackt con password svnpackt, abre el archivo passwd dentro del directorio PATH_REPO/conf, y agrega la siguiente línea svnpack=svnpackt.

Page 13: Integrando sonar

Importando un proyecto en Subversion Para crear un proyecto Maven simple, abre la terminal e ingresa el siguiente comando: mvn archetype:generate \

-DarchetypeGroupId=org.apache.maven.archetype \

-DgroupId=com.packt.app \

-DartifactId=packt-app

Nota que el comando anterior es una sóla línea dividida con diagonales invertidas sólo por propósitos de formateo. Debes ingresarla como una sola línea, omitiendo las diagonales.

Maven comenzará a descargar los archivos de definición de arquetipos necesarios, y eventualmente será preguntado para elegir la versión del arquetipo Maven rápido a usar:

Page 14: Integrando sonar

1: 1.0-alpha-1

2: 1.0-alpha-2

3: 1.0-alpha-3

4: 1.0-alpha-4

5: 1.0

6: 1.1

Choose a number: 6

Ingresa 6 y presiona Enter para continuar. [INFO] Using property: groupId = com.packt.app

[INFO] Using property: artifactId = packt-app

Define value for property 'version': 1.0-SNAPSHOT: : 1.0

Cuando te es preguntada la versión, ingresa 1.0 y luego Enter:

Page 15: Integrando sonar

Confirm properties configuration:

groupId: com.packt.app

artifactId: packt-app

version: 1.0

package: com.packt.app

Y: : Y

Finalmente presiona Y para completar el proceso. Maven ha creado el directorio del proyecto packt-app junto con todos los directorios necesarios. El proyecto contiene una clase main, en el package com.pack.app.

Page 16: Integrando sonar

Antes de que importemos el proyecto en Subversion, debemos crear un directorio packt-app en el repositorio. Para hacer esto, ingresa los siguientes comandos –el primero es para iniciar el servidor de Subversion en caso de que no esté corriendo. Cuando te sea preguntado el password, ingresa svnpackt. Recuerda remplazar la variable $PATH_REPO con la ubicación real del repositorio en tu sistema.

$ svnserve -d

$ svn mkdir svn://localhost/$PATH_REPO/packt-app --username

svnpackt

..

Store password unencrypted (yes/no)? yes

Committed revision 1.

Page 17: Integrando sonar

A continuación, abre una terminal y cambia el directorio (cd) a un nivel superior a donde el directorio packt-app fue creado antes por Maven.

Luego, ingresa el siguiente comando para importar el proyecto en Subversion: $ svn import packt-app svn://localhost/$PATH_REPO/packt-app –

username svnpackt

Adding packt-app/src

Adding packt-app/src/test

Adding packt-app/src/test/java

Adding packt-app/src/test/java/com

Adding packt-app/src/test/java/com/packt

...

Adding packt-app/src/main/java/com/packt/app/App.java

Adding packt-app/pom.xml

Committed revision 2.

Page 18: Integrando sonar

Ahora que el proyecto packt-app está almacenado en el repositorio de Subversion, podemos eliminar la copia local y checarlo otra vez directamente del servidor. Abre la terminal, cambia el directorio (cd) a donde quieras hacer el check out del proyecto e ingresa el siguiente comando:

$ svn co svn://localhost/$PATH_REPO/packt-app

A packt-app/src

A packt-app/src/test

A packt-app/src/test/java

A packt-app/src/test/java/com

A packt-app/src/test/java/com/packt

Page 19: Integrando sonar

A packt-app/src/test/java/com/packt/app

A packt-app/src/test/java/com/packt/app/AppTest.java

A packt-app/src/main

A packt-app/src/main/java

A packt-app/src/main/java/com

A packt-app/src/main/java/com/packt

A packt-app/src/main/java/com/packt/app

A packt-app/src/main/java/com/packt/app/App.java

A packt-app/pom.xml

Checked out revision 2.

Siempre que quieras emitir cambios o ejecutar comandos de Subversion con respecto al proyecto, abre una terminal en el directorio del proyecto e ingrésalos desde ahí.

Page 20: Integrando sonar

4.Instalando el servidor de CI de jenkins El servidor de Integración Continua Jenkins, formalmente conocido como Hudson antes que el renombrado del proyecto tomara lugar, ha sido creado por Kohsuke Kawaguchi. El sitio oficial del proyecto está disponible en http://jenkins-ci.org/. Al final del proceso de instalación, tendrás un servidor Jenkins corriendo en http://localhost:8080/jenkins.

Page 21: Integrando sonar

Así es como luce la página de bienvenida.

Page 22: Integrando sonar

Instalación de Jenkins en Ubuntu/debian Ingresa el siguiente comando para agregar la llave necesaria para el repositorio de package Debian Jenkins:

$ wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-

ci.org.key | sudo apt-key add -

Para agregar el repositorio, agrega la siguiente entrada de línea APT

en tu /etc/apt/sources.list: deb http://pkg.jenkins-ci.org/debian binary/

Alternativamente, puedes correr la herramienta Synaptic Package Manager y selecciona Repositories del menú Settings. Selecciona la pestaña Third Party Software y haz click en el botón Add para ingresar la línea APT. Haz click en Add Source y Close para cerrar el popup Repositories

Page 23: Integrando sonar
Page 24: Integrando sonar

Finalmente abre una terminal e ingresa los siguientes comandos para ejecutar la instalación:

$ sudo apt-get update

$ sudo apt-get install jenkins

Cuando el proceso de instalación se complete, navega a http://localhost:8080 para verificar que jenkins está corriendo.

En cuanto al servicio Jenkins es bueno saber que:

Jenkins será lanzado como un demonio al arranque.

El usuario Jenkins será creado para correr este servicio.

Los archivos de log serán colocados en /var/log/jenkins/jenkins.log. Checa este archivo si existen problemas con Jenkins.

Page 25: Integrando sonar

Instalación de Jenkins en Redhat/Fedora/CentOS

Para usar el repositorio rpm de jenkins abre una terminal e ingresa los siguientes comandos:

sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-

ci.org/redhat/jenkins.repo

sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key

Luego, el package Jenkins puede ser instalado con:

$yum install yenkins

Cuando el proceso de instalación se complete, navega a http://localhost:8080 para verificar que Jenkins está funcionando.

Para iniciar, detener o reiniciar el servicio, usa: $sudo service jenkins start/stop/restart

Page 26: Integrando sonar

El servicio de Jenkins corre de la siguiente forma:

Jenkins será lanzado como un demonio al arranque. Véase etc/init.d/jenkins para más detalles.

El usuario Jenkins es creado para correr este servicio

Los archivos de log serán colocados en /var/log/jenkins/jenkins.log. Checa este archivo si tienes problemas con Jenkins.

Page 27: Integrando sonar

Instalación de Jenkins en Windows Descarga y corre el instalador de Jenkins de http://mirrors.jenkins-ci.org.windows.latest para instalar Jenkins como un servicio Windows configurado para iniciar automáticamente al arranque. Para iniciarlo/detenerlo manualmente, usa el administrador de servicios desde el panel de control, o la herramienta de línea de comandos sc.

Cuando el proceso de instalación haya terminado, navega a http://localhost:8080/ para verificar que Jenkins está corriendo.

Page 28: Integrando sonar

5.Configurando Jenkins Asegúrate que el servicio de Jenkins está corriendo y ve a http://localhost:8080. De ahí, haz click en el link Manage Jenkins en el menú izquierdo para visualizar la lista de links que llevan a diferentes páginas de configuración. Haz click en el superior, Configure System, para navegar al dashboard de configuración. Este dashboard caracteriza a muchas secciones que configuraremos una por una.

Page 29: Integrando sonar

Configuración de JDK Haz click en el botón Add JDK para expandir esta sección. Si tu JDK instalado no ha sido detectado por Jenkins, tienes que ingresarlo manualmente en el campo Name. De hecho, a menos que quieras que Jenkins lo instale automáticamente por ti, en cuyo caso seleccionas el checkbox Install automatically.

Page 30: Integrando sonar

Configuración Maven Haz click en el botón Add Maven y rellena los campos Name y MAVEN_HOME para que coincidan con tu propia instalación de Maven. Jenkins usará esta instalación de Maven para ejecutar builds. Alternaticamente puedes verificar el checkbox Install automatically y Jenkins tiene que instalarlo directamente desde Apache.

Page 31: Integrando sonar

Configuración del repositorio A continuación, configura la sección Subversion como se muestra en la siguiente pantalla:

Page 32: Integrando sonar

Configuración del servidor de E-mail Jenkins soporta notificación de usuarios en varios eventos de build como son build failed o build restored. Para habilitar el soporte de notificaciones, tienes que configurar el servidor SMTP y autentificación SMTP si aplica –checa tus configuraciones del servidor de e-mail antes de hacer cambios a esta sección. El valor del campo Sender E-mail Address será la dirección que Jenkins usará para enviar e-mail a los usuarios.

Page 33: Integrando sonar
Page 34: Integrando sonar

Asegurando Jenkins Por default, Jenkins está abierto para uso y configuración por cualquiera, no requiriendo autenticación. Navega a la parte superior y verifica el checkbox Enable Security para expandir la sección de configuración de seguridad.

Desde Security Realm, selecciona Jenkins’s own user database y si lo deseas, selecciona el checkbox Allow users to sign up.

Page 35: Integrando sonar

Haz click en el radio button Matrix-based security, escribe pack en el campo input User/group to add, y haz click en el botón Add. En la nueva fila, selecciona todos los privilegios para asegurarte que este usuario tiene derechos a todo.

Page 36: Integrando sonar

Haz click en el botón Save para preservar los cambios de configuración y haz click otra vez en el logo Jenkins izquierdo superior para retornar a home. Ahora serás cuestionado por log in. No hagas login, en vez de ello haz click en el link Create Account, y llena el formulario con los detalles de tu cuenta ingresando packt como username. Porteriormente, serás capaz de loguearte con tu cuenta pack normalmente.

Page 37: Integrando sonar

6.Creando una rutina de build A continuación, crearemos una rutina de build para el proyecto Maven packt-app. Loguéate a Jenkins y haz click en el link de la izquierda New Job. Ingresa un nombre a la rutina y selecciona el radio button maven 2/3. Luego, haz click en OK para proceder a la pantalla de configuración del job.

Page 38: Integrando sonar

Haz click en el radio button Subversion e ingresa la URL del repositorio en el proyecto packt. Recuerda remplazar la variable de entorno $PATH_REPO con el directorio del repositorio como está configurado en tu propio sistema. Deja el resto de los campos a sus valores default.

Page 39: Integrando sonar

Configura la sección Build Triggers como se muestra en el siguiente screenshot:

El valor Poll SCM 5***** es una expresión cron y significa que Jenkins voteará por el servidor Subversion cada cinco minutos y si algunos cambios son detectados, actualizará el código fuente para jalar los cambios y automáticamente ejecutar la rutina de build packt-app. Haz click en la marca de interrogación junto al campo Poll SCM para más opciones de configuración

Page 40: Integrando sonar

Expresión Cron y scheduling Cron es un scheduler de jobs basado en tiempo en sistemas operativos Unix que te permite calendarizar jobs usando expresiones. Una expresión cron es una cadena de cinco campos con cada campo representando una unidad de tiempo diferente como en la forma siguiente:

Minutos: 0-59

Horas: 0-23

Día del mes: 0-23, usa ? si no es aplicable

Mes: 1-12

Día de la semana: 0-6 o SUN-SAT (por nombre)

Page 41: Integrando sonar

Finalmente haz click en el botón Save y navega atrás a la página home de Jenkins haciendo click en el logo de la parte superior izquierda. Tu nuevo job aparece en la lista de jobs al centro de la página. Puedes hacer click en el botón play de más a la derecha para iniciar el job, o click en el nombre del job –por ejemplo, packt-app para ir al dashboard. Para reconfigurar el job, haz click en configure del menú de la izquierda. Para navegar los artefactos de build, haz click en Workspace.

Page 42: Integrando sonar

Instalando el plugin Sonar Antes de probar nuestro nuevo job, vamos a instalar el plugin de Sonar. El plugin de Sonar le permite a Jenkins iniciar un análisis Sonar después de cada build. Desde la página home de Jenkins http://localhost:8080/, haz click en el link Manage Jenkins y Manage Plugins de la siguiente pantalla. Haz click en la pestaña Available y buscar (Ctrl+F) para que Sonar encuentre y seleccione el plugin de Sonar. Luego, haz click en el botón Install without restart para comenzar el proceso de instalación.

Mientras Jenkins está descargando e instalando el plugin, asegúrate de checar la opción Restart Jenkins como se muestra en el siguiente screenshot. Esto asegurará que Jenkins se reinicie inmediatamente una vez que la instalación se haya completado.

Page 43: Integrando sonar
Page 44: Integrando sonar

Con el plugin de Sonar instalado, ve a Manage Jenkins | Configure System, y haz scroll hasta la sección Sonar. Proporciona un nombre para el servidor Sonar y haz click en Save. Si el servidor Sonar está instalado en un URL diferente a la default (http://localhost:9090/), haz click en el botón Advanced… e ingresa la URL del servidor Sonar en el campo de entrada de la URL del servidor.

Page 45: Integrando sonar

A continuación habilitaremos el análisis Sonar como una acción post-build para nuestra actividad packt-app. Ve atrás a la página home de Jenkins y de la lista de jobs, selecciona el packt-app y haz click en su nombre. Click en Configure del menú izquierdo y navega a la parte inferior de la página. Selecciona el checkbox Sonar de la sección Post-build Actions para habilitar el análisis Sonar. Posiciónate sobre los íconos de marca de interrogación en el resto de las opciones –archivar el artefacto de build, construye otros objetos dependientes, instala el artefacto a un repositorio de artefactos Maven, etc. Adicionalmente, puedes habilitar Email Notification y proporcionar una lista de emails de usuarios para notificar siempre que un evento de build es disparado por el build de este job.

Page 46: Integrando sonar

Finalmente, haz click en Save para preservar tus cambios y retornar al dashboard del job.

Page 47: Integrando sonar

Construyendo y monitoreando tu proyecto Para probar nuestro nuevo job, ve a la página home de Jenkins en http://localhost:8080/ y haz click en el botón play, como se muestra en el siguiente screenshot, para ejecutar el proceso de building. El panel Build Executor Status en la izquierda de la página despliega el progreso del build. Puedes hacer click en el número de build y luego en el link Console Output en la izquierda para inspeccionar el log del build y que corre. Nota que después que el build se complete, un análisis Sonar es disparado y ejecutado.

Page 48: Integrando sonar
Page 49: Integrando sonar

Una vez que el build haya finalizado exitosamente, el status del job se pone en azul. Haz click en el nombre del proyecto para navegar a la página de detalles.

De aquí, puedes accesar todos los datos de builds pasados, descargar artefactos de build, y revisar los resultados de tests. Haz click en el link workspace para descargar artefactos y revisar los logs de builds.

Page 50: Integrando sonar
Page 51: Integrando sonar

Haz click en el link Sonar y ve derecho al dashboard Sonar del proyecto:

Page 52: Integrando sonar

GRACIAS www.facebook.com/JavaDevelopersMexico

No olvides regalarnos un like.

Dudas y comentarios no dudes en escribir en la página o al siguiente correo

[email protected]