Instalación y primeros pasos con Jenkins

Existen varias maneras de ejecutar Jenkins, en este post, vamos a ver como ejecutar Jenkins en un servidor Tomcat, así que antes de nada tenemos que tener correctamente configurado el servidor y disponer de una instalación de java adecuada. Para ello, vamos a seguir los pasos que se indicaron en este post

Una vez que tenemos instalado el servidor, accedemos a la página oficial de Jenkins  y nos descargamos la versión war del programa.

Descargar Jenkins

Descargar Jenkins

Copiamos el archivo que hemos descargado “jenkins.war” en el directorio “webapps” de nuestro servidor Tomcat. Tenemos que decirle a Tomcat que utilice UTF8 para decodificar las URLs, para ello editamos el archivo $TOMCAT_HOME/conf/server.xml y añadimos URIEncoding="UTF-8" en el conector del puerto 8080. Por ejemplo, en mi equipo queda del siguiente modo:

Arrancamos el servidor y accedemos a la aplicación a través de la url http://127.0.0.1:8080/jenkins de este modo podemos comprobar que lo tenemos instalado correctamente:

Página principal

Página principal (Pinchar para agrandar)

Como se puede ver, instalar Jenkins es muy sencillo. El siguiente paso a realizar será configurar correctamente la aplicación.

Configurar Jenkins

Para configurar Jenkins, pulsaremos en la opción “Administrar Jenkins” que se muestra en el menú de la izquierda. Se nos mostrarán las

Opciones de administración

Opciones de administración (pinchar para agrandar)

Pulsamos en el primer link, “Configurar sistema”. Vamos a lanzar las pruebas de un proyecto que usa Maven, por lo tanto, tenemos que indicar son los parámetros de configuración de Maven.

Configiración Maven

Configuración Maven (pinchar para agrandar)

Jenkins es capaz de descargar e instalar automáticamente Maven (y otras muchas cosas). En mi caso, como ya tenía en mi equipo Maven, simplemente he indicado los parámetros necesarios. 

Lo siguiente que vamos a hacer es configurar los parámetros de la JDK.

Parámetros JDK

Parámetros JDK (pinchar para agrandar)

Guardamos los cambios.

Para completar el ejemplo, vamos a configurar Git en Jenkins. Git no viene por defecto, así que lo que tenemos que hacer es instalar el plugin de Git para Jenkins. Para ello, volvemos a pulsar en el menú “Administrar Jenkins” y pulsamos en la opción “Administrar Plugins”. Se nos mostrará la información de los plugins, pulsando en la pestaña “Todos los plugins”, nos aparece una lista con todos los plugins que podemos instalar, así que filtramos por “git plugin” y lo seleccionamos para su instalación, y pulsamos el botón “Instalar sin reiniciar”.

Plugin Git

Plugin Git (pinchar para agrandar)

Una vez instalado reiniciamos Jenkins para que los cambios tengan efecto.

Crear una tarea en Jenkins

Nos vamos al menú “Nueva Tarea”, podemos elegir entre varios tipos de acciones, en este caso elegiremos “Crear un proyecto de estilo libre”, le damos un nombre a la tarea y pulsamos OK.

Creando la primera tarea

Creando la primera tarea (pinchar para agrandar)

En la siguiente pantalla, tenemos que indicar dónde está nuestro código fuente, así que seleccionaremos “Git” como sistema de control de versiones y en la Url introduciremos el proyecto de ejemplo que subimos en el artículo sobre Git y Github, introducimos el acceso de sólo lectura “git://github.com/Notodocodigo/EjemploJsf.git”. 

Origen del código fuente

Origen del código fuente (pinchar para agrandar)

Ahora tenemos que indicar, cuando queremos que se ejecute la tarea, si queremos que se lance cuando se suban cambios en el repositorio, etc. Nosotros lo vamos a ejecutar de manera periódica, por ejemplo cada 5 minutos. Para indicar esto, se utiliza la sintaxis “cron” donde se indican una serie de valores separados por espacios, según el siguiente orden:

  1. Minutos (0 – 59)
  2. Horas (0 – 23)
  3. Día del mes (1 – 31)
  4. Mes (1 – 12)
  5. Día de la semana (0 – 7) donde 0 y 7 se corresponden con el domingo

Cada uno de estos valores puede especificarse con un valor concreto (por ejemplo, 3), un rango de valores (por ejemplo, 4-8) o con un comodín (por ejemplo, *). Para especificar saltos de X tiempo se utiliza “*/X”. Si consultamos la ayuda que se ofrece en el apartado (pinchando en el icono con la interrogación dentro de un círculo azul), podemos encontrar más información. Como hemos comentado, vamos a ejecutarlo cada 5 minutos, por lo tanto introduciremos lo siguiente:

Ejecución periódica

Ejecución periódica (pinchar para agrandar)

Bien, ya hemos indicado que la tarea se va a ejecutar cada 5 minutos, pero ¿Qué es exactamente lo que vamos a ejecutar?. Esto lo indicamos en el apartado “Ejecutar”, para este ejemplo, como ya hemos comentado, queremos ejecutar tareas Maven. Lo que queremos hacer es descargar el código fuente, compilar el proyecto y ejecutar los test unitarios. Para ello, seleccionamos lo siguiente:

Acciones a ejecutar

Acciones a ejecutar (pinchar para agrandar)

Indicamos en “Goles”, que es una traducción un poco “libre” de “goals” (objetivos), indicamos “clean package”. Como vimos en el los artículos sobre Maven

Recordemos que al ejecutar “clean” borramos las compilaciones anteriores que hayamos realizado y al ejecutar “package” realizamos las siguientes acciones:

  • validate: Valida que el proyecto es válido y contiene los elementos necesarios
  • compile: Compila el código
  • test: Si utiliza un “unit testing framework” lo ejecuta. Estos test no necesitan desplegar la aplicación
  • package: Compila y empaqueta el código (como jar, etc.)

En el proyecto que estamos utilizando, no hay test unitarios, pero si los hubiera se ejecutarían. Por el momento para la prueba de concepto, nos vale el proyecto tal y como está.

Acciones a ejecutar (pinchar para agrandar)

Acciones a ejecutar (pinchar para agrandar)

Las acciones anteriores fallarán si el proyecto no compila, o si no se pasan los test unitarios (que en este caso, como se ha comentado, no hay test unitarios). Además, podemos ejecutar acciones después de que la ejecución haya terminado. Por ejemplo, le vamos a decir a Jenkins que nos archive los artefactos generados, de este modo:

Acciones para ejecutar después

Acciones para ejecutar después (pinchar para agrandar)

Vamos a indicar que almacene los archivos .war generados:

Guardar los archivos generados

Guardar los archivos generados (pinchar para agrandar)

Una vez que hemos guardado los cambios, transcurrido el tiempo que hemos indicado, se nos ejecutará la tarea, si falla la compilación se mostrará con un círculo rojo y si todo va bien, se indicará con un círculo azul, como se muestra en la esquina inferior izquierda.

Detalles de la tarea

Detalles de la tarea (pinchar para agrandar)

Si accedemos ahora al panel principal, vemos la lista de tareas que hemos configurado y el estado de salud de las ejecuciones (que van desde la tormenta, hasta el día soleado, en función del número de ejecuciones fallidas). En nuestro caso únicamente vemos una, que es la que acabamos de configurar.

Panel principal

Panel principal (pinchar para agrandar)

Conclusiones

Hemos visto un pequeño ejemplo, una pequeña muestra de las cosas que podemos realizar con Jenkin. Existen multitud de operaciones que podemos realizar, (compilar, empaquetar, distribuir, lanzar pruebas de integración, desplegar aplicaciones en servidores, ejecutar target de Ant, etc.). Además Jenkins dispone de elementos que nos permiten visualizar los informes de una manera atractiva, por ejemplo, permite mostrar los resultado de los test, los análisis de cobertura, etc. a través de gráficos que nos permiten conocer el estado se saludo de nuestro código de modo más sencillo.

6 comentarios:

  1. Excelente explicación, Todo bien definido y ordenado.
    me ha sido de utilidad

  2. Hola, tu guia es muy clara y concisa, me ha ayudado bastante a aclararme.
    Quisiera preguntarte algo, como seria el procedimiento para que jenkins analizara via maven, un jar, validandolo y generando un war y a su vez mostrandomelo en tomcat, ya publicado.
    Con que me des una orientación, me bastaria, ya que ando un poco perdido.

    • Hola Guare

      Casi, más que una pregunta, parece un desarrollo en toda regla 🙂

      Lo normal es partir de un sistema de control de versiones, donde tengas los fuentes.
      El primer paso es crear un proyecto mavenizado en tu entorno de desarrollo que compile correctamente y empaquete el proyecto como quieras y subir dicho proyecto al sistema de control de versiones. Puedes echarle un ojo a los artículos que hay sobre Maven aquí. Una vez que te funcione en local, ya puedes ir pensando en engancharlo con Jenkins, donde podrás descargar el proyecto del SCM y utilizar los comandos de maven tal cual te funcionaron en local (mvn clean install… etc).
      Para desplegar el war en un servidor, Jenkins te proporciona los mecanismos, investiga un poco y lo configurarás rápidamente.

      En resumen, empieza por generar el war con maven en local, y luego, intenta configurar Jenkins, para que se descargue los fuentes, los compile y genere el war tal y como lo has hecho en local.

  3. Hola. Me gustó mucho tu guía. Una duda. Se puede usar otro control de versiones, por ejemplo Subversion(SVN)?. ¿como se instalaría algun plugin para funcionar con Jenkins?

    Muchas gracias por tu aporte

  4. Hola, he instalado Jenkins siguiedo las indicaciones pero al arrancarlo me encuentro con este error:

    28-Jan-2016 15:07:44.824 SEVERE [Download metadata thread] hudson.model.UpdateSite.updateData ERROR: Signature verification failed in update site 'default' (show details)

    java.security.cert.CertPathValidatorException: Algorithm constraints check failed: MD5withRSA
    	at sun.security.provider.certpath.PKIXMasterCertPathValidator.validate(Unknown Source)
    	at sun.security.provider.certpath.PKIXCertPathValidator.validate(Unknown Source)
    	at sun.security.provider.certpath.PKIXCertPathValidator.validate(Unknown Source)
    	at sun.security.provider.certpath.PKIXCertPathValidator.engineValidate(Unknown Source)
    	at java.security.cert.CertPathValidator.validate(Unknown Source)
    	at org.jvnet.hudson.crypto.CertificateUtil.validatePath(CertificateUtil.java:93)
    	at jenkins.util.JSONSignatureValidator.verifySignature(JSONSignatureValidator.java:76)
    	at hudson.model.UpdateSite.verifySignature(UpdateSite.java:222)
    	at hudson.model.UpdateSite.updateData(UpdateSite.java:201)
    	at hudson.model.UpdateSite.updateDirectlyNow(UpdateSite.java:173)
    	at hudson.PluginManager.doCheckUpdatesServer(PluginManager.java:959)
    	at jenkins.model.DownloadSettings$DailyCheck.execute(DownloadSettings.java:118)
    	at hudson.model.AsyncPeriodicWork$1.run(AsyncPeriodicWork.java:53)
    	at java.lang.Thread.run(Unknown Source)
  5. Hola, he instalado Jenkins y me abre todo muy bien, pero cuando voy a administrar plugins y pulso la pestaña todos los plugins no me sale nada, sale “No hay actualizaciones pendientes”, entonces no puedo bajar el plugin de GTI, espero me puedan ayudar.

    Muchas Gracias

Deja un comentario

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