17 de febrero de 2010

Integración continua

Consiste en hacer integraciones automáticas de un proyecto lo más a menudo posible para así poder detectar fallos cuanto antes. Entendemos por integración la compilación y ejecución de tests de todo un proyecto. (Martin Fowler)

La Integración Continua está asociado con las metodologías de programación extrema (XP) y desarrollo ágil.

Ventajas
- Reducción del tiempo de integración.
- Detección de errores lo más pronto posible.
- Pruebas inmediatas tras un cambio en el código.
- Disponibilidad del código para test, demos, etc.

Desventajas
- Sobrecarga por el mantenimiento del sistema.
- Necesidad potencial de un servidor dedicado a build.
- El impacto inmediato al subir código erróneo provoca que los desarrolladores no hagan tantos commits como sería conveniente como copia de seguridad


QUE NECESITAMOS???

Software
- Control de Versiones (SVN)
- Herramienta para generar Build y automizacion de tareas (Maven - Hudson)
- Repositorio local (Nexus)
- Estadisticas y/o reportes de Analisis de Codigo (Sonar)

Hardware
- Servidor dedicado a IC
- Espacio en el disco



SUBVERSION
Es un sistema de control de versiones, cuyo proposito es administrar el acceso a un conjunto de ficheros, y mantener un historial de cambios realizados, es útil para guardar cualquier documento que cambie con frecuencia, como, el código fuente de un programa.

Caracteristicas:
- Actualiza ficheros modificados
- Historial de cambios.
- Registra cambios en la estructura de directorios (permite mover y renombrar sin perder el historial).
- Commits atómicos, se realizan todos o ninguno.


MAVEN
Es una herramienta de software para la gestión y construcción de proyectos Java.
Utiliza un Project Object Model (POM) para describir el proyecto de software a construir, sus dependencias de otros módulos y componentes externo, y el orden de construcción de los elementos.


NEXUS
Nexus es un administrador visual de repositorios para Maven.
Nexus actúa como una caché de objetos entre su organización y el repositorio de Maven público. Esto significa que los artefactos (jars) y sus dependencias, sólo tienen que descargar una vez, y despues se descargan de su repositorio local.Para Jars propietarios y/o propios, se puede hacer un repositorio especial (thirdparty).


HUDSON
Herramienta open source que nos ayuda a monotorizar la ejecución de tareas repetitivas como el compilar un proyecto cada cierto tiempo. Además se enfoca en la construcción y prueba de proyectos de software contínuamente y en monitorizar la ejecución de tareas ejecutadas externamente.
Se integra facilmente con Maven y tiene un sin numero de plugin que se pueden utilizar.


SONAR

Permite la verificacion de la calidad del codigo java, en otras palabras, calcula y muestra en formato web metricas de nuestros proyecto.
Herramientas como PMD, CheckStyle, FindBugs, Cobertura, etc, etc; ya vienen embebidas en Sonar.



Comenzamos con Nuestra Integracion Continua
En este caso esta instalado sobre un servidor linux (redhat)

Instalar java
$ chmod +x jdk-6xxx.bin (para rpms ... chmod a+x jdk-6xxx-rpm.bin)
$ ./jdk-6xxx.bin

Subversion
Lo primero que tenemos que hacer es instalar el Subversion nos bajamos los siguientes archivos rpm’s de la página oficial.
rpm -i CollabNetSubversion-client-1.6.6-1.i386.rpm
rpm -i CollabNetSubversion-server-1.6.6-1.i386.rpm

detenemos el subversion para configurarlo.
$ sudo /etc/rc.d/init.d/collabnet_subversion stop

agregar la variable de entorno para subversion
PATH=/opt/CollabNet_Subversion/bin:$PATH

ejecutar el siguiente script:
$ sudo Configure-CollabNet-Subversion

Este script te configura todo para Subversion, (usuarios, repositorios, usuarios. etc)

Es muy probable que tu servidor tenga Proxy, para solucionar esto podrias utilizar https, mediante el Openssl que ya viene instalado en el colabNet
Para que subversion acepte SSL

$ openssl genrsa -des3 -out server.key 1024
$ openssl req -new -key server.key -out server.csr

Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:PE
State or Province Name (full name) [Berkshire]:Lima
Locality Name (eg, city) [Newbury]:Lima
Organization Name (eg, company) [My Company Ltd]:Asociacion Privada
Organizational Unit Name (eg, section) []:Sistemas
Common Name (eg, your name or your server's hostname) []:localhost
Email Address []:yourmail@mail.com


$ openssl req -new -key server.key -x509 -out server.crt
$ cp server.key server.key.save
$ openssl rsa -in server.key.save -out server.key

En el archvo de configuración collabnet_subversion_httpd.conf:
<location repos="">
....
<ifdefine ssl="">
SSLRequireSSL
</ifdefine>
....
</location>

Maven
Se descomprime el archivo de instalación y se crea una variable de entorno:
export MAVEN_HOME=/directorio/donde/estadescompimido/maven
export PATH=$PATH:$MAVEN_HOME/bin
$mvn --version


Por ultimo, si todo esta bien, tenemos que copiar y pegar nuestro setting.xml en
$HOME/.m2/setting.xml

Configuracion del tomcat
Para instalar tomcat, simplemente se descomprime el archivo en una ruta valida.
unzip apache-tomcat-6.0.20.zip
configurar el puerto del tomcat:
<connector port="8082"></connector>

Despues de configurar el Tomcat, inscribimos unas variables de entorno en el $home/.bashrc.
MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=256m"

CATALINA_OPTS="-Xms1024m-Xmx1024m -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true -XX:MaxPermSize=256m"


Cambiando la Base de datos para Sonar:
Debemos de tener instalado una base de datos, en este caso al Mysql
$mysql -u root -p
(aqui pones el password)
mysql$ CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql$ grant all privileges on sonar.* to 'sonar'@'localhost' identified by 'sonar';
mysql$ flush privileges



Instalación de Sonar
La instalación es bastante sencilla.Download y unzip en el directorio donde se va a guardar Sonar, lo descargamos de su pagina web, desempaquetar el zip:
$ unzip sonar-1.11.zip
Generamos el war:
InstalSonarDir/war$ ./build-war.sh ---> con esta sentencia generamos el war.
Solo basta colocar el war que generarmos en el webapp de tomcat y listo.
Http://localhost:8082/sonar

Instalación de Hudson
Descargar en esta dirección. Instalar Hudson, solamente basta con copiar y pegar en el webapp del tomcat.

Ahora solo falta levantar el tomcat.
$tomcat/bin/ ./startup.sh


y listo... ya tengo instalado nuestra integracion continua..

No hay comentarios: