Controlando versiones de código fuente con una solución buena, bonita y barata

Uno de los muchos desafí­os que enfrentan las Software Factories tiene relación con la Gestión de la Configuración (SCM para los amigos) y puntualmente, el control de versiones. No está de más dejar claro a cualquier newbie en estas lidies que hacer una correcta gestión del versionamiento no solo hace del acto de desarrollar en equipo un problema resuelto, también permite mantener backups de cada uno de los cambios realizados a tus fuentes, y finalmente un soporte para la gestión de ambientes entre otras ventajas.

Pasando a lo práctico, por razones laborales me aboqué a levantar un entorno que permitiera hacer gestión de un repositorio de códigos fuentes sin gastar un peso, que tuviese buen rendimiento, escalable y fácil de administrar.

Oracle VirtualBoxMe incliné por la implementación de máquinas virtuales con VirtualBox que tiene un desempeño “aceptable” (es una porquerí­a si quieres enchufarle un USB o puertos COM, pero para este ejercicio no es relevante). Inicialmente desarrollada Open Source pero tras ser adquirida por Oracle hace algunos años, mataron lo lindo del proyecto. Hoy sigue funcionando y si bien han endurecido el sistema de licenciamiento, sigue siendo “gratis”.

ubuntu-logo14Opté por Ubuntu 12.10 como servidor de aplicaciones simplemente porque me gusta y, siendo esta una distro ampliamente utilizada, cuenta con una extensa comunidad que presta ayuda y soporte a los náufragos. Sin embargo, el primer problema con que me topé fue que no lograba instalar correctamente Ubuntu Server 12.10 en mi VirtualBox. No tengo claro cual fue el problema y la verdad, tampoco quise dedicarle mucho tiempo.

En Virtualboxes.org amablemente disponen para descarga imágenes de máquinas virtuales pre configuradas con, entre otras, Ubuntu Server. Que puedo decir, mil gracias! Descargas, descomprimes y abres el archivo vbox que trae la configuración de la máquina virtual.

No me detendré mucho en la configuración de VirtualBox para optimizar su explotación, solo recomendarles que la tarjeta de red la configuren como “Adaptador Puente” y no “Nat” como viene configurado por defecto, así se le asignará una IP individual y podrá ser vista desde toda tu red.

Muy bien, arrancamos la MV y aplicamos actualización del SO de inmediato. Recuerda que Ubuntu Server no trae interfaz gráfica y objetivamente, no la necesitamos. A pura consola muchachos(as), es mas romántico.

#sudo apt-get update
#sudo apt-get upgrade

SubversionAhora estamos casi listos para comenzar a trabajar. Antes hablemos un poco de Subversion, herramienta que gestiona el control de versiones, también muy popular y ampliamente utilizada. Sin embargo, mas adelante quiero escribir sobre Git y como instalarlo dentro de una MV.

Me incliné inicialmente por SVN porque es una herramienta medianamente conocida por el mercado y por mi cliente, aunque no del todo bien utilizada. Sin embargo las caracterí­sticas de Git lo hacen muy interesante y eventualmente me gustaría explorar mas adelante.

En lo personal, siempre preferí instalar LAMP Server porque te deja Apache y PHP funcionales para levantar una interfaz gráfica al SVN.

#sudo tasksel install lamp-server

Si todo salió bien, consulta el estado de Apache y MySQL con estas instrucciones:
#sudo service apache2 status
#sudo service mysql status

Luego, instalamos Subversion:
#sudo apt-get install subversion subversion-tools libapache2-svn

Habilita los módulos dav_svn:

#a2enmod dav
#a2enmod dav_svn

Y con esto ya lo tenemos instalado. Lo que viene ahora es configurarlo. Comenzaremos agregando un grupo de usuarios para SVN:

#sudo addgroup <nombre del grupo>

Y agregamos a los usuarios al grupo y configuramos las passwords:

#sudo usermod -a -G <nombre del grupo> <nombre de usuario>
#sudo htpasswd -c /etc/apache2/dav_svn.password <nombre de usuario>

Si tienes problemas con htpasswd, instala el apache2-utils.

Vamos por el repositorio. Primero creamos la carpeta y luego el repositorio, para finalmente configurar los permisos.

#mkdir <path repositorio>
#cd <path repositorio>
#sudo svnadmin create /<path repositorio>
#sudo chmod -R 775 /<path repositorio>/
#sudo chown -R www-data:<nombre del grupo> /<path repositorio>/

Ahora habilitaremos una interfaz web para leer nuestro SVN, editando el archivo dav_svn.conf:
#sudo nano /etc/apache2/mods-available/dav_svn.conf
Y agregando las siguientes lineas:
<Location /svn>
DAV svn
SVNPath /<path del repositorio>/
AuthType Basic
AuthName "Nombre del Repositorio"
AuthUserFile /etc/apache2/dav_svn.passwd
Requiere valid-user
</Location>

Luego reiniciamos Apache para que tome los cambios:
#sudo service apache2 restart

Con esto ya tienen habilitado Subversion con ambiente web que puedes ver en http://ip_de_tu_MV/svn.

Pero prefiero instalar una aplicación web mas pro: webSVN.

#sudo apt-get install websvn
Movemos la instalación de websvn a las carpetas del Apache:
#sudo cp -r /usr/share/websvn/ /var/www/

Ahora la hacemos visible en Apache agregando algunas lineas a /etc/apache2/mods-available/dav_svn.conf:
<Location /websvn>
Options FollowSymLinks
order allow,deny
allow from all
AuthType Basic
AuthName "Subversion Repository"
</Location>

Reiniciamos Apache:
#sudo service apache2 restart
Y listo… entras a http://ip_de_tu_MV/websvn y tienes un lindo SVN corriendo.

En unas semanas escribiré algunas mejores prácticas para el uso de SVN, que son los trunk, branch y tag y como sacarles mejor partido.

Nos leemos!

Deja un comentario