Integración Contínua III – Jenkins

Jenkins

Jenkins es una aplicación que monitoriza las ejecuciones de tareas repetitivas, tales como compilar un proyecto software o tareas ejecutadas por cron. Jenkins ofrece un sistema de Integración Contínua de fácil uso, permitiendo a los desarrolladores integrad los cambios al proyecto y facilitando que el usuario obtenga una compilación fresca. La compilación automatizada y continua aumenta la productividad.

Jenkins es una aplicación web java, por lo que para su ejecución precisaremos de un servidor apache-tomcat. La interfaz de jenkins, como la de sonar, se ve en el navegador.

Instalación

Descarga

Preparación del Servidor Tomcat

Si se dispone de un servidor de aplicaciones web java (como apache-tomcat, websphere, etc), pueden saltarse este paso.

Vamos a la página de descargas de apache-tomcat y descargamos el core. Una vez descargado, descomprimimos la carpeta y la dejamos en nuestra $home, sin la versión de ella. De este modo, deberíamos tenerla en /home/miusuario/apache-tomcat.

Para iniciar el servidor, hay que ejecutar el comando

/home/miusuario/apache-tomcat/bin/startup.sh
Instalación de Jenkins

Descargamos la última versión de Jenkins, un Web ARchive (.war). Una vez descargado, lo copiaremos al subdirectorio webapps/ de nuestra carpeta apache-tomcat/.

Ahora vamos a localhost:8080/jenkins a confirmar que todo está funcionando como debe. Si vemos que tarda, podemos mirar en el log de catalina.out para ver si está o no desplegada la aplicación con:

tail -f ~/apache-tomcat/logs/catalina.out

Todo estará listo cuando veamos el siguiente mensaje

Información: Despliegue del archivo /home/frank/apache-tomcat/webapps/jenkins.war de la aplicación web

Una vez desplegado, deberíamos poder ver la interfaz de Jenkins en localhost:8080/jenkins.

Configuración

Tenemos que instalar una serie de plugins en Jenkins para poder automatizar lo que hasta ahora hacíamos manualmente con Gradle y Sonar. Para ello, en el menú de la izquierda pincharemos sobre Administrar Jenkins. Veremos un menú de configuración a la derecha. Nos vamos a Administrar Plugins y allí a Todos los Plugins. En esa lista hay que marcar los siguientes:

git
git-client
git-server
github
github-api
gradle
maven-plugin
sonar
testflight

Algunos pueden venir ya instalados.  Con estos plugins, podemos hacer que Jenkins se descargue el código de nuestro repositorio (plugins de git y github), lo compilen (plugin de gradle y maven), analicen el código (plugin de sonar) y suban la apk generada a testflight para que llegue al equipo de testers (plugin de testflight). Del servicio de testflight hablaremos en el siguiente artículo.

Ahora volvemos a Administrar Jenkins y, de ahí, a Configurar Sistema. Buscamos “Git” y añadimos una instalación. Por defecto debería traer de nombre “Default” y ruta al ejecutable “git”. Lo dejamos tal cual.

Buscamos “Sonar” ahora. Ojo, “sonar” y no “sonar-runner”. Añadimos una instalación de Sonar a la que le daremos de nombre, por ejemplo, “sonar local”. No necesita mas.

La configuración del plugin de testflight la veremos en el próximo artículo.

Uso

Crearemos una tarea nueva para ir viendo cómo funciona. Iremos a la pantalla inicial de Jenkins y pulsaremos sobre “Nueva Tarea”. Le damos un nombre – por ejemplo, el de la app para la que vamos a crear la tarea – y marcamos “Crear Proyecto de Estilo Libre”. Pulsamos en OK y saldrá la pantalla de configuración de la tarea.

En esta pantalla, buscaremos “Configurar el origen del código fuente”. Ahí marcaremos git, y en “Repository URL” pondremos la url del repositorio de nuestra app (la que acaba en “.git”). Si queremos que mire una rama que no sea la master, deberemos poner el nombre de la misma en “Branch Specifier”. Se pueden añadir tantas ramas como se desee a un repositorio; y la misma tarea puede tener varios repositorios de los que bajarse el código.

Listo todo eso, vamos a “ejecutar”.  Ahí pulsamos en “añadir un paso” y elegimos “Invoke Gradle Script”. En los campos “build step description” y “tasks” pondremos clean build, y en “Build File” el nombre de nuestro fichero, build.gradle.

De nuevo en “ejecutar”, añadimos un segundo paso y elegimos “Invoke Standalone Sonar Analysis”. Aquí no tenemos que añadir nada mas.

Hecho todo esto, guardamos y volveremos a la pantalla principal, dónde ahora veremos nuestra tarea. Si pulsamos sobre el pequeño triángulo que hay junto al nombre de nuestra tarea veremos que se despliega un menú. Pulsaremos sobre “Construir ahora” para probar nuestra tarea. A la izquierda, en “estado de los nodos”, veremos el progreso de nuestra tarea. Podemos ver la salida de consola si pulsamos sobre el triángulo negro junto al número (#1, por ejemplo) de la tarea y en el menú desplegable pulsamos en “Salida de consola”. Si hubiera algún error veríamos mensajes de ello. Si, por contra, preferimos permanecer en la pantalla principal, podremos ver también el resultado general (si falla o no) en los datos de la tarea.

Conclusión

Ahora tenemos una tarea de Jenkins que hace lo siguiente de forma automática:

  • se descarga el código de nuestro repositorio
  • lo compila con gradle (si lo hemos dispuesto así en build.gradle, también firmará la apk)
  • lo analiza con sonar

Hay que tener en cuenta que para que pueda jenkins usar gradle y sonar, los ficheros pertinentes deben estar en el repositorio. Eso incluye nuestro Almacén de Claves si queremos que nos firme las apks. Si no nos convence la idea de tener el AC en nuestro repositorio, podemos copiarlo manualmente a

~/.jenkins/jobs/mitarea/workspace

que es dónde se baja todo lo que tenemos en nuestro repositorio. Con el icono de la derecha de la tabla dońde está nuestra tarea, podremos programar ejecuciones de la misma. De ese modo, estableceremos compilaciones y análisis periódicos de nuestros proyectos, que es de lo que va la Integración Contínua. Además, jenkins registra los resultados de cada ejecución, con lo que sabremos en todo momento si ha habido algún problema con alguna (ej: código que no compila) y cuándo.

En el próximo artículo hablaremos de la parte de pruebas, que llevaremos con testflight, un servicio en el que configuramos un equipo de testers y reciben nuestras apks para ir probándolas. Una vez preparado todo, lo integraremos con jenkins para tener una Integración Contínua completa de nuestros proyectos.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: