sábado, 13 de junio de 2009

Implementando un Entorno de Integracion

Bueno para iniciar con esta implementacion vamos ha instalar lo que es un sistema de control de versiones en este caso se utilizara Subversion el cual aparte de su estabilidad es software libre.

Lo pueden hacer desde el Gesto de Paquetes Synaptic o en una terminal como se muestra a continuacion:


sudo apt-get install subversion libapache2-svn subversion-tools



En la instalación, se ha incluido el modulo libapache2-svn que le proporciona a Subversion el servidor backend WebDAV para el soporte de los repositorios a través de HTTP y HTTPS, también se incluyo en la instalación las herramientas de subversion que nos pudieran ser útiles en un futuro.
De una vez creamos un repositorio, con la salvedad que siempre que vamos a crear un repositorio se hace con el usuario de subversion svnadmin ya que el comando crear no existe en el usuario svn.


svnadmin create /var/svn-repositorios/pruebas


Ahora vamos a crear un grupo en el sistema para organizar los usuarios de subversion, luego con el usuario que estamos logueados en el sistema podemos agregarlo al nuevo grupo, en mi caso mi usuario es daniel y quedaria todo de la siguiente forma.


sudo groupadd sub

sudo addgroup daniel sub


Cambiamos de duenio al repositorio creado asi como otorgamos los permisos necesarios, para poder trabajar sin ningun problema.


sudo chown -R www-data /var/svn-repositorios/Final daniel

sudo chmod -R 770 /var/svn-repositorios/Final


Del directorio /etc/apache2/mods-available/ modificaremos el archivo dav_svn.conf y ya sea que descomentes o agregues nuevas tags, pero que quede de la siguiente manera.


DAV svn
SVNPath /var/svn-repositorios/Final
AuthType Basic
AuthName "Repositorio de Prueba Final (practica1)"
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user



Ahora para aplicar los cambios deberemos reiniciar Apache


sudo /etc/init.d/apache2 restart


Ahora podemos acceder al repositorio desde nuestro servidor local (localhost)


http://localhost/Final/


Ahora para organizar nuestro entorno de integracion, agregaremos las carpetas, trunk, branches y tags


svn mkdir file:///var/svn-repositorios/Final/trunk
svn mkdir file:///var/vsn-repositorios/Final/branches
svn mkdir file:///var/svn-repositorios/Final/tags



Para probar lo que hemos realizado entonces vamos a importar un proyecto, este proeycto es algo simple solo para probar nuestro repositorio, en este casoes un proyecto realizando en NetBeans 6.5, imortaremos todo el proyecto a nuestros repositorios de la siguiente forma.



svn import /home/daniel/NetBeansProjects/Hola file:///var/svn-repositorios/Final/trunk



Podemos observar que el primer parametro que recibe import es el directorio del proyecto que queremos importar al repositorio siempre recordandonos de poner el tipo de protocolo para el directorio del repositorio, el cual es file:// y como es proyecto original, inicialmente lo almacenamos en la carpeta TRUNK

Ahora ya habiendolo importado ahora probaremos algunos comandos por ejemplo, vamos ahora exportar el mismo proyecto que importamos pero en otro lugar claro esta y lo modificaremos para luego hacer un commit y realizar una nueva version, entonces veamos como se exporta un proyecto desde un repositorio



svn chekout http://localhost/Final/trunk /home/daniel/Escritorio/ProyectoSubversion


De esta manera ya tenemos una copia del proyecto que se encuentra en el repositorio en otra direccion local de nuestra computadora, ahora ya podremos modificar y luego hacer commit y de esta manera se crea una nueva version dentro de nuestro repositorio y lo veremos de mejor forma al momento de usar las herramientas Trac y Hudson, bueno luego de modificar las fuentes se procede a colocarse dentro del directorio de la copia del proyecto y se da un commit.


svn commit -m 'modificado'


Note que el parametro -m 'modificado' indica el mensaje sobre la modificacion que se ha realizado al proyecto, de esta manera ya hemos probado nuestro repositorio que funciona correctamente ahora, para pder extender nuestro entorno de integracion y tener una mejor manejo sobre el exiten herramientas graficas para su mejor control, en este caso veremos como instalar y configurar Hudson el cual es el que construye y prueba el proyecto cada cierto tiempo, este tiempo se puede modificar y puede ser definido por el usuario,

Primero que nada instalamos TOMCAT 6 en este caso y el modo jk


sudo apt-get install tomcat6 libapache2-mod-jk


Ahora instalamos Hudson y para eso descargamos el .war y lo colocamos en la carpeta webapps de tomcat, que previamente hemos instalado, entonces para descargarlo directamente en la carpeta nos posicionamos en la carpeta WEBAPPS y ejecutamos el siguiente comando para que descargue el .war en el directorio actual.


sudo wget http://hudson.gotdns.com/latest/hudson.war


Cabe mencionar que para utilizar estas herramientas necesitaremos tener instalado el jdk y tambien hay que poner la direccion de la variable de entorno segun donde se guarde el jdk, entonces luego de haver instalado el JDK deberemos colocar la direccion de lavariable de entorno JAVA_HOME, entonces en la consola ejecutamos, en mi caso esa es mi direccion del jdk



export JAVA_HOME=/usr/lib/jvm/java-6-sun



Listo ahora ya podremos acceder ha Hudson desde nuestro explorador tecleando en la barra de direcciones http://localhost:8080/hudson deberia de mostrarnos una de inicio, desde aca podremos crear el enlace a nuestro proyecto.





Ahora veremos como se crea un nuevo proyecto y se enlaza al repositorio.



tambien



A continuacion veremos que opciones debemos elegir, almenos las basicas aca solo es una parte introductoria,



Al final le damos guardar y listo ya podremos acceder a nuestros repositorios de nuestro proyecto desde Hudson y asi poder compilarlo, adjunto un imagen de mi pagina de mi proyecto con varias compilaciones en donde fayo en varias veces y el de color azul es cuando se ha compilado correctamente



Si observamos la imagen anterior en la parte inferior del menu se encuentra el logo de Tracde que es una huellita, esto quiere decir que se encuentran integradoas, unicamente hay que instalar el plugin de Trac, accediendo desde el menu principal de Hudson al Manage y ahi en la opcion de Manage Plugins, buscar la de trac e instalarla y listo, ya podremos trabajar con Trac desde Hudson.

Ahora instalaremos una herramienta para el seguimiento de los proyectos como lo es Trac, donde el objetivo de esa herramienta es ayudar a los desarrolladores como al propio jefe o jefes del proyecto ha darle un matenimiento mientras la construccion de todo el sistema alojado en un repositorio, asi como ayudar a la planificacion, cronograma, asignar activdades a los desarrolladores en fin para administrar de mejor manera el proyecto, al inicio Trac puede parecder muy simple pero gracias a que posee una infinidad de plugins, puede ser mayormente adoptado a nuestras necesidades.

Instalacion de Trac y creamos una nueva carpeta con el nombre de trac que nos serivira para almacenar nuestros proyectos


apt-get install trac

mkdir /var/trac


Luego creamos un proyecto, almenos la carpeta que va contener el proyecto, lo cual al ejecutar el comando initenv este nos va a pedir toda la informacion necesaria para enlazar nuestros repositorios y llevar el control que se requiere, por ejemplo inicialemente pedira la base de datos, unicamente teclean enter para que utilice la default que es una que trae el sistema, luego el software que esta usando para las versiones en nuestro caso es Subversion, pero tambien este es el default de Trac asi que con un Enter sera suficiente por ultimo pide la direccion del repositorio la cual deberemos agregarla en mi caso mi direccion que coloco es /var/svn-repositorios/Final.



trac-admin /var/trac/Final initenv



Ahora volvemos a configurar apache para que las peticiones que van al directorio Trac, que hemos creado para asi poder trabajar desde el servidor, nos dirijimos ahora al archivo /etc/apache2/sites-available/default y agregamos lo que a continuacion se describe antes de cerrar el tag Virtual Host


SetHandler mod_python
PythonInterpreter main_interpreter
PythonHandler trac.web.modpython_fronted
PythonOption TraceEnvParentDir /var/trac
PythonOption TracUrlRoot /trac


Volvemos a recargar apache y ahora solo nos queda dar los permisos necesarios, por ejemplo


chown -R www-data.www.data /var/trac/Final


Ahora ya podremos acceder a Trac desde apache, unicamente colocando en la barra de direcciones localhost:/trac y ahi aparecera nuestro proyecto contenido en el repositorio.




Ahora veremos como cambiar de aspecto a la plantilla que trae por default para mostrar los repositorios desde apache2, yo me he bajado algunos estilos desde la siguiente pagina web: http://www.sarkis-webdesign.com/plantillas-web-gratis.html y luego le he cambiado de nombre al CSS bajado por el nombre de svnindex.css al igual que svnindex.xsl a la carpeta /var/www si traen imagenes el CSS deberemos copiar la carpeta tambien y de esta manera es aplicada la plantilla deseada.



Para fines de calificacion de mi practica coloco la siguiente imagen colocando los UID de mis discos duros




Investigacion de Las Herramientas de Integracion

SUBVERSION


COMANDOS DE SUBVERSION


Exportando una copia del proyecto con el que se va a trabajar (co = chekout)


svn co http://www.webProyecto.com/repositorios/svn/fuentes /dir/local


Esto copiar los archivos que se encuentran desde el repositorio de la pagina web indicada y los copiara en un dirección local de nuestro sistema. Una vez ejecutado el comando la vemos q la salida empieza a enumerarse cada uno de los archivos contenidos en el proyecto con la letra A antepuesta indicando que se ha aniadido.


Manejo de ficheros

ADD:
Comando para crear ficheros dentro de nuestro repositorio.

svn add /ruta/local/de/nuestro/fichero


CP:
Comando para copiar ficheros dentro de nuestro repositorio.

svn cp /ruta/local/de/nuestro/fichero


MV :
Comando para mover ficheros hacia nuestro repositorio.

svn mv /ruta/local/de/nuestro/fichero


RM:
Comando para eleiminar ficheros de nuestro repositorio.

svn rm /rutua/local/de/nuestro/fichero


STATUS:
Comando para verificar el estatus de nuestro repositorio.


svn status


Este comando muestra una lista de los archivos modificados o no del repositorios los cuales los identifica con una letra para identificar que tipo de modificación ha sufrido, por ejemplo la letra A indica que el fichero ha sido añadido al repositorio, una letra D si ha sido eliminado el fichero, M si el fichero ha sido modificado o _M si el fichero ha sido modificado con respecto a sus propiedades, también ? si el fichero existe en la copia local, pero no en el repositorio, ! si el fichero existe en el repositorio pero no en la copia local.


REVERT:
Revierte la modificación que se hay realizado en un fichero.

svn revert fichero


UP:
Actualiza los cambios en el repositorio.

svn up

El cual al igual que el comando status nos mostrara una lista con los ficheros denotandolos con una letra, además adicionando nuevas letras con diferentes significados, por ejemplo U el fichero que no habíamos cambiado es actualizado, G si el fichero modificado ha sido actualizado y unido con el anterior sin ningún problema y C si ha esta actualización ha ocurrido un problema al unirlo con la versión anterior.


RESOLVE:
Le indica a Subversion que se ha resuelto un conflicto que ocurría anteriormente.

svn resolve fichero


COMMIT:
Envía los cambios que hayamos realizado, observando primero su estatus asi como la actualización y de esta forma agregamos al repositorio los ficheros actualizados.

svn commit -m “ficheros actualizados y agregados, “

El parámetro -m sirve para escribir una descripción del commit que se esta realizando, indicando por ejemplo que cambios se han hecho ha la nueva versión.







IMPORT:
Sirve para importar nuestro código que queremos agregar inicialmente a los repositorios, para que puedan ser luego modificados por otros usuarios

svn import
file:///var/svn-repositorios/pruebas /home/daniel/NetBeans/HolaMundo Hola

en donde el primer parámetro es la ruta del repositorio y se utiliza la clausula “file” ya que el repositorio se encuentra en un directorio local a nuestro sistema, y no desde un servidor remoto en ese caso seria “http://” , el segundo parámetro es el fichero que se copiar hacia los repositorios y por ultimo el nombre de la carpeta dentro del repositorio al cual serán importados los ficheros.


CHEKOUT:
Sirve para conseguir el código que se encuentra dentro de un repositorio y copiarlo a un directorio local de nuestro sistema.

svn checkout http://localhost/Final/trunk /home/daniel/Escritorio/ProyectoSub





HUDSON:

Hudson monitor-ea reiteradas ejecuciones de trabajo sobre un proyecto de software, construye y prueba continuamente estos proyectos de software, proveyendo una fácil comunicación al momento de la integración de sistemas, logrando una mayor facilidad la integración del sistema por parte de los desarrolladores. Hudson también monitor-ea ejecuciones de trabajo externos de un proyecto de software lo que hace imprescindible para poder mantener un mejor control del sistema en desarrollo y determinar cuando algo esta mal.

Una de las cosas que destacan es que la instalación es bastante fácil así como su fácil configuración totalmente desde su interfaz gráfica en este caso su GUI WEB, haciendo que sea menos tedioso para el usuario, aparte de que cuenta con los servicios de mensajería instantánea de integración es decir que se puede recibir notificaciones en tiempo real de algún error en la construcción o pruebas del sistema de software en desarrollo así como extenderlo con PlugIns que pueden mejorar su experiencia, también cuenta con un gran soporte de Maven, lo que permite una migración rápida de los proyectos que tengamos al nuevo sistema y lo mejor que es totalmente software libre.





Alternativas a Hudson

CRUISECONTROL

Es un software libre en similitud a Hudson, con la diferencia que fue desarrollado en Java, la cual puede compilar automáticamente proyectos java utilizando al igual que Hudson utiliza la herramienta para realizar las tareas repetitivas hablo de Ant y Maven diseñado para la construcción y el control de gestionamiento de proyectos. Al igual que Hudson se basa en la Integración Continua, compilando y construyendo cada vez que se realiza un cambio en las versiones del software que se esta desarrollando, tambien cuenta con servicios de notificaciones ya sea por correo, o paginas web, su funcionamiento pasa a través de un demonio el cual continuamente busca cambios en el sistema de versiones como lo podría ser Subversion, CruisControl se forma de tres módulos principales, los cuales son La Construcción en Bucle, La Presentación de informes y la barra de instrumentos.




ANTHILL
Otra de las opciones para realizar una integración continua basados en repositorios, automatizando el ciclo de vida, reuniendo la información y monitorizando el progreso del sistema en desarrollo mientras detecta posibles erroes he incoherencias en el sistema, una de las características importantes es que construye artefactos para su reutilización en etapas posteriores del ciclo de desarrollo. Soporta lenguajes como Java, .Net, C/C++ y trabaja sobre distintas plataformas de sistemas operativos, como lo son Windows, Solaris, AIX, Mac, tiene la capacidad de construir con scripts existentes como lo son Ant, Maven, Make, MSBuild, y NAnt, etc. .

Al igual que en las anteriores herramientas anthill también cuenta con un modulo de mensajería para las notificaciones, una de las desventajas mas importantes que se pueden mencionar es que no es 100% libre sino que únicamente es libre para el desarrollo de software libre, en otra circunstancias la licencia debe ser pagada.



TABLA COMPARATIVA

Caracteristica
Hudson
CruiseControl
AntHill
Open Source
Si
Si
No
Lenguaje
Java
Java
Java
Gratuito
Si
Si
Solo Proyectos Open Source
Soporte SCM



CVS
Si
Si
Si
Subversion
Si
Si
Si
Sistema de Archivos SCM
No
Si
Si
Archivos HTTP
Si
Si
No
Gestion De Construcción



Paralelos
Si
Si
Si
Construcciónes Distribuidas
Si
Si
Si
Seguridad



Autenticación de Usuario
Si
Si
Si
Esquemas de Autorización del Usuario
Si
No
Si
Integracion LDAP
Si
No
Si
Herramientas Soportadas



Shell
Si
Si
Si
Ant
Si
Si
Si
Groovy
Si
No
Si
Maven
Si
Si
Si
Maven2
Si
Si
Si
Integraciones a IDE



Eclipse
Si
Si
Si
Visual Studio
No
Saber
Si
Gestion Remota



SOAP
No
No
Si
JMX
Si
Si
No
REST
Si
Saber
No




Justificación:
Tiene una interfaz amigable con la cual se puede trabajar cómodamente.

Es sencillo de realizar nuevos plugins.

Tiene una fácil instalación.

Aunque la configuración ha veces se complica no es motivo de menospreciar la
herramienta.

Como se vio en la tabla una de las mejores opciones es porque puede utilizar Ant y Maven.

Es un software totalmente libre.

Una desventaja si se esta trabajando con programación en .Net es que esta herramienta no trae soporte.

TRAC

Es un sistema de software escrito en phyton para el seguimiento de proyectos de sistemas en desarrollo y los errores que se puedan dar en el desarrollo de los mismos, basado en el software web de gestión de proyectos, la misión de trac es ayudar a los desarrolladores al mantenimiento del software en el proceso del desarrollo, permitiendo enlazar los errores del sistema en desarrollo que se encuentra en una base de datos y un sistema de control de versiones como lo es subversion, base de esta herramienta, utilizado también como una interfaz web para el sistema de versiones antes mencionado Subversion y otros como Git, Mercurial.

Algunas otras características importantes es que cuenta con una gestión de proyectos por ejemplo planes de trabajos, también cuenta con un seguimiento de fallos y tareas, lleva una cronologia de todas las actividades recientes, en forma de log, tiene fuentes RSS y Extensibilidad con scripts de phyton.





Alternativas a Trac

REDMINE

Al igual que Trac es un sistema de gestión de proyectos para la ayuda en el desarrollo de software y similar a trac ya que también su interfase web, en el cual se puede dar de alta a los administradores y desarrolladores según este estructurada su jerarquía del desarrollo del sistema, luego de darse de alta pueden ser realizados diagramas de grant para calendarizar mejor cada uno de los hitos del proyecto, cada pagina de inicio es diferente según el rol si es programador o jefe del proyecto, en donde los programadores tendrán una lista de tareas que tendrán a su cargo realizar, donde podrán visualiza el tiempo que le ha transcurrido hacer una tarea.

También pueden ser dados de alta los bugs es decir que pueden ser asignados también los diferentes problemas que pueda causar algún código incorrecto y que el desarrollador debe arreglarlos, también cuenta con un envío automático de correos para las distintas notificaciones con posibilidades de subir ficheros y documentos como adjuntos a las tareas, se pueden también definir otros tipos de tareas y bugs,



MANTISBT
Sistema de gestión de proyectos basado en la web bugtacking, escrito en PHP y trabaja con varios administradores de base de datos como MYSQL , MSSQL y base de datos como PostgreSQL y un servidor web, las características principales de este software es que tiene una licencia GPL, tiene una fácil instalación como trac, tiene una forma muy fácil de probar, al igual que los anteriores también es basado en web y es soportado por cualquier sistema operativo con soporte de PHP.

Cosas importantes en el manejo es que los usuarios pueden pueden monitorizar cosas especificas, cuenta con fuentes RSS, los usuarios pueden restringirse por niveles, esta disponible en 68 idiomas, cuenta con integración LDAP para las autenticaciones así como la autenticación básica de http y cuenta con varios soportes para diferentes DBMS.



TABLA COMPARATIVA
Caracteristica
Trac
RedMine
MantisBT
Open Source
Si
Si
Si
Basado en Web
Si
Si
Si
Gratuito
Si
Si
Si
Varios Proyectos
Si
Si
Si
Fuentes RSS
Si
Si
Si
Aut
LDAP
LDAP
LDAP
Dispositivos Mobiles
No
No
Si
Notifi
Si
Si
Si
Interface
Buena con Plugins
Buena
Buena


Justificación:

Cuenta con una fácil instalación.
La interfaz aunque inicialmente no es completa puede ser ayudada por un sin fin de plugins que ayudan al mejoramiento de esta.
Cuenta con notificaciones por correo.
Con los diferentes plugins se puede obtener el mejor rendimiento y performance al momento de administrar un proyecto.