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
SUBVERSIONEs 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.
MAVENEs 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.
NEXUSNexus 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).
HUDSONHerramienta 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.
SONARPermite 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 ContinuaEn 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
SubversionLo 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 stopagregar la variable de entorno para subversion
PATH=/opt/CollabNet_Subversion/bin:$PATHejecutar el siguiente script:
$ sudo Configure-CollabNet-SubversionEste 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.csrEnter 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>
MavenSe 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 --versionPor ultimo, si todo esta bien, tenemos que copiar y pegar nuestro setting.xml en
$HOME/.m2/setting.xmlConfiguracion del tomcatPara instalar tomcat, simplemente se descomprime el archivo en una ruta valida.
unzip apache-tomcat-6.0.20.zipconfigurar 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 privilegesInstalación de SonarLa 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.zipGeneramos 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 HudsonDescargar 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..