Esta vez hoy a hablar acerca del control de versiones de código fuente, dentro del contexto empresarial, se sabe que, por regla de facto, muchos de los grandes proyectos, tanto open source como privados se están versionando con GIT (en menor medida con SVN y Team Foundation Server), y cualquier desarrollador que se respete tiene cuenta en el sitio de repositorios GitHub.
De igual forma llevar un correcto control de versiones es todo un arte y más cuando tu equipo de trabajo no es disciplinado y/o la mayoría son novatos, te encontrarás con problemas tales como: planchado de código fuente, eliminado accidental de archivos, conflictos entre versiones. En particular con los proyectos de Visual Studio, donde los desarrolladores comparten archivos de solución y *.csproj, las tareas para resolver conflictos conllevan no mucho esfuerzo, pero si mucha paciencia y voluntad de evangelizar.
Si al igual que yo, tu labor consiste en dirigir al equipo de trabajo, asegurar que todos lleven las mejores prácticas, y además garantizar los entregables de tu proyecto de software, quiero hablarte de un ambiente de control de versiones con esteroides, es decir, estoy hablando de GITLAB.
¿Qué es GitLab? https://about.gitlab.com/
Básicamente Gitlab es en entorno colaborativo de trabajo que entre otras cosas ofrece la herramienta de control de versiones basada en GIT (así que ya has usado GIT, no tendrás problemas en familiarizarte de manera rápida), algunas de las características que GitLab ofrece son las siguientes:
- GitLab tiene dos opciones para llevar el control de tus proyectos:
- Crear una cuenta en su sitio oficial https://gitlab.com/users/sign_in (donde a diferencia de GitHub si te permiten tener algunos proyectos privados sin costo alguno)
- Montar tu propio servidor de GitLab, a diferencia de GitHub que no cuenta con dicha opción (al día de hoy la forma más rápida de montarlo es en un ambiente Linux), y precisamente de esta esa opción es la que les voy a hablar.
- Control de versiones basado en GIT. Utilizarás las mismas herramientas y clientes que usas con un entorno tradicional de GIT, si aún no utilizas GIT te recomiendo que le des una leída a sus premisas y principales diferencias con SVN.
- Interfaz Web. He de decir que aún le falta mucho para ser una maravilla gráfica, pero su interfaz cumple con las necesidades de la mayoría de los equipos de trabajo, permite gestionar todos los proyectos, grupos, usuarios, tags, branchs, etc.
- Control de actividad centralizo. Permite visualizar el trabajo realizado por cada uno de los colaboradores, como, por ejemplo: commits, branchs, resolución de incidencias, etc.
- Seguimiento de incidencias. La plataforma ofrece una herramienta para dar seguimiento a las incidencias encontradas en cualquier etapa del desarrollo, algo similar a Mantis Bug Tracker, Bugzilla, pero con algunas limitaciones.
- Merge Request. El mismo concepto de pull request que en GitHub, permite hacer solicitudes de integración de cambios de una rama o fork.
- CI (Continuous Integration) / CD (Continuous Delivery). EL PILAR DE TODO ENTERNO DE DESARROLLO, la integración continua y la liberación continua (tema para otro post), esto nos permite crear un entorno automatizado de compilaciones, pruebas y generación de nuestros empaquetados para producción.
- Wiki, Snippets. Por cada proyecto, GitLab permite llevar una wiki, que se puede convertir fácilmente en nuestra base de conocimientos del proyecto, adicionalmente también podemos colocar snippets para ayudar a nuestros compañeros o a nosotros mismos, recordando como hacemos las cosas, a nivel de código.
- Integración. GitLab se integra perfectamente con otras herramientas, las que más me gustan y que considero fundamentales en un entorno empresarial y cerrado son:
- Mattermost. Comunicación centralizada en la nube (en nuestros propios servidores), no depender de Skype, Vsee o demás herramientas de comunicación, algo parecido a discord.
- Esta integración tiene una característica interesante, si dentro del entorno de GitLab algo sucede, como, por ejemplo: un nuevo release, un nuevo merge request, etc., automáticamente Mattermost se encarga de notificar a través de un canal a los interesados.
- Jenkins. Herramienta para generar un entorno de integración continua.
Lo anterior en un resumen breve de algunas características que yo he probado, pero como cualquier otra herramienta, no todo es miel sobre hojuelas, existen algunas desventajas, que son fácilmente superables con el tiempo y cambiando un poco el paradigma de trabajo, algunas son:
- Curva de aprendizaje, en particular si tu equipo de trabajo no está familiarizado con GIT.
- La asignación de permisos se hace a nivel de roles, grupos y proyectos, es decir, a diferencia de SVN, no puedes asignar permisos particulares sobre un archivo, carpeta, etc., no al menos en la versión Core.
- Infraestructura. Por ley se monta sobre un Linux, lo que te obliga al menos instalar una maquina virtual con Linux, en el caso de SVN lo puedes montar en cualquier Windows.
- La versión Core no permite mantener los Forks actualizados de manera automática, es decir, los desarrolladores tienen que realizar sus propias integraciones para llevar al día su Fork.
- Orientación libre y colaborativa. Aunque los proyectos se pueden crear de manera privada, la filosofía de GitLab es más libre y colaborativa, por lo tanto, en ambientes empresariales con muchas restricciones, no sea la solución más adecuada.
Estas son algunas de las desventajas, pero más que desventajas, se podrían llamar propiamente observaciones, como verán son muchas más las bondades que nos motivan a implementar un ambiente con las características de GitLab.
Conclusión
GitLab es una gran herramienta para controlar el trabajo colaborativo y el código fuente de cualquier proyecto, representa un cambio de paradigma para algunos desarrolladores, que no están familiarizados con los conceptos de integración continua y en particular de GIT.
Si quieres mantener de manera organizada tus proyectos y con utilidades gráficas y amigables, GitLab es la mejor herramienta que podrás encontrar, su instalación es muy sencilla y de paso aprenderás a llevar un correcto ciclo de vida de software.
Pueden ver más características aquí: https://about.gitlab.com/features/