QuickHowTo: Instalar Jenkins en CentOS 5.5
Saturday, 3 de September de 2011 por marcos
Aquí les dejo una crónica de la instalación de Jenkins en CentIOS 5.5 por si les interesa empezar a utilizarlo para sus soluciones de CI.
Acá pueden encontrar las instrucciones oficiales, yo decidí instalarlo standalone, es decir sin tener un Tomcat corriendo.
El primer paso es agregar los repositorios de Jenkins y su firma a nuestro yum, para ello ejecutamos los siguientes comandos como root:
# wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo # rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key # yum update && yum install jenkins
El siguiente paso es configurar el servicio en caso de que no nos sirva alguno de los parámetros por defecto del mismo, para eso necesitamos editar el archivo/etc/sysconfig/jenkins
En mi caso cambie el puerto por defecto de 8080 a 5353 ya que tengo el 8080 ocupado por otros servicios. Esto lo hice modificando la variable JENKINS_PORT de la siguiente manera:
JENKINS_PORT="5353"
El siguiente paso es arrancar el servicio, para ello como root corremos
# /etc/init.d/jenkis start
Es muy común que en este paso se produzca una excepción similar a la siguiente:
Starting Jenkins Exception in thread "main" java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:616) at Main._main(Main.java:127) at Main.main(Main.java:96) Caused by: java.lang.UnsatisfiedLinkError: /tmp/jna/jna7112420072244666734.tmp: /tmp/jna/jna7112420072244666734.tmp: failed to map segment from shared object: Operation not permitted at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1750) at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1646) at java.lang.Runtime.load0(Runtime.java:787) at java.lang.System.load(System.java:1022) at com.sun.jna.Native.loadNativeLibraryFromJar(Native.java:745) at com.sun.jna.Native.loadNativeLibrary(Native.java:674)http://blog.mibanez.com.ar/wp-admin/post.php?post=193&action=edit at com.sun.jna.Native.<clinit>(Native.java:115)
El problema se debe a que jenkins crea una librería en el directorio temporal /tmp y trata de ejecutarla, pero generalmente dicha partición esta montada con el bit noexec por seguridad.
La solución es muy simple, lo que tenemos que hacer es instruir a la maquina virtual de java para que use un directorio temporal diferente, en mi caso decidí usar
/usr/local/java/tmp
Para crearlo y darle los permisos adecuados ejecutamos:
# mkdir -p /usr/local/java/tmp
# chmod 777 /usr/local/java/tmp
Y luego modificamos el script que arranca Jenkins para que use esta nuevo directorio como temporal. Para ello editamos el script /etc/init.d/jenkins y modificamos la variable JENKINS_JAVA_CMD para que quede de la siguiente forma:
JENKINS_JAVA_CMD="$candidate -Djava.io.tmpdir=/usr/local/java/tmp"
Con esto ya deberíamos poder arrancar el servicio y configurarlo yendo con el navegador a http://miserver.com:5353
Una ver que hacemo esto Jenkins se va a autoconfigurar. Noten que en ningun momento configuramos usuarios o privilegios, para crear un usuario y que solamente ese usuario se pueda loguear vamos a Manage Jenkins, luego a Configure System. Una vez en esa pantalla elegimos Enable Security luego en Security Realm pueden elegir el sistema que prefieran, en mi caso elegi Jenkin’s own user database. Una vez hecho esto, guardamos los cambios con el boton Save.
En ese momento tendremos que crear un usuario, y recien ahi tenemos seguridad habilitada para nuestro Jenkins.
En proximos posts, vamos a ir configurando la pequeña bestia que es este sistema de Continuous Integration.