Hoy me gustaría explicar cómo tener un entorno de desarrollo óptimo para freelancers o grupos pequeños de trabajo por menos de 10€ idealmente con un servidor dedicado o uno virtualizado.

Bitbucket

Lo primero que necesitamos es una cuenta de Bitbucket. Bitbucket permite alojar repositorios GIT (además de mercurial) como podría hacer Github, pero tiene la peculiaridad de que nos permite tener repositorios privados ilimitados de forma gratuita. La única limitación que tiene es el número de usuarios que pueden acceder a tus repositorios: que empieza siendo 5 y que puede subir hasta 10 con referers. Los proyectos tienen también de forma gratuita, wiki, un sistema de tareas y de otro revisión de código.

Jira 6

En Atlassian venden el Jira 6 autogestionable para 10 usuarios por 10$. Como Bitbucket ya limita a 5-10 usuarios, posiblemente con 10 usuarios también haya suficiente al menos para llevar un tracking interno de tareas.

TortoiseGIT

El TortoiseGIT es la opción por excelencia para usar GIT desde windows.

Vincular Jira 6 a Bitbucket

Lo primero en el Jira nos vamos a la configuración del sistema -> Add-Ons y en el lateral veremos la sección DVCS Accounts:

En la sección veremos que nos permite vincular una cuenta de bitbucket o de github directamente:

Tras lo que únicamente tendremos que escribir nuestro nombre de usuario:

Nos detectará los repositorios y buscará en los logs de los commits referencias a las tareas que tenemos:

De forma que si tengo una tarea TD-2 y escribo en parte del log del commit de git “TD-2”, se vinculará de forma automática a la tarea en el Jira.

El Jira internamente crea un servicio Post en los proyectos de bitbucket para enterarse de cuando se ha pusheado al repositorio y poder mirar logs para vincular tareas.

Configurar TortoiseGIT para enlazar a tareas

Es posible configurar el TortoiseGIT/SVN para que con ciertos patrones nos cree un enlace a la tarea:

De esta forma en el log de commits podremos ver enlaces a las tareas y hacer click sobre ellas teniendo un doble enlazado en el show log y en el jira:

Sistema de deploy automático

De la misma forma que al Jira se le notifican los pushes del git via URL, es posible crear un sistema de deploy automático basado en lo mismo. Se crea un servicio al que se pueda acceder desde Internet y bitbucket hará una petición POST al servicio. Desde el servicio se puede hacer un “git pull” a una carpeta local y así actualizar archivos. Opcionalmente además del PULL si es una aplicación de Node, se le puede especificar para que reinicie el servidor si han habido cambios. El git pull actualizará únicamente la rama actual (master si es en la que estamos) de forma que podemos trabajar en una rama de desarrollo y hacer merges al master para subir a producción. Lo ideal es hacer el pull en una carpeta a parte, lanzar la batería de tests, y si pasan, hacer un switch con la carpeta de producción.

Para poder usar git desde el servidor y poder hacer pulls es necesario que el usuario que gestione la petición de deploy tenga permisos para actualizar la carpeta con el código y que tenga un archivo .ssh/config para poder hacer un pull con los cambios.

Yo tengo un usuario adicional en bitbucket al que le doy permisos de solo lectura a los repositorios a los que quiero poder deployear.

~/.ssh/config

Host bitbucket.org
        Hostname bitbucket.org
        User my_deployer_user
        IdentityFile ~/.ssh/bitbucket_deploy_rsa_ne

En el archivo ~/.ssh/bitbucket_deploy_rsa_ne habría que meter la clave privada sin encriptar en RSA que empieza por “—–BEGIN RSA PRIVATE KEY—–”.

Conclusiones

Y con esto tendríamos nuestros proyectos de forma segura en la nube, un sistema potente de gestión de tareas y un sistema de deploy que nos permite subir cambios a producción simplemente pusheando al master.